【问题标题】:Passing seperate env variables to statefulset pods将单独的环境变量传递给 statefulset pod
【发布时间】:2021-03-17 05:12:02
【问题描述】:

我正在部署两个作为无头服务运行的相同映像的 statefulset pod。我希望将单独的 env 变量传递给在 statefulset pod 中运行相同图像的容器。谁能告诉我如何实现这一目标?

【问题讨论】:

  • @KrishnaChaurasia 是的,我在有状态集 pod 的两个副本中运行相同的容器。但我希望他们都使用不同的环境变量集。

标签: kubernetes kubernetes-statefulset


【解决方案1】:

不可能将同一环境变量的不同值暴露给 Statefulsets 的不同容器,因为 Statefulsets 中的 pod 是同一应用程序的相同副本。

来自docs

与 Deployment 类似,StatefulSet 管理基于 相同的容器规格。与 Deployment 不同,StatefulSet 维护 每个 Pod 的粘性标识。这些 pod 是从 相同的规范,但不可互换:每个都有一个持久的 它在任何重新调度过程中维护的标识符。

但是,如上述文档中所述,由于 Statefulset 的每个 pod 都具有粘性标识,您可以使用它向 pod 传递相同的环境变量集,并根据不同的环境变量执行适当的操作豆荚。

您可以通过 Downward API 将 pod 名称通过环境变量暴露给容器,并在脚本中使用它来采取适当的措施:

env:
  - name: MY_POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
  - name: env0
    value: value0
  - name: env1
    value: value1

因此,如果您有两个名为 myappStatefulset 的副本,那么 Pod 的名称将分别为 myapp-0myapp-1,然后您可以根据 Pod 的名称使用环境变量(env0 如果 pod 名称是 myapp-0env1 如果 pod 名称是 myapp-1)。

注意:尽管该解决方案有效,但它不应该是首选,我们应该使用单独的 statefulsets 对象来根据用例公开不同的环境变量。

【讨论】:

  • 能否请您参考解释了为什么它不是这样做的首选方式的来源?我一般不明白为什么我们要让一个 pod 具有“粘性标识”,而我们甚至不能基于该标识对每个 pod 进行一些自定义。
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 2021-09-05
  • 2020-03-27
  • 2017-03-30
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多