【问题标题】:How to add a Configmap to a specific Pod In a StatefulSet?如何将 Configmap 添加到 StatefulSet 中的特定 Pod?
【发布时间】:2021-04-17 06:30:06
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes statefulset


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。只是想知道这是否可能。我已经有一个解决方法。我正在使用 initContainer 将 ConfigMap 中的数据汇集到为每个 pod 创建的 PersistentVolume 中。容器检查当前主机名并检查包含当前主机名的路径的特定目录。如果是这样,它将文件复制到 PersistentVolume。它很丑陋,我稍后会远离它。现在它可以工作了。
    • 我发现了这个问题,这正是我正在寻找的......是否可以为 statefullset 中的每个 pod 设置一个特定的 configMap?还是使用提及解决方法的唯一选择?谢谢
    • 答案仍然适用
    【解决方案2】:

    https://github.com/spoditor/spoditor 提供了一个基于 Mutating Webhook 的更优雅的解决方案来解决这个确切的问题。

    本质上,它使用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 的同一命名空间中。

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

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2023-03-23
      相关资源
      最近更新 更多