配置 Pod 使用投射卷作存储

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

说明: serviceAccountToken 不是一种卷类型

准备开始

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

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

为 Pod 配置投射卷

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

下面是 Pod 的配置文件:

pods/storage/projected.yaml 配置 Pod 使用投射卷作存储 - 图1

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test-projected-volume
  5. spec:
  6. containers:
  7. - name: test-projected-volume
  8. image: busybox:1.28
  9. args:
  10. - sleep
  11. - "86400"
  12. volumeMounts:
  13. - name: all-in-one
  14. mountPath: "/projected-volume"
  15. readOnly: true
  16. volumes:
  17. - name: all-in-one
  18. projected:
  19. sources:
  20. - secret:
  21. name: user
  22. - secret:
  23. name: pass
  1. 创建 Secret:

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

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

    1. kubectl get --watch pod test-projected-volume

    输出结果和下面类似:

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

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

    1. ls /projected-volume/

清理

删除 Pod 和 Secret:

  1. kubectl delete pod test-projected-volume
  2. kubectl delete secret user pass

接下来