一种特殊的Volume: Projected Volume ,你可以把它翻译为“投射数据卷”。
Ps:Projected Volume 是 Kubernetes v1.11 之后的新特性
在 Kubernetes 中,有几种特殊的 Volume,它们存在的意义不是为了存放容器里的数据,也不是用来进行容器和宿主机之间的数据交换。这些特殊 Volume 的作用,是为容器提供预先定义好的数据。所以,从容器的角度来看,这些 Volume 里的信息就是仿佛是被 Kubernetes“投射”(Project)进入容器当中的。这正是 Projected Volume 的含义。
到目前为止,Kubernetes 支持的 Projected Volume 一共有四种:
- Secret
- ConfigMap
- Downward API
- ServiceAccountToken
Secret
最典型的使用场景,莫过于存放数据库的 Credential 信息。
# secret-host.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-test
spec:
containers:
- name: nginx-secret
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: rousecret
mountPath: "/projected-volume" #将Volume挂载到容器内部的/projected-volume目录下
readOnly: true
volumes:
- name: rousecret
secret:
secretName: rousecret
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: rousecret
type: Opaque
data:
user: YWRtaW4=
pass: MTIzNDU2
这里的user以及pass均使用base6转码:
[root@k8s-master pods]# echo -n "admin" | base64
YWRtaW4=
[root@k8s-master pods]# echo -n "123456" | base64
MTIzNDU2
具体步骤:
kubectl create -f secret.yaml #创建scerets
kubectl create -f secret-host.yaml #创建容器
kubectl exec -it nginx -c nginx-secret sh #进入容器
/ # cat /projected-volume/..data/user
admin
/ # cat /projected-volume/..data/pass
123456
[root@k8s-master pods]# kubectl get secrets
NAME TYPE DATA AGE
rousecret Opaque 2 51m
修改user以及pass值
#方法一
[root@k8s-master pods]# echo "root" | base64
cm9vdAo=
修改secret.yaml中的值
将secret.yaml中user的值替换为上面的值
kubectl apply -f secret.yaml
之后进入容器内即可查看user的值已经改变
方法二
kubectl edit secrets rousecret
同样的,将上面转码得到的值应用到打开的文件中
再进入容器查看时,user以发生改变
当然,也可以把user与pass分开创建
apiVersion: v1
kind: Pod
metadata:
name: test-projected-volume
spec:
containers:
- name: test-secret-volume
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: mysql-cred
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: mysql-cred
projected:
sources:
- secret:
name: user
- secret:
name: pass
cat ./username.txt
admin
cat ./password.txt
c1oudc0w!
kubectl create secret generic user --from-file=./username.txt
kubectl create secret generic pass --from-file=./password.txt
[root@k8s-master pods]# kubectl get secrets
NAME TYPE DATA AGE
user Opaque 1 51m
pass Opaque 1 51m
网友评论