如果我们所需要的只是一组相同吊舱中每个吊舱的一致标识符,那么Kubernetes StatefSet是正确答案吗?
我们正在研究一个Kubernetes场景,该场景要求我们为给定的部署维护N个吊舱(让我们简单地假设N是静态的,N=3)。目前,我们正在为此使用部署和复制集 在每个pod中,是否有任何方式(通过环境变量注入或类似方式)让我们获得唯一标识符,以显示pod是哪个pod(即“1”、“2”、“3”或类似的pod…确切的格式并不重要) 特别重要的是(由于这些吊舱连接的系统),如果吊舱“2”死亡,替换吊舱也会将其标识符报告为“2”,而不是新的,例如“4”。。。换句话说,除非标识符集的大小增加/减少,否则标识符集不会随时间而改变。目前我们正在使用pod名称,但这种方式并不稳定;pod名称每次都是新的和唯一的如果我们所需要的只是一组相同吊舱中每个吊舱的一致标识符,那么Kubernetes StatefSet是正确答案吗?,kubernetes,deployment,horizontal-scaling,Kubernetes,Deployment,Horizontal Scaling,我们正在研究一个Kubernetes场景,该场景要求我们为给定的部署维护N个吊舱(让我们简单地假设N是静态的,N=3)。目前,我们正在为此使用部署和复制集 在每个pod中,是否有任何方式(通过环境变量注入或类似方式)让我们获得唯一标识符,以显示pod是哪个pod(即“1”、“2”、“3”或类似的pod…确切的格式并不重要) 特别重要的是(由于这些吊舱连接的系统),如果吊舱“2”死亡,替换吊舱也会将其标识符报告为“2”,而不是新的,例如“4”。。。换句话说,除非标识符集的大小增加/减少,否则标识符
这就是a的用途吗?文档似乎特别关注存储卷,但这不是我们的优先事项。我们如何在代码中实际获得容器内唯一且稳定的ID?是的,
Statefulset
是一种方法,如果POD需要以某种方式定义其标识
以下是来自以下网站相关章节的引用:
与部署类似,StatefulSet管理基于
相同的容器规范。与部署不同,StatefulSet维护
每个豆荚的粘性标识。这些豆荚是从
相同的规范,但不能互换:每个规范都有一个持久的
它在任何重新安排期间维护的标识符
因此,如果您有一个名为myapp
的Statefulset
对象,该对象有3个副本,则POD将被命名为myapp-0
、myapp-1
和myapp-2
此外,如果任何pod死亡,比如说myapp-1
,那么作为该pod的替代品创建的新pod将再次成为myapp-1
您可以通过环境变量向容器公开pod名称,并在脚本中使用它:
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
我没有提到的一个相关注意事项是,使用
Statefulsets
时,POD会一个接一个地打开,而不像部署
。因此,对于上面的示例,myapp
,myapp-1
只有在myapp-0
准备就绪后才能启动。非常好,谢谢!