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