如果我们所需要的只是一组相同吊舱中每个吊舱的一致标识符,那么Kubernetes StatefSet是正确答案吗?

如果我们所需要的只是一组相同吊舱中每个吊舱的一致标识符,那么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”。。。换句话说,除非标识符集的大小增加/减少,否则标识符

我们正在研究一个Kubernetes场景,该场景要求我们为给定的部署维护N个吊舱(让我们简单地假设N是静态的,N=3)。目前,我们正在为此使用部署和复制集

在每个pod中,是否有任何方式(通过环境变量注入或类似方式)让我们获得唯一标识符,以显示pod是哪个pod(即“1”、“2”、“3”或类似的pod…确切的格式并不重要)

特别重要的是(由于这些吊舱连接的系统),如果吊舱“2”死亡,替换吊舱也会将其标识符报告为“2”,而不是新的,例如“4”。。。换句话说,除非标识符集的大小增加/减少,否则标识符集不会随时间而改变。目前我们正在使用pod名称,但这种方式并不稳定;pod名称每次都是新的和唯一的


这就是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
准备就绪后才能启动。

非常好,谢谢!