1.1. 15.1 使用ConfigMap管理应用配置
1.1.1. 通过kubectl命令创建ConfigMap
创建一个名称为cmd-config的ConfigMap
[root@k8s-master1 ~]# kubectl create configmap cmd-config --from-literal=host=www.unixhot.com
configmap/cmd-config created
查看ConfigMap
[root@k8s-master1 ~]# kubectl get configmap
NAME DATA AGE
cmd-config 1 63s
查看ConfigMap内容
[root@k8s-master1 ~]# kubectl describe configmap cmd-config
Name: cmd-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
host:
----
www.unixhot.com
Events: <none>
ConfigMap中包含多个键值对 可以多次使用--from-literal为一个ConfigMap创建多个键值对,中间用空格分隔
[root@k8s-master1 ~]# kubectl create configmap mcmd-config --from-literal=host=www.unixhot.com --from-literal=port=443 --from-literal=ssl=on
configmap/mcmd-config created
1.1.2. 通过YAML文件创建ConfigMap
查看已创建的ConfigMap生成的YAML文件
[root@k8s-master1 ~]# kubectl get configmap mcmd-config -o yaml
apiVersion: v1
data:
host: www.unixhot.com
port: "443"
ssl: "on"
kind: ConfigMap
metadata:
creationTimestamp: "2019-11-05T01:45:13Z"
name: mcmd-config
namespace: default
resourceVersion: "5394993"
selfLink: /api/v1/namespaces/default/configmaps/mcmd-config
uid: 02012d69-e324-4e9d-ba04-7132e9f6ecd8
只需要将metadata中无需指定的字段去掉即可生成一个YAML文件。
[root@k8s-master1 ~]# kubectl get configmap mcmd-config -o yaml > mcmd-config-v2.yaml
[root@k8s-master1 ~]# vim mcmd-config-v2.yaml
apiVersion: v1
data:
host: www.unixhot.com
port: "443"
ssl: "on"
kind: ConfigMap
metadata:
name: mcmd-config-v2
namespace: default
注意需要修改metadata.name,修改完毕后直接创建即可
[root@k8s-master1 ~]# kubectl create -f mcmd-config-v2.yaml
configmap/mcmd-config-v2 created
[root@k8s-master1 ~]# kubectl get configmap
NAME DATA AGE
cmd-config 1 24m
mcmd-config 3 16m
mcmd-config-v2 3 9s
1.1.3. 通过文件创建ConfigMap
ConfigMap除了可以存储单个或者多个键值对之外,可以存储完整的配置文件,将单个配置文件直接转换为ConfigMap在生产中十分常用
[root@k8s-master1 ~]# kubectl create configmap file-config --from-file=/etc/hosts
configmap/file-config created
可以看到ConfigMap直接存储了文件的内容,Key名称为文件名hosts,也可以手动指定Key的名称。
[root@k8s-master1 ~]# kubectl describe configmap file-config
Name: file-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
hosts:
----
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.99.27 k8s-master1 k8s-master1.dianjoy.com
192.168.99.28 k8s-master2 k8s-master2.dianjoy.com
192.168.99.29 k8s-master3 k8s-master3.dianjoy.com
Events: <none>
将Key手动指定为host-hosts
[root@k8s-master1 ~]# kubectl create configmap file-config-v2 --from-file=host-hosts=/etc/hosts
configmap/file-config-v2 created
[root@k8s-master1 ~]# kubectl describe configmap file-config-v2
Name: file-config-v2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
host-hosts:
----
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.99.27 k8s-master1 k8s-master1.dianjoy.com
192.168.99.28 k8s-master2 k8s-master2.dianjoy.com
192.168.99.29 k8s-master3 k8s-master3.dianjoy.com
Events: <none>
1.1.4. 从目录创建ConfigMap
ConfigMap还支持通过目录创建,kubectl会为目录中的每个文件单独创建条目,需要注意的是如果目录下面包含子目录,会忽略这些子目录和子目录里面的内容。
[root@k8s-master1 ~]# kubectl create configmap dir-config --from-file=/etc/kubernetes
configmap/dir-config created
1.1.5. 混合选项创建ConfigMap
同时使用命令行、文件、目录创建ConfigMap也是支持的,只需要使用不同的选项即可。
[root@k8s-master1 ~]# kubectl create configmap mycp --from-literal=env=test \
--from-file=/etc/hosts \
--from-file=myhosts=/etc/hosts \
--from-file=/etc/kubernetes
configmap/mycp created
ConfigMap的内容可以通过环境变量的形成传递给容器,也可通过和Volume的形式挂载到容器中。
1.1.6. 通过环境变量给容器传递ConfigMap
可以将ConfigMap中的键值对数据通过环境变量的形式传递到容器中,这样在配置容器的时候有一些数据可以使用环境变量,然后使用ConfigMap进行填充,这样就可以实现配置和Pod的分离。