为 pod 分配特定路径,即使它被重新创建
Assign specific path to pod even if it is recreated
我运行OpenShift中的某个软件,由两个pods组成。该软件有一个许可证限制,只允许两个实例。除此之外,这两个 pods 必须基于相同的图像,因为这是我必须遵循的内部(t/f)设计规则。
问题是两个 pods 通过共享路径进行通信,并且每个 pod 都有自己的数据位置。将其视为这些路径:
- /data/shared
- /data/instance1
- /data/instance2
如何确保我放置在 pod1 中的某个配置文件始终配置为使用 /data/instance1
并且 pod2 始终配置为使用 /data/instance2
even 如果两个 pods 中的任何一个被删除并再次删除?
我已经尝试根据主机名执行此操作,但因为它会定期更改并且不遵循可重现的逻辑(例如 softwarename-tzyjkd
),所以这种方法失败了。
理想情况下,我可以访问 openshift 提供的一种 "instance counter"。
考虑为每个实例创建单独的部署配置,并设置传入的环境变量以不同地表示每个实例的路径。让应用程序使用环境变量来知道要使用哪个路径。
如果需要在两个实例之间负载平衡流量,则设置路由以按要求的比例将流量定向到两个实例。
例如:
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。这意味着现有实例将在启动新实例之前关闭。因为虽然你有两个,但在重新启动一个之前,你总是可以调整流量路由到另一个的比率。这样你就不会在实例完成时请求失败。您可以在一个重启后重新平衡流量,或者将所有流量切换到它并重启另一个。
我运行OpenShift中的某个软件,由两个pods组成。该软件有一个许可证限制,只允许两个实例。除此之外,这两个 pods 必须基于相同的图像,因为这是我必须遵循的内部(t/f)设计规则。
问题是两个 pods 通过共享路径进行通信,并且每个 pod 都有自己的数据位置。将其视为这些路径:
- /data/shared
- /data/instance1
- /data/instance2
如何确保我放置在 pod1 中的某个配置文件始终配置为使用 /data/instance1
并且 pod2 始终配置为使用 /data/instance2
even 如果两个 pods 中的任何一个被删除并再次删除?
我已经尝试根据主机名执行此操作,但因为它会定期更改并且不遵循可重现的逻辑(例如 softwarename-tzyjkd
),所以这种方法失败了。
理想情况下,我可以访问 openshift 提供的一种 "instance counter"。
考虑为每个实例创建单独的部署配置,并设置传入的环境变量以不同地表示每个实例的路径。让应用程序使用环境变量来知道要使用哪个路径。
如果需要在两个实例之间负载平衡流量,则设置路由以按要求的比例将流量定向到两个实例。
例如:
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。这意味着现有实例将在启动新实例之前关闭。因为虽然你有两个,但在重新启动一个之前,你总是可以调整流量路由到另一个的比率。这样你就不会在实例完成时请求失败。您可以在一个重启后重新平衡流量,或者将所有流量切换到它并重启另一个。