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

时间:2018-01-22 15:06:32

标签: kubernetes statefulset

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

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

2 个答案:

答案 0 :(得分:1)

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

你可以做什么,但它仍然是一个黑客,是在每个pod中安装所有版本的配置文件并运行一个入口点脚本,该脚本使用基于pod名称的不同配置文件。我没有示例,但它应该很容易

答案 1 :(得分:0)

基于 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 的同一命名空间中。

在项目文档中有更高级的注解用法。