如何将相同的卷安装到kubernetes命名空间中的所有Pod上

时间:2020-02-13 10:27:34

标签: kubernetes kubectl kustomize

我们在kubernetes中有一个命名空间,在这里我希望一些秘密(如jks,properties,ts等文件)可用于所有pod的所有容器(每个容器一个JVM,每个容器一个容器) pod类型的部署)。

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

我想知道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部分中需要名称,这对我没有帮助,因为我的所有部署都具有不同的名称。

4 个答案:

答案 0 :(得分:1)

Inject Information into Pods Using a PodPreset

您可以使用PodPreset对象在创建时将诸如密码,卷装入和环境变量之类的信息注入到pod中。

答案 1 :(得分:0)

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规范并添加您要挂载的所有机密。使用此功能,您还可以在广告连网规格中进行其他更改,例如安装体积,添加标签等。

答案 2 :(得分:0)

独立kustomize支持许多资源的修补程序。这是一个示例Patching multiple resources at once。 kubectl中内置的Kustomize不支持此功能。

答案 3 :(得分:-1)

要将机密安装为卷,您需要更新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(或其他任何方式)不会为您安装它。