如何将 Configmap 添加到 StatefulSet 中的特定 Pod?

How to add a Configmap to a specific Pod In a StatefulSet?

我想知道如何将 ConfigMap 添加到由 StatefulSet 生成的特定 pod。

我查看了规范,但无法弄清楚如何确保 pod 仅挂载具有特定标签的 ConfigMap。 我已经准备好了一个容器形式的解决方法。但是我仍然想知道这是否可以开箱即用。

您不能威胁与特殊 pod 相同的 StatefulSet 中的 pod。仅仅是因为您只能指定一个对整个集合有效的 PodSpec

你可以做的,但它仍然是一个 hack,是在每个 pod 中安装所有版本的配置文件和 运行 一个入口点脚本,它根据 pod 名称使用不同的配置文件。我没有例子可以展示,但应该很容易

可以使用基于 Mutating Webhook 的更优雅的解决方案 https://github.com/spoditor/spoditor 来解决这个问题。

本质上,它在 PodSpec 模板上使用自定义注释,例如:

      annotations:
        spoditor.io/mount-volume: |
          {
            "volumes": [
              {
                "name": "my-volume",
                "secret": {
                  "secretName": "my-secret"
                }
              }
            ],
            "containers": [
              {
                "name": "nginx",
                "volumeMounts": [
                  {
                    "name": "my-volume",
                    "mountPath": "/etc/secrets/my-volume"
                  }
                ]
              }
            ]
          }

现在,StatefulSet 的每个 Pod 中的 nginx 容器将尝试以 my-secret-{pod ordinal}.

的模式挂载其自己的专用密钥

您只需确保 my-secret-0my-secret-1 等存在于 StatefulSet 的同一命名空间中。

项目文档中有更多关于注解的高级用法。