创建ConfigMap细分的话有5种形式:

  • 基于目录创建
  • 基于文件创建
  • 基于环境变量创建
  • 基于literal创建
  • 基于yaml文件创建

不过最终数据都是以键值对的形式进行保存的。

一、基于目录创建

在实际使用时,大部分都是基于单个文件创建ConfigMap的,然后挂载至某个资源文件供其Pod使用。

1.创建工作目录

[root@k8s-master01 ~]# mkdir -p configmap/conf

2.编写配置文件

[root@k8s-master01 ~]# vim configmap/conf/game.conf
lives=3
secret.code=true

[root@k8s-master01 ~]# vim configmap/conf/game2.conf
color.good=purple
user=tomcat

3.创建ConfigMap,其中--from-file参数用于指定文件夹

[root@k8s-master01 ~]# kubectl create cm cmfromdir --from-file=/root/configmap/conf/

4.验证

[root@k8s-master01 ~]# kubectl get cm 
NAME               DATA   AGE
cmfromdir          2      46s
kube-root-ca.crt   1      25h

[root@k8s-master01 ~]# kubectl get cm cmfromdir -oyaml
apiVersion: v1
data:
  game.conf: |
    lives=3
    secret.code=true
  game2.conf: |
    color.good=purple
    user=tomcat
kind: ConfigMap
metadata:
  creationTimestamp: "2022-12-03T08:14:29Z"
  name: cmfromdir
  namespace: default
  resourceVersion: "32887"
  uid: 8ad038d1-b370-4f34-bbb4-3a1c9537027f

[root@k8s-master01 ~]# kubectl describe cm cmfromdir 
Name:         cmfromdir
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
game.conf:
----
lives=3
secret.code=true

game2.conf:
----
color.good=purple
user=tomcat

BinaryData
====

Events:  <none>

二、基于文件创建

1.创建工作目录

[root@k8s-master01 ~]# mkdir -p configmap/conf

2.编写配置文件

[root@k8s-master01 ~]# vim configmap/conf/redis.conf
Password=123

3.创建ConfigMap,,其中--from-file参数用于指定文件

[root@k8s-master01 ~]# kubectl create cm cmfromfile --from-file=/root/configmap/conf/redis.conf 

拓展(不常用,下面不做演示):创建ConfigMap,使用--from-file参数用于指定文件的同时。自定义文件名

# 创建cm的时候自定义文件名为redis-test.conf,这里redis-test.conf只需要写个文件名就行,不需要写绝对路径
kubectl create cm cmfromfile --from-file=redis-test.conf =/root/configmap/conf/redis.conf 

4.验证

[root@k8s-master01 ~]# kubectl get cm 
NAME               DATA   AGE
cmfromdir          2      7m18s
cmfromfile         1      2m21s
kube-root-ca.crt   1      25h

[root@k8s-master01 ~]# kubectl get cm cmfromfile -oyaml
apiVersion: v1
data:
  redis.conf: |
    Password=123
kind: ConfigMap
metadata:
  creationTimestamp: "2022-12-03T08:19:26Z"
  name: cmfromfile
  namespace: default
  resourceVersion: "33521"
  uid: acf5f51a-5cd8-413e-bf81-14a779b2f2fa

[root@k8s-master01 ~]# kubectl describe cm cmfromfile  
Name:         cmfromfile
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis.conf:
----
Password=123

BinaryData
====

Events:  <none>  

三、基于环境变量创建

1.创建工作目录

[root@k8s-master01 ~]# mkdir -p configmap/conf

2.编写配置文件

[root@k8s-master01 ~]# vim configmap/conf/game.conf
lives=3
secret.code=true

3.创建ConfigMap

[root@k8s-master01 conf]# kubectl create cm gameenvcm --from-env-file=/root/configmap/conf/game.conf

注意:如果使用--from-env-file多次传递参数以从多个数据源创建ConfigMap,仅最后一个ENV生效(1.23以上版本支持多个--from-env-file参数)。

4.验证

[root@k8s-master01 conf]# kubectl get cm 
NAME               DATA   AGE
cmfromdir          2      25m
cmfromfile         1      20m
cmspecialname      1      10m
cmspecialname2     2      7m51s
gameenvcm          2      11s
kube-root-ca.crt   1      26h

[root@k8s-master01 conf]# kubectl get cm gameenvcm -oyaml
apiVersion: v1
data:
  lives: "3"
  secret.code: "true"
kind: ConfigMap
metadata:
  creationTimestamp: "2022-12-03T08:39:30Z"
  name: gameenvcm
  namespace: default
  resourceVersion: "36100"
  uid: 62346419-855c-48de-8f78-9b17bb5da665

[root@k8s-master01 ~]# kubectl describe cm gameenvcm 
Name:         gameenvcm
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
lives:
----
3
secret.code:
----
true

BinaryData
====

Events:  <none>