深入解析Pod對(duì)象(二)

一種特殊的Volume: Projected Volume ,你可以把它翻譯為“投射數(shù)據(jù)卷”。

Ps:Projected Volume 是 Kubernetes v1.11 之后的新特性

在 Kubernetes 中,有幾種特殊的 Volume,它們存在的意義不是為了存放容器里的數(shù)據(jù),也不是用來(lái)進(jìn)行容器和宿主機(jī)之間的數(shù)據(jù)交換。這些特殊 Volume 的作用,是為容器提供預(yù)先定義好的數(shù)據(jù)。所以,從容器的角度來(lái)看,這些 Volume 里的信息就是仿佛是被 Kubernetes“投射”(Project)進(jìn)入容器當(dāng)中的。這正是 Projected Volume 的含義。

到目前為止,Kubernetes 支持的 Projected Volume 一共有四種:

  • Secret
  • ConfigMap
  • Downward API
  • ServiceAccountToken

Secret 最典型的使用場(chǎng)景,莫過(guò)于存放數(shù)據(jù)庫(kù)的 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掛載到容器內(nèi)部的/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轉(zhuǎn)碼:

[root@k8s-master pods]# echo -n "admin" | base64
YWRtaW4=

[root@k8s-master pods]# echo -n "123456" | base64
MTIzNDU2

具體步驟:

kubectl create -f secret.yaml   #創(chuàng)建scerets
kubectl create -f secret-host.yaml  #創(chuàng)建容器
kubectl exec -it nginx -c nginx-secret sh #進(jìn)入容器
/ # 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 
之后進(jìn)入容器內(nèi)即可查看user的值已經(jīng)改變

方法二
kubectl edit secrets rousecret
同樣的,將上面轉(zhuǎn)碼得到的值應(yīng)用到打開(kāi)的文件中
再進(jìn)入容器查看時(shí),user以發(fā)生改變

當(dāng)然,也可以把user與pass分開(kāi)創(chuàng)建


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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容