一、使用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中的一个文件。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注