配置 Pod 使用投影卷进行存储

此页面展示了如何使用 projected(投射)卷将多个现有的卷源挂载到同一个目录中。目前,可以将 secretconfigMapdownwardAPIserviceAccountToken 卷进行投射。

说明

serviceAccountToken 并不是一种卷类型。

开始之前

你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。

要检查版本,请输入 kubectl version

为 Pod 配置投射卷

在本练习中,你将从本地文件创建用户名和密码 保密字典(Secrets)。然后,你将创建一个运行单个容器的 Pod,并使用 projected 卷将这些保密字典挂载到同一个共享目录中。

这是 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. 创建保密字典

    # Create files containing the username and password:
    echo -n "admin" > ./username.txt
    echo -n "1f2d1e2e67df" > ./password.txt
    
    # Package these files into secrets:
    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 和保密字典

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

接下来


最后修改时间 2023 年 8 月 24 日下午 6:38 PST:使用 code_sample shortcode 代替 code shortcode (e8b136c3b3)