将单独的环境变量传递给 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

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

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