此页面展示了如何使用 projected(投射)卷将多个现有的卷源挂载到同一个目录中。目前,可以将 secret、configMap、downwardAPI 和 serviceAccountToken 卷进行投射。
serviceAccountToken 并不是一种卷类型。你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
要检查版本,请输入 kubectl version。
在本练习中,你将从本地文件创建用户名和密码 保密字典(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
创建保密字典
# 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
创建 Pod
kubectl apply -f https://k8s.io/examples/pods/storage/projected.yaml
验证 Pod 的容器是否正在运行,然后监视 Pod 的更改
kubectl get --watch pod test-projected-volume
输出如下所示
NAME READY STATUS RESTARTS AGE
test-projected-volume 1/1 Running 0 14s
在另一个终端中,获取运行中容器的 Shell
kubectl exec -it test-projected-volume -- /bin/sh
在 Shell 中,验证 projected-volume 目录是否包含你投射的资源
ls /projected-volume/
删除 Pod 和保密字典
kubectl delete pod test-projected-volume
kubectl delete secret user pass
projected 卷的信息。