一、ConfigMap
ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。和secret资源类似,不同之处在于,secret资源保存的是敏感信息,而configmap保存的是以明文方式存放的数据。
Secret和ConfigMap
相同点:都是用来保存一些信息数据的,可以被其他资源对象进行挂载使用。并且两个资源对象的创建方法及引用方法一样,都是以键值对的方法进行存储的。
不同点:Secret保存信息数据是以密文的形式保存的,保存一些敏感信息,如数据库的用户名及密码、认证密钥等。ConfigMap是用来保存一些不是太重要的数据的,是以明文形式保存的,当我查看详细信息时,是可以看的保存的数据的。
还有就是Secret与ConfigMap虽然挂载的方式一样,但是编写yaml文件时也存在着区别。注意编写的缩进,与yaml大小写的使用。二、Volumes挂载和环境变量方式引用资源。
相同点:都是引用资源,能对其数据进行使用。
不同点:Volumes挂载会随着资源对象内保存的数据的更新,而实时更新,不过会等待一段时间后更新。环境变量的方式引用不会实时更新数据,如果想要更新数据只能重新生成Pod。
ConfigMap资源的创建基本与secret资源类似。
三、使用四种不同的方式创建ConfigMap资源:
**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:
5.Annotations:
6.
7.Data
8.====
9.age:
10.----
11.18
12.name:
13.----
14.lbh #可以发现保存的数据是明文的。所以它用来保存一些不重要的数据。
15.Events:
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查看详细信息:br/>1.[root@master configmap]# kubectl describe configmaps lbhconfigmap2
2.Name: lbhconfigmap2
3.Namespace: default
4.Labels:
5.Annotations:
6.
7.Data
8.====
9.age:
10.----
11.18
12.
13.name:
14.----
15.lbh
16.
17.Events:
**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:
5.Annotations:
6.
7.Data
8.====
9.age:
10.----
11.18
12.name:
13.----
14.lbh
15.Events:
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:
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:
以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内的数据是否更新。
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挂载的方式引用资源。因为用环境变量的方式引用不会实时更新数据。