我有一个应用需要将三个配置文件放在同一个目录中。然而这三个配置文件来自两个 secret 和一个 config map。

到目前为止,所有的尝试要么导致 K8s 出现错误,因为不同的卷具有相同mountPath(不同的subPath)文件,要么导致文件路径中的目录我想要一个文件。

理想的结果是容器具有以下特征:

/app/config/database.json        <-- File from secret 1
/app/config/message_broker.json  <-- File from secret 2
/app/config/app_config.json      <-- File from config map

这是可能的吗,或者这只是 K8s 的限制?


最佳答案
1

根据有关的官方 kubernetes 文档:

投影卷将多个现有卷源映射到同一目录中。

您可以使用单个卷并在该卷内策略性地使用子路径

目前可以投影以下类型的体积源:

  • 秘密

  • 向下API

  • 配置图

  • 服务账户令牌

  • clusterTrustBundle

所有源都必须与 Pod 位于同一命名空间中。有关更多详细信息,请参阅设计文档。

包含 secret、downwardAPI 和 configMap 的示例配置:

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox:1.28
    command: ["sleep", "3600"]
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: mysecret
          items:
            - key: username
              path: my-group/my-username
      - downwardAPI:
          items:
            - path: "labels"
              fieldRef:
                fieldPath: metadata.labels
            - path: "cpu_limit"
              resourceFieldRef:
                containerName: container-test
                resource: limits.cpu
      - configMap:
          name: myconfigmap
          items:
            - key: config
              path: my-group/my-config

另请参阅如何以获取更多信息。