使用kubectl创建ConfigMap
一、使用kubectl创建ConfigMap
可以使用kubectl create configmap命令,可以根据目录, 文件或 字符串创建ConfigMap。
kubectl create configmap <map-name> <data-source>
<map-name>代表ConfigMap的名字,<data-source>代表目录、文件或者字符串。
数据源对应于ConfigMap中的键值对,
key = 文件名或者命令行中提供的key
value = 文件内容或命令中提供的字符串
可以使用kubectl describe or kubectl get 获取ConfigMap的信息。前者仅展示ConfigMap的概要,后者将展示ConfigMap的全部内容。
1、利用目录创建ConfigMap
使用kubectl create configmap命令从同一目录下的一组文件中创建ConfigMap,例如:
kubectl create configmap testconfig --from-file=/data/test/
将/data/test/目录的内容
[root@master data]# kubectl describe configmaps testconfig Name: testconfig Namespace: default Labels: <none> Annotations: <none> Data ==== my.cnf: ---- mysql php.ini: ---- php Events: <none>
/data/test/目录下的my.cnf和php.ini文件代表ConfigMap中的data部分。
[root@master data]# kubectl get configmaps testconfig -o yaml apiVersion: v1 data: my.cnf: | mysql php.ini: | php kind: ConfigMap metadata: creationTimestamp: 2018-07-14T01:30:35Z name: testconfig namespace: default resourceVersion: "11250608" selfLink: /api/v1/namespaces/default/configmaps/testconfig uid: 81c1bd85-8705-11e8-9015-b083feea4d48
2、利用文件中创建ConfigMap
使用kubectl create configmap命令从单个文件或一组文件中创建ConfigMap,例如:
kubectl create configmap testconfig-2 --from-file=/data/test/my.cnf
将产生如下的ConfigMap:
[root@master data]# kubectl describe configmaps testconfig-2 Name: testconfig-2 Namespace: default Labels: <none> Annotations: <none> Data ==== my.cnf: ---- mysql Events: <none>
您可以多次传递–from-file参数使用不同的数据源来创建ConfigMap。
[root@master data]# kubectl create configmap testconfig-2 --from-file=/data/test/my.cnf --from-file=/data/test/php.ini configmap "testconfig-2" created
利用文件创建ConfigMap是定义key
当您使用–from-file参数时,可以在ConfigMap的data小节内定义key替代默认的文件名:
kubectl create configmap testconfig-3 --from-file=<my-key-name>=<path-to-file> <my-key-name>是ConfigMap中的key,<path-to-file>是key代表的数据源文件位置。 [root@master data]# kubectl create configmap testconfig-3 --from-file=mysql=/data/test/my.cnf configmap "testconfig-3" created [root@master data]# kubectl get configmaps testconfig-3 -o yaml apiVersion: v1 data: mysql: | mysql kind: ConfigMap metadata: creationTimestamp: 2018-07-14T01:54:35Z name: testconfig-3 namespace: default resourceVersion: "11252624" selfLink: /api/v1/namespaces/default/configmaps/testconfig-3 uid: dbc48bb5-8708-11e8-9015-b083feea4d48
3、利用字符串创建ConfigMap
使用kubectl create configmap时使用–from-literal参数在命令中定义字面值:
[root@master data]# kubectl create configmap special-config –from-literal=port=3306 –from-literal=datadir=/data/mysql
configmap "special-config" created
可以传递多个键值对。每个对都代表ConfigMap的data小节中独立的一项。
[root@master data]# kubectl get configmaps special-config -o yaml apiVersion: v1 data: datadir: /data/mysql port: "3306" kind: ConfigMap metadata: creationTimestamp: 2018-07-14T02:01:06Z name: special-config namespace: default resourceVersion: "11253173" selfLink: /api/v1/namespaces/default/configmaps/special-config uid: c50f7a5c-8709-11e8-9015-b083feea4d48
理解Config Map
ConfigMap允许您将配置文件从容器镜像中解耦,从而增强容器应用的可移植性。
ConfigMap API resource将配置数据以键值对的形式存储。这些数据可以在pod中消费或者为系统组件提供配置,例如controller。ConfigMap与Secret类似,但是通常只保存不包含敏感信息的字符串。用户和系统组件可以以同样的方式在ConfigMap中存储配置数据。
注意:ConfigMap只引用属性文件,而不会替换它们。可以把ConfigMap联想成Linux中的/etc目录和它里面的内容。例如,假如您使用ConfigMap创建了Kubernetes Volume,ConfigMap中的每个数据项都代表该volume中的一个文件。