數據持久化之ConfigMap與secret的對比

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

相關文章
相關標籤/搜索