将单独的环境变量传递给 statefulset pods
Passing seperate env variables to statefulset pods
我正在部署两个具有相同图像 运行 的状态集 pods 作为无头服务。我希望将单独的环境变量传递给容器 运行 statefulset pods 中的相同图像。谁能告诉我如何做到这一点?
无法将同一环境变量的不同值暴露给 Statefulsets
的不同容器,因为 Statefulsets
中的 pods 是同一应用程序的相同副本。
来自docs:
Like a Deployment, a StatefulSet manages Pods that are based on an
identical container spec. Unlike a Deployment, a StatefulSet maintains
a sticky identity for each of their Pods. These pods are created from
the same spec, but are not interchangeable: each has a persistent
identifier that it maintains across any rescheduling.
但是,如上述文档所述,由于 Statefulset 的每个 pod 都有粘性标识,您可以使用它来将同一组环境变量传递给 pods 并使用不同的环境变量采取适当的操作基于 pods.
的身份
您可以通过 Downward API 通过环境变量将 pod 名称公开给容器,并在脚本中使用它来采取适当的操作:
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: env0
value: value0
- name: env1
value: value1
因此,如果您有两个名为 myapp
的 Statefulset
副本,那么 pods 的名称将分别为 myapp-0
和 myapp-1
,并且然后,您可以根据 pod 的名称使用环境变量(如果 pod 名称为 myapp-0
,则为 env0
;如果 pod 名称为 myapp-1
,则为 env1
)。
注意:虽然该解决方案有效,但它不应该是首选,我们应该使用单独的 statefulsets 对象来根据用例公开不同的环境变量。
我正在部署两个具有相同图像 运行 的状态集 pods 作为无头服务。我希望将单独的环境变量传递给容器 运行 statefulset pods 中的相同图像。谁能告诉我如何做到这一点?
无法将同一环境变量的不同值暴露给 Statefulsets
的不同容器,因为 Statefulsets
中的 pods 是同一应用程序的相同副本。
来自docs:
Like a Deployment, a StatefulSet manages Pods that are based on an identical container spec. Unlike a Deployment, a StatefulSet maintains a sticky identity for each of their Pods. These pods are created from the same spec, but are not interchangeable: each has a persistent identifier that it maintains across any rescheduling.
但是,如上述文档所述,由于 Statefulset 的每个 pod 都有粘性标识,您可以使用它来将同一组环境变量传递给 pods 并使用不同的环境变量采取适当的操作基于 pods.
的身份您可以通过 Downward API 通过环境变量将 pod 名称公开给容器,并在脚本中使用它来采取适当的操作:
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: env0
value: value0
- name: env1
value: value1
因此,如果您有两个名为 myapp
的 Statefulset
副本,那么 pods 的名称将分别为 myapp-0
和 myapp-1
,并且然后,您可以根据 pod 的名称使用环境变量(如果 pod 名称为 myapp-0
,则为 env0
;如果 pod 名称为 myapp-1
,则为 env1
)。
注意:虽然该解决方案有效,但它不应该是首选,我们应该使用单独的 statefulsets 对象来根据用例公开不同的环境变量。