ConfigMap 管理配置

ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中。

1.创建ConfigMap

创建ConfigMap的方式有4种:

通过直接在命令行中指定configmap参数创建,即--from-literal

通过指定文件创建,即将一个配置文件创建为一个ConfigMap--from-file=<文件>

通过指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,--from-file=<目录>

事先写好标准的configmap的yaml文件,然后kubectl create -f 创建

Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap。

ConfigMap 的创建和使用方式与 Secret 非常类似,主要的不同是数据以明文的形式存放。

与 Secret 一样,ConfigMap 也支持四种创建方式:

1. 通过 --from-literal:

kubectl create configmap myconfigmap --from-literal=config1=xxx --from-literal=config2=yyy

每个 --from-literal 对应一个信息条目。

2. 通过 --from-file:

echo -n xxx > ./config1

echo -n yyy > ./config2

kubectl create configmap myconfigmap --from-file=./config1 --from-file=./config2

每个文件内容对应一个信息条目。

3. 通过 --from-env-file:

cat << EOF > env.txt

config1=xxx

config2=yyy

EOF

kubectl create configmap myconfigmap --from-env-file=env.txt

文件 env.txt 中每行 Key=Value 对应一个信息条目。

4. 通过 YAML 配置文件:


ConfigMap 管理配置_第1张图片

文件中的数据直接以明文输入。

与 Secret 一样,Pod 也可以通过 Volume 或者环境变量的方式使用 Secret。

Volume 方式:


ConfigMap 管理配置_第2张图片

环境变量方式:


ConfigMap 管理配置_第3张图片

大多数情况下,配置信息都以文件形式提供,所以在创建 ConfigMap 时通常采用 --from-file 或 YAML 方式,读取 ConfigMap 时通常采用 Volume 方式。

比如给 Pod 传递如何记录日志的配置信息:


ConfigMap 管理配置_第4张图片

可以采用 --from-file 形式,则将其保存在文件 logging.conf 中,然后执行命令:

kubectl create configmap myconfigmap --from-file=./logging.conf

如果采用 YAML 配置文件,其内容则为:


ConfigMap 管理配置_第5张图片

注意别漏写了 Key logging.conf 后面的 | 符号。

创建并查看 ConfigMap:


ConfigMap 管理配置_第6张图片

在 Pod 中使用此 ConfigMap,配置文件为:


ConfigMap 管理配置_第7张图片

① 在 volume 中指定存放配置信息的文件相对路径为 myapp/logging.conf。

② 将 volume mount 到容器的 /etc 目录。

创建 Pod 并读取配置信息:


ConfigMap 管理配置_第8张图片

配置信息已经保存到 /etc/myapp/logging.conf 文件中。与 Secret 一样,Volume 形式的 ConfigMap 也支持动态更新,留给大家自己实践。

小结

本章我们学习了如何向 Pod 传递配置信息。如果信息需要加密,可使用 Secret;如果是一般的配置信息,则可使用 ConfigMap。

Secret 和 ConfigMap 支持四种定义方法。Pod 在使用它们时,可以选择 Volume 方式或环境变量方式,不过只有 Volume 方式支持动态更新。

下一节我们将开始学习 Helm -- Kubernetes 的包管理器。

书籍:

1.《每天5分钟玩转Kubernetes》

https://item.jd.com/26225745440.html

2.《每天5分钟玩转Docker容器技术》

https://item.jd.com/16936307278.html

3.《每天5分钟玩转OpenStack》

https://item.jd.com/12086376.html

Kubernetes里的ConfigMap的用途

ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。

ConfigMap同Kubernetes的另一个概念secret类似,区别是ConfigMap主要用于保存不包含敏感信息的明文字符串。

创建方式:

kubectl create configmap special-config --from-literal=i042416=jerry

上述命令行创建了一个名为special-config的键值对,

ConfigMap 管理配置_第9张图片

key为i042416, 值为jerry

ConfigMap 管理配置_第10张图片

接下来我希望用这个key为i042416的值"jerry"来定义成pod里的一个环境变量。

下面是我的yaml文件:

ConfigMap 管理配置_第11张图片

apiVersion: v1

2 kind: Pod

3 metadata:

4 name: jerry-config-pod

5 spec:

6 containers:

7 - name: test-container

8 image: gcr.io/google_containers/busybox

9 command: [ "/bin/sh", "-c", "env" ]

10 env:

11 - name: JERRY_NAME

12 valueFrom:

13 configMapKeyRef:

14 name: special-config

15 key: i042416

16 restartPolicy: Never

可以看到第15行引用了我的ConfigMap的key:i042416

下面使用create -f将该yaml文件导入,创建一个新的pod:

创建之后,能在pod的明细页面看到configMap的key已经作为环境变量显示出来了:

ConfigMap 管理配置_第12张图片

因为我yaml文件里指定pod执行的script为/bin/sh -c env, 因此最后会将容器里所有的环境变量都打印出来,我们定义在ConfigMap里的i042416的值jerry也被显示了出来:

ConfigMap 管理配置_第13张图片

你可能感兴趣的:(ConfigMap 管理配置)