将单独的 env 变量传递给 statefulset pod
回答问题 我正在部署两个作为无头服务运行的相同映像的 statefulset pod。我希望将单独的 env 变量传递给在 statefulset pod 内运行相同图像的容器。谁能告诉我如何实现这一目标? Answers 不可能将同一环境变量的不同值暴露给Statefulsets的不同容器,因为Statefulsets中的 pod 是同一应用程序的相同副本。 从文档: 与 Deployment
回答问题
我正在部署两个作为无头服务运行的相同映像的 statefulset pod。我希望将单独的 env 变量传递给在 statefulset pod 内运行相同图像的容器。谁能告诉我如何实现这一目标?
Answers
不可能将同一环境变量的不同值暴露给Statefulsets
的不同容器,因为Statefulsets
中的 pod 是同一应用程序的相同副本。
从文档:
与 Deployment 类似,StatefulSet 管理基于相同容器规范的 Pod。与 Deployment 不同,StatefulSet 为其每个 Pod 维护一个粘性标识。这些 pod 是根据相同的规范创建的,但不可互换:每个 pod 都有一个持久标识符,它在任何重新调度时都会维护该标识符。
但是,如上述文档中所述,由于 Statefulset 的每个 pod 都具有粘性标识,您可以使用它向 pod 传递相同的环境变量集,并根据 pod 的标识使用不同的环境变量采取适当的操作。
您可以通过环境变量通过向下 API将 pod 名称暴露给容器,并在脚本中使用它来采取适当的措施:
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: env0
value: value0
- name: env1
value: value1
因此,如果您有两个名为myapp
的Statefulset
副本,那么 pod 的名称将分别为myapp-0
和myapp-1
,然后您可以使用基于 pod 名称的环境变量(如果 pod 名称为myapp-0
,则为env0
;如果 pod 为env1
,则为env1
名称是myapp-1
)。
注意:尽管该解决方案有效,但它不应该是首选,我们应该使用单独的 statefulsets 对象来根据用例公开不同的环境变量。
更多推荐
所有评论(0)