即使重新创建了pod,也要为pod分配特定路径

时间:2016-10-25 15:50:15

标签: openshift-origin openshift-enterprise

我在OpenShift中运行某个软件,它由两个pod组成。该软件具有许可证限制,仅允许两个实例。除此之外,两个pod必须基于相同的图像,因为这是我必须遵循的(t / f)ernal设计规则。

问题是两个pod通过共享路径进行通信,每个pod都有自己的数据位置。把它想象成这些路径:

  1. / data / shared
  2. /数据/ INSTANCE1
  3. /数据/ INSTANCE2
  4. 如何确保我在pod1中放置的某个配置文件始终配置为使用/data/instance1,并且pod2始终配置为使用/data/instance2 甚至这两个pod被删除并再次删除? 我已经尝试根据主机名执行此操作但因为这会定期更改并且不遵循可重现的逻辑(例如softwarename-tzyjkd),此方法失败。

    理想情况下,我可以访问openshift提供的一种“实例计数器”。

    From common image to container and pod

1 个答案:

答案 0 :(得分:1)

查看为每个实例创建单独的部署配置,并设置传入的环境变量以不同的方式表示路径。让应用程序使用环境变量来知道要使用的路径。

如果需要在两个实例之间对流量进行负载均衡,请设置路由以按所需比率将流量定向到两者。

例如:

oc new-build getwarped/s2i-httpd-server~https://github.com/getwarped/httpd-parked-domain.git --name mysite

oc new-app mysite --name mysite1 --env DATA=instance1

oc new-app mysite --name mysite2 --env DATA=instance2

oc expose svc/mysite1 --name mysite

oc set route-backends mysite mysite1=50 mysite2=50

这会让你:

$ oc get all -o name
buildconfig/mysite
build/mysite-1
imagestream/mysite
imagestream/s2i-httpd-server
deploymentconfig/mysite1
deploymentconfig/mysite2
replicationcontroller/mysite1-1
replicationcontroller/mysite2-1
route/mysite
service/mysite1
service/mysite2
pod/mysite-1-build
pod/mysite1-1-64c6a
pod/mysite2-1-v3lf4

$ oc get routes
NAME      HOST/PORT                      PATH      SERVICES                    PORT       TERMINATION
mysite    mysite-book.127.0.0.1.xip.io             mysite1(50%),mysite2(50%)   8080-tcp
顺便说一句,如果您认为某些软件已经在使用许可证,您甚至无法启动软件,那么您需要将部署策略从Rolling更改为Recreate。这将意味着在启动新实例之前将关闭现有实例。因为虽然您有两个,但在重新启动流量之前,您始终可以调整流量路由到另一个流量的比率。这样,当实例完成时,您将不会有请求失败。您可以在重新启动流量后重新平衡流量,或者将所有流量切换到流量并重新启动另一个流量。