Information in this document may be out of date

This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Configure a Pod to Use a Projected Volume for Storage

配置 Pod 使用投射卷作存储

本文介绍怎样通过 projected 卷将现有的多个卷资源挂载到相同的目录。 当前,secretconfigMapdownwardAPIserviceAccountToken 卷可以被投射。

准备开始

你必须拥有一个 Kubernetes 的集群,同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:

要获知版本信息,请输入 kubectl version.

为 Pod 配置投射卷

本练习中,你将使用本地文件来创建用户名和密码 Secret, 然后创建运行一个容器的 Pod, 该 Pod 使用projected 卷将 Secret 挂载到相同的路径下。

下面是 Pod 的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: test-projected-volume
spec:
  containers:
  - name: test-projected-volume
    image: busybox:1.28
    args:
    - sleep
    - "86400"
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: user
      - secret:
          name: pass
  1. 创建 Secret:

    # 创建包含用户名和密码的文件:
    echo -n "admin" > ./username.txt
    echo -n "1f2d1e2e67df" > ./password.txt
    
    # 在 Secret 中引用上述文件
    kubectl create secret generic user --from-file=./username.txt
    kubectl create secret generic pass --from-file=./password.txt
    
  2. 创建 Pod:

    kubectl apply -f https://k8s.io/examples/pods/storage/projected.yaml
    
  3. 确认 Pod 中的容器运行正常,然后监视 Pod 的变化:

    kubectl get --watch pod test-projected-volume
    

    输出结果和下面类似:

    NAME                    READY     STATUS    RESTARTS   AGE
    test-projected-volume   1/1       Running   0          14s
    
  4. 在另外一个终端中,打开容器的 shell:

    kubectl exec -it test-projected-volume -- /bin/sh
    
  5. 在 shell 中,确认 projected-volume 目录包含你的投射源:

    ls /projected-volume/
    

清理

删除 Pod 和 Secret:

kubectl delete pod test-projected-volume
kubectl delete secret user pass

接下来