【每日一个云原生小技巧 #62】Kubernetes 投射卷 Projected Volumes

2024-01-14 20:55:25 浏览数 (1)

在 Kubernetes中,Projected Volumes(投影卷)是一种功能强大的存储特性,允许您将多个已有的卷源映射到Pod内的同一目录中。这一特性尤其适用于需要将不同类型的数据(如Secrets、ConfigMaps和downwardAPI)组合到一个容器可以访问的位置的场景。

使用场景

Projected Volumes非常适用于以下场景:

  • 将来自多个来源的配置数据组合在一起,如Secrets和ConfigMaps。
  • 通过downwardAPI向容器暴露Pod和集群信息。
  • 为访问Kubernetes API提供服务账户令牌。

使用技巧

  • 命名空间一致性:所有Projected Volume的源必须与Pod在同一命名空间。
  • 卷源类型:可以投影Secrets、ConfigMaps、downwardAPI和serviceAccountToken卷。
  • 路径自定义:在卷中自定义每个投影源数据出现的路径。
  • 安全性:为敏感数据(如Secrets)设置非默认的权限模式,以增强安全性。

使用案例

以下是一些使用Projected Volumes的示例:

组合Secret、downwardAPI和ConfigMap:在这个示例中,Pod使用Projected Volume将一个secret、downwardAPI数据和一个configMap组合到一个单一的卷中。每个数据源在卷配置的sources下指定。每个源的数据可以放置在卷内的自定义路径中。

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox
    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
      - configMap:
          name: myconfigmap
          items:
            - key: config
              path: my-group/my-config

服务账户令牌投影:这个示例展示了一个Pod,它有一个包含服务账户令牌的Projected Volume。该令牌用于认证Kubernetes API。

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: sa-token-test
spec:
  containers:
  - name: container-test
    image: busybox
    command: ["sleep", "3600"]
    volumeMounts:
    - name: token-vol
      mountPath: "/service-account"
      readOnly: true
  serviceAccountName: default
  volumes:
  - name: token-vol
    projected:
      sources:
      - serviceAccountToken:
          audience: api
          expirationSeconds: 3600
          path: token

这些示例说明了Kubernetes中Projected Volumes的灵活性,允许您在Pod内有效地组合和管理多个数据源。

0 人点赞