1、ConfigMap
ConfigMap用於保存配置數據的鍵值對,能夠用來保存單個屬性,也能夠用來保存配置文件。和secret資源相似,不一樣之處在於,secret資源保存的是敏感信息,而configmap保存的是以明文方式存放的數據。
Secret和ConfigMap
相同點:都是用來保存一些信息數據的,能夠被其餘資源對象進行掛載使用。而且兩個資源對象的建立方法及引用方法同樣,都是以鍵值對的方法進行存儲的。
不一樣點:Secret保存信息數據是以密文的形式保存的,保存一些敏感信息,如數據庫的用戶名及密碼、認證密鑰等。ConfigMap是用來保存一些不是過重要的數據的,是以明文形式保存的,當我查看詳細信息時,是能夠看的保存的數據的。
還有就是Secret與ConfigMap雖然掛載的方式同樣,可是編寫yaml文件時也存在着區別。注意編寫的縮進,與yaml大小寫的使用。數據庫2、Volumes掛載和環境變量方式引用資源。
相同點:都是引用資源,能對其數據進行使用。
不一樣點:Volumes掛載會隨着資源對象內保存的數據的更新,而實時更新,不過會等待一段時間後更新。環境變量的方式引用不會實時更新數據,若是想要更新數據只能從新生成Pod。vim
ConfigMap資源的建立基本與secret資源相似。
3、使用四種不一樣的方式建立ConfigMap資源:api
**1)經過 --from-literal(文字的):** 1.[root@master ~]# mkdir configmap 2.[root@master ~]# cd configmap/ 3.[root@master configmap]# kubectl create configmap lbhconfigmap1 --from-literal=name=lbh --from-literal=age=18 4.configmap/lbhconfigmap1 created 5.[root@master configmap]# kubectl get configmaps 6.NAME DATA AGE 7.lbhconfigmap1 2 12s 查看詳細信息: 1.[root@master configmap]# kubectl describe configmaps lbhconfigmap1 2.Name: lbhconfigmap1 3.Namespace: default 4.Labels: <none> 5.Annotations: <none> 6. 7.Data 8.==== 9.age: 10.---- 11.18 12.name: 13.---- 14.lbh #能夠發現保存的數據是明文的。因此它用來保存一些不重要的數據。 15.Events: <none>
2)經過 --from-file(文件):一個文件只能保存一個數據。br/>1.[root@master configmap]# echo lbh > name
2.[root@master configmap]# echo 18 > age br/>3.[root@master configmap]# kubectl create configmap lbhconfigmap2 --from-file=name --from-file=age
4.configmap/lbhconfigmap2 created br/>5.[root@master configmap]# kubectl get configmaps
6.NAME DATA AGE
7.lbhconfigmap1 2 3m39s
8.lbhconfigmap2 2 10s app查看詳細信息:br/>1.[root@master configmap]# kubectl describe configmaps lbhconfigmap2
2.Name: lbhconfigmap2
3.Namespace: default
4.Labels: <none>
5.Annotations: <none>
6.
7.Data
8.====
9.age:
10.----
11.18
12.
13.name:
14.----
15.lbh
16.
17.Events: <none> ide
**3)經過 --from-env-file:** 1.[root@master configmap]# cat > config-env.txt << EOF 2.> name=lbh 3.> age=18 4.> EOF 5.[root@master configmap]# kubectl create configmap lbhconfigmap3 --from-env-file=config-env.txt 6.configmap/lbhconfigmap3 created 7.[root@master configmap]# kubectl get configmaps 8.NAME DATA AGE 9.lbhconfigmap1 2 8m2s 10.lbhconfigmap2 2 4m33s 11.lbhconfigmap3 2 8s 查看詳細信息: 1.[root@master configmap]# kubectl describe configmaps lbhconfigmap3 2.Name: lbhconfigmap3 3.Namespace: default 4.Labels: <none> 5.Annotations: <none> 6. 7.Data 8.==== 9.age: 10.---- 11.18 12.name: 13.---- 14.lbh 15.Events: <none>
4)經過yaml配置文件的方式br/>1.[root@master configmap]# vim lbhconfigmap4.yaml
2.apiVersion: v1
3.kind: ConfigMap
4.metadata:
5. name: lbhconfigmap4
6.data:
7. name: lbh
8. age: '18' #這裏注意,數字須要單引號,引發來。
9.[root@master configmap]# kubectl apply -f lbhconfigmap4.yaml #執行yaml文件。br/>10.configmap/lbhconfigmap4 created
11.[root@master configmap]# kubectl get configmaps
12.NAME DATA AGE
13.lbhconfigmap1 2 11m
14.lbhconfigmap2 2 8m16s
15.lbhconfigmap3 2 3m51s
16.lbhconfigmap4 2 6s 測試查看詳細信息:br/>1.[root@master configmap]# kubectl describe configmaps lbhconfigmap4
2.Name: lbhconfigmap4
3.Namespace: default
4.Labels: <none>
5.Annotations: kubectl.kubernetes.io/last-applied-configuration:
6. {"apiVersion":"v1","data":{"age":"18","name":"lbh"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"lbhconfigmap4","namespace":"de...
7.
8.Data
9.====
10.age:
11.----
12.18
13.name:
14.----
15.lbh
16.Events: <none> ui
以voluems和環境變量的方式引用其中一個資源對象。 1)以volume掛載方式引用資源。 1.[root@master configmap]# vim pod1.yaml 2.apiVersion: v1 3.kind: Pod 4.metadata: 5. name: pod1 6.spec: 7. containers: 8. - name: lbhpod 9. image: busybox 10. args: 11. - /bin/sh 12. - -c 13. - sleep 300000 14. volumeMounts: 15. - name: cmp-lbh 16. mountPath: "/etc/cmp-lbh" #掛載到容器內的路徑。 17. readOnly: true #只讀權限 18. volumes: 19. - name: cmp-lbh 20. configMap: 21. name: lbhconfigmap2 22.[root@master configmap]# kubectl apply -f pod1.yaml 23.pod/pod1 created 24.[root@master configmap]# kubectl get pod 25.NAME READY STATUS RESTARTS AGE 26.pod1 1/1 Running 0 7s
2)以環境變量的方式引用資源: 1.[root@master configmap]# vim pod2.yaml 2.apiVersion: v1 3.kind: Pod 4.metadata: 5. name: pod2 6.spec: 7. containers: 8. - name: lbhpod 9. image: busybox 10. args: 11. - /bin/sh 12. - -c 13. - sleep 300000 14. env: 15. - name: CONFIGMAP_NAME 16. valueFrom: 17. configMapKeyRef: 18. name: lbhconfigmap4 19. key: name 20. - name: CONFIGMAP_AGE 21. valueFrom: 22. configMapKeyRef: 23. name: lbhconfigmap4 24. key: age 25.[root@master configmap]# kubectl apply -f pod2.yaml 26.pod/pod2 created 27.[root@master configmap]# kubectl get pod 28.NAME READY STATUS RESTARTS AGE 29.pod1 1/1 Running 0 2m20s 30.pod2 1/1 Running 0 10s
如今將configmap資源內保存的數據進行更新,Pod內的數據是否更新。spa
1)volumes掛載的方式測試: 查看Pod1的yaml文件,使用的是lbhconfigmap2,修改lbhconfigmap2的數據: 1.[root@master configmap]# kubectl get configmaps lbhconfigmap2 -o yaml #查看lbhconfigmap2以yaml文件輸出。 2.apiVersion: v1 3.data: 4. age: | 5. 18 6. name: | 7. lbh 8.kind: ConfigMap 9.metadata: 10. creationTimestamp: "2020-02-17T09:23:53Z" 11. name: lbhconfigmap2 12. namespace: default 13. resourceVersion: "158563" 14. selfLink: /api/v1/namespaces/default/configmaps/lbhconfigmap2 15. uid: 41fb7689-51c9-4f20-be70-c6caa6de436b 16.[root@master configmap]# kubectl edit configmaps lbhconfigmap2 17.#編輯lbhconfigmap2,並修改文件。 18.apiVersion: v1 19.data: 20. age: | 21. 18 22. name: | 23. lisi 24.kind: ConfigMap 25.metadata: 26.[root@master configmap]# kubectl get configmaps lbhconfigmap2 -o yaml 27.#再次查看,確認修改。 28.apiVersion: v1 29.data: 30. age: | 31. 18 32. name: | 33. lisi 34.kind: ConfigMap 35.metadata: 36. creationTimestamp: "2020-02-17T09:23:53Z" 37. name: lbhconfigmap2 38. namespace: default 39. resourceVersion: "160495" 40. selfLink: /api/v1/namespaces/default/configmaps/lbhconfigmap2 41. uid: 41fb7689-51c9-4f20-be70-c6caa6de436b 修改完成後,進入容器,查看數據是否實時更新: 1.[root@master configmap]# kubectl exec -it pod1 /bin/sh 2./ # cat /etc/cmp-lbh/name 3.lisi 數據成功更新。
2)以環境變量的方式測試: 查看pod的yaml文件,使用的是lbhconfigmap4,修改lbhconfigmap4的數據: 1.[root@master configmap]# kubectl get configmaps lbhconfigmap4 -o yaml 2.apiVersion: v1 3.data: 4. age: "18" 5. name: lbh 6.kind: ConfigMap 7.[root@master configmap]# kubectl edit configmaps lbhconfigmap4 8.apiVersion: v1 9.data: 10. age: "18" 11. name: lisi 12.kind: ConfigMap 13.[root@master configmap]# kubectl get configmaps lbhconfigmap4 -o yaml 14.apiVersion: v1 15.data: 16. age: "18" 17. name: lisi 18.kind: ConfigMap 數據成功修改,進入容器,查看數據是否修改: 1.[root@master configmap]# kubectl exec -it pod2 /bin/sh 2./ # echo $CONFIGMAP_NAME 3.lbh
數據並無更新。
總結:secret和configmap資源相同,若是引用資源數據的應用,要求會隨着資源對象內保存的數據的更新,而實時更新,那麼應該使用volumes掛載的方式引用資源。由於用環境變量的方式引用不會實時更新數據。code