kubernetes之ConfigMap

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

ConfigMap

ConfigMap是k8s集群中一个单独的资源,用来存储键值对形式的配置信息。通过将业务代码和配置信息隔离开来,可以减少容器的复杂度,同时让容器能动态部署到不同环境(开发,测试,生产),以及在不影响容器运行下进行配置的热更新。

但是因为ConfigMap中的数据都是用明文存储,不应该存放密码等私密信息。私密信息可以通过下一节要学习的Secret来进行存储

工作原理

1、首先,需要准备多个不同ConfigMap,这里是一个环境一份
2、然后,根据需要,将合适环境的ConfigMap加入到k8s集群中
3、最后,pod中的容器去ConfigMap中检索需要的内容

生成ConfigMap

这里分两种情况来看。如果是类似nginx.conf这种大篇的配置信息文件,考虑用文件或者文件夹去生成ConfigMap,方便后期维护,这时ConfigMap的key是文件名,value是文件内容;如果只是三两个环境变量,考虑用yaml文件或者直接命令行生成ConfigMap,简单快捷,这时ConfigMap是键值对和yaml文件或者命令行中的一致。

这里将这两种方式都演示一下。

根据文件或者文件夹生成ConfigMap
创建如下两个文件

[root@k8s-master Configs]# ll
total 8
-rw-r--r--. 1 root root 30 May 10 10:42 file-1
-rw-r--r--. 1 root root 30 May 10 10:42 file-2
[root@k8s-master Configs]# cat file-1
config1=value1
config2=value2
[root@k8s-master Configs]# cat file-2
config3=value3
config4=value4
复制代码

然后通过下面的命令根据单个文件或者文件夹生成ConfigMap

kubectl create configmap NAME --from-file=xxx
复制代码

之后就可以去查看ConfigMap的具体信息了,可以用describe命令

[root@k8s-master Configs]# kubectl describe cm test-cm-2
Name:         test-cm-2
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
file-1:
----
config1=value1
config2=value2

file-2:
----
config3=value3
config4=value4

Events:  <none>
复制代码

可以看到data字段下声明了ConfigMap中存储的信息,key是文件名,value是文件的内容

根据yaml文件或命令行生成ConfigMap
上面我们将ConfigMap信息用yaml格式展示出来,也可以用相同的格式去自定义自己的yaml文件。

创建yaml文件test-configmap.yaml如下

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-cm-3
data:
  database: mongodb
  database_uri: mongodb://localhost:27017
  keys: |
    image.public.key=771
    rsa.public.key=42
复制代码

创建出新的ConfigMap

[root@k8s-master Configs]# vim test-configmap.yaml
[root@k8s-master Configs]# kubectl apply -f test-configmap.yaml
configmap/test-cm-3 created
[root@k8s-master Configs]# kubectl describe cm test-cm-3
Name:         test-cm-3
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","data":{"database":"mongodb","database_uri":"mongodb://localhost:27017","keys":"image.public.key=771\nrsa.public.key=42...

Data
====
database:
----
mongodb
database_uri:
----
mongodb://localhost:27017
keys:
----
image.public.key=771
rsa.public.key=42

Events:  <none>
复制代码

也可以直接用下面的命令行格式去直接生成ConfigMap中的键值对

kubectl create configmap NAME --from-literal=KEY=VALUE --from-literal=KEY=VALUE
复制代码

例如

[root@k8s-master Configs]# kubectl create configmap test-cm-4 --from-literal=name=xiaofu --from-literal=password=123456
configmap/test-cm-4 created
[root@k8s-master Configs]# kubectl get cm
NAME        DATA   AGE
test-cm-1   1      19m
test-cm-2   2      18m
test-cm-3   3      6m13s
test-cm-4   2      10s
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享