【问题标题】:How to mount same volume on to all pods in a kubernetes namespace如何将相同的卷挂载到 kubernetes 命名空间中的所有 pod
【发布时间】:2020-02-13 10:27:34
【问题描述】:

我们在 kubernetes 中有一个命名空间,我希望将一些秘密(如 jks、properties、ts 等文件)提供给所有 pod 中的所有容器(我们每个容器有一个 JVM,每个容器有一个容器) pod 类型的部署)。

我已经使用 kustomization 创建了秘密,并计划将其用作每个部署规范的卷,然后将其卷安装到此部署的容器中。我希望将此卷安装在我们命名空间中部署的每个容器上。

我想知道 kustomize(或其他任何东西)是否可以帮助我在此命名空间中的所有部署上安装此卷?

我尝试了以下patchesStrategicMerge

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: myNamespace
spec:
  template:
    spec:
      imagePullSecrets:
        - name: pull-secret
      containers:
        - volumeMounts:
          - name: secret-files
            mountPath: "/secrets"
            readOnly: true
      volumes:
      - name: secret-files
        secret:
          secretName: mySecrets
          items:
          - key: key1
            path: ...somePath
          - key: key2
            path: ...somePath

它需要 metadata 部分中的名称,这对我没有帮助,因为我所有的部署都有不同的名称。

【问题讨论】:

    标签: kubernetes kubectl kustomize


    【解决方案1】:

    Inject Information into Pods Using a PodPreset

    您可以使用 PodPreset 对象在创建时将秘密、卷挂载和环境变量等信息注入 pod。

    更新:2021 年 2 月。PodPreset 功能仅进入 Alpha 版。它在 Kubernetes 的 v1.20 中被删除。请参阅发行说明https://kubernetes.io/docs/setup/release/notes/

    v1alpha1 PodPreset API 和准入插件已被删除 没有内置替换。 Admission webhook 可用于修改 pod 在创作上。 (#94090, @deads2k) [SIG API 机械、应用程序、CLI、云 提供者、可扩展性和测试]

    【讨论】:

      【解决方案2】:

      PodPresent (https://kubernetes.io/docs/tasks/inject-data-application/podpreset/) 是执行此操作的一种方法,但为此,您命名空间中的所有 pod 都应与您在 PodPresent 规范中指定的标签匹配。

      另一种方法(最流行)是使用动态准入控制 (https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) 并在您的集群中编写一个 Mutating webhook,它将编辑您的 pod 规范并添加您要挂载的所有秘密。使用它,您还可以在 pod 规格中进行其他更改,例如安装卷、添加标签等等。

      【讨论】:

        【解决方案3】:

        独立的 kustomize 支持许多资源的补丁。这是一个例子Patching multiple resources at once。 kubectl 内置的 kustomize 不支持此功能。

        【讨论】:

          【解决方案4】:

          要将 secret 挂载为卷,您需要为您的 pod/部署清单文件更新 yaml 结构并重新构建它们。

          apiVersion: v1
          kind: Pod
          metadata:
            name: my-pod
          spec:
            containers:
              - name: my-container
                image: nginx
                volumeMounts:
                  - name: my-secret-volume
                    mountPath: /etc/secretpath
            volumes:
              - name: my-secret-volume
                secret:
                  secretName: my-secret
          

          kustomize(或其他任何东西)不会为您安装它。

          【讨论】:

          • 我想跨命名空间来做。就像在不(或很少)修改 pod 定义的情况下在所有 pod 中注入卷。
          • @mukund 那么您应该尝试探索 PodPreset 在您的用例中的用法。
          猜你喜欢
          • 1970-01-01
          • 2021-11-22
          • 2021-10-30
          • 2016-02-04
          • 2021-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多