Hot*_*r13 4 kubernetes kubernetes-deployment
我有一个由3个主机组成的kubernetes集群,其中每个主机都有一个唯一的ID标签.在此群集上有一个具有3个实例(副本)的软件.
每个副本都需要与所有其他副本进行通信.此外,还有一个包含所有pod的服务,以便此应用程序永久可用.
所以我有:
Instance1 (with labels run: theTool,instanceid: 1)
Instance2 (with labels run: theTool,instanceid: 2)
Instance3 (with labels run: theTool,instanceid: 3)
Run Code Online (Sandbox Code Playgroud)
和
Service1 (selecting pods with label instanceid=1)
Service2 (selecting pods with label instanceid=2)
Service3 (selecting pods with label instanceid=3)
Service (selecting pods with label run=theTool)
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但我无法扩展或使用滚动更新功能.
我想定义一个包含3个副本的部署,其中每个副本都获得一个唯一的通用标签(例如副本ID,如1/3,2/3等).
在服务中,我可以使用选择器来获取即使在更新后也会存在的标签.
另一种解决方案可能是选择pod/deployment,具体取决于运行它的主机.我可以使用DaemonSet或只是一个具有亲缘关系的pod /部署来确保每个主机都具有我部署的完全一个副本.
但我不知道如何根据运行它的主机标签选择一个pod.
使用主机名不是一个选项,因为主机名将在不同的环境中更改.
我已经搜索了文档,但对这个用例没什么好处的.希望这里有人知道如何解决这个问题.
您正在寻找的功能称为StatefulSets,它刚刚推出Kubernetes 1.5测试版(注意它以前以alpha的形式提供,名称不同,PetSets).
在StatefulSet中,每个副本都有一个唯一的名称,该名称在重新启动后保持不变.在您的示例中,这些将是instance-1,instance-2,instance-3.由于实例名称是持久的(即使在另一个节点上重新创建了pod),因此您不需要每个实例的服务.
文档有更多细节:
| 归档时间: |
|
| 查看次数: |
7203 次 |
| 最近记录: |