med*_*gai 3 kubernetes kubernetes-statefulset
我正在部署两个具有相同映像的有状态 Pod,作为无头服务运行。我希望将单独的环境变量传递给在 statefulset pod 内运行相同图像的容器。谁能告诉我如何实现这一目标?
Kri*_*sia 12
不可能将同一环境变量的不同值暴露给 a 的不同容器,Statefulsets因为 a 中的 podStatefulsets是同一应用程序的相同副本。
来自文档:
与 Deployment 类似,StatefulSet 管理基于相同容器规范的 Pod。与 Deployment 不同,StatefulSet 为其每个 Pod 维护一个粘性身份。这些 Pod 是根据相同的规范创建的,但不可互换:每个 Pod 都有一个在任何重新调度过程中都会维护的持久标识符。
但是,如上面文档中所述,由于 Statefulset 的每个 pod 都具有粘性身份,您可以使用该身份将同一组环境变量传递给 pod,并根据 pod 的身份使用不同的环境变量采取适当的操作。
您可以通过Downward API通过环境变量向容器公开 pod 名称,并在脚本中使用它来采取适当的操作:
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: env0
value: value0
- name: env1
value: value1
Run Code Online (Sandbox Code Playgroud)
Statefulset因此,如果您有两个具有 name的副本myapp,那么 pod 的名称将是myapp-0和myapp-1,然后您可以根据 pod 的名称使用环境变量(env0如果 pod name 是myapp-0,env1如果 pod name 是myapp-1)。
注意:虽然该解决方案有效,但它不应该是首选,我们应该有单独的 statefulsets 对象来根据用例公开不同的环境变量。
| 归档时间: |
|
| 查看次数: |
5258 次 |
| 最近记录: |