创建ConfigMap
注意: ConfigMap 中的键名必须是一个合法的 DNS 域,仅包含数字字母、破折号、下画线以及圆点,首位的圆点符号是可选的
使用命令kubectl创建ConfigMap
$ kubectl create configmap app-config --from-literal=qos=1
这条命令创建了一个叫做app-config的ConfigMap,且仅包含配置项qos=1
如下所示:
root@VM-16-4-ubuntu:~/code/charts/stable# kubectl create configmap app-config --from-literal=qos=1
configmap/app-config created
root@VM-16-4-ubuntu:~/code/charts/stable# kubectl get cm
NAME DATA AGE
app-config 1 6s
kube-root-ca.crt 1 25d
root@VM-16-4-ubuntu:~/code/charts/stable# kubectl describe cm app-config
Name: app-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
qos:
----
1
BinaryData
====
Events: <none>
root@VM-16-4-ubuntu:~/code/charts/stable#
如果要多个配置条目就附带多个--from-literal
通过Yaml创建ConfigMap
命令:
$ kubectl create -f app-config.yaml
Yaml格式:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app-config.ini: |
[MQ]
qos=1
通过文件内容创建ConfigMap
ConfigMap 同样可以存储粗粒度的配置数据,比如完整的配置文件。kubectl create configmap
命令支持从磁盘上读取文件,并将文件内容单独存储为
ConfigMap中的条目
$ kubectl create configmap app-config --from-file=app-config.ini
创建后如下所示:
root@VM-16-4-ubuntu:~# kubectl get cm app-config -o yaml
apiVersion: v1
data:
app-config.ini: |
[MQ]
qos=1
kind: ConfigMap
metadata:
creationTimestamp: "2022-02-15T07:03:34Z"
name: app-config
namespace: default
resourceVersion: "2829911"
uid: c9f74808-129b-4cf2-96c3-5489194609ea
运行上述命令时, kubectl 会在当前目录下查找 app-config.ini
文件,并将文件内容存储在 ConfgMap 中以app-config.ini
为键名的条目下,当然也可以手动指定键名:
$ kubectl create configmap app-config --from-file=customkey=app-config.ini
创建后如下所示:
root@VM-16-4-ubuntu:~# kubectl get cm app-config -o yaml
apiVersion: v1
data:
customkey: |
[MQ]
qos=1
kind: ConfigMap
metadata:
creationTimestamp: "2022-02-15T07:04:51Z"
name: app-config
namespace: default
resourceVersion: "2830017"
uid: 58c4184c-6d09-4ecb-9dd3-a252c9dc04df
与使用字面量时相同,多次使用 --from-file 参数可增加多个文件条目
通过文件夹创建ConfigMap
除单独引入每个文件外,甚至可以引入某一文件夹中的所有文件
$ kubectl create configmap my-config --from-file=/path/to/dir
这种情况下, kubectl 会为文件夹中的每个文件单独创建条目,仅限于那些文件名可作为合法 ConfigMap 键名的文件
查看ConfigMap
命令:
$ kubectl get cm
如下:
root@VM-16-4-ubuntu:~# kubectl get cm
NAME DATA AGE
app-config 1 8m17s
kube-root-ca.crt 1 25d
修改ConfigMap
命令:
$ kubectl edit cm cm-name
例如:
root@VM-16-4-ubuntu:~# kubectl edit cm app-config
Edit cancelled, no changes made.
修改ConfigMap时要注意pod中的应用程序是否会去重载配置,否则需要重启pod才能重新读取改动后的配置。
删除ConfigMap
命令:
$ kubectl delete cm cm-name
例如:
root@VM-16-4-ubuntu:~/code/charts/stable# kubectl delete cm app-config
configmap "app-config" deleted