回答问题

我正在部署两个作为无头服务运行的相同映像的 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

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

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐