ConfigMap可以用目录(目录下有多个文件)、单个文件或字符值的方式创建,使用kubectl创建一个ConfigMap的命令格式如下:
kubectl create cm <map-name> <datasource>
data-source:数据源,可以是目录、文件或字符值。
基于目录创建ConfigMap
conf文件夹
有一个conf文件夹,里面包含两个配置文件,文件内容如下:
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
基于目录下的所有文件创建ConfigMap的命令如下:
$ kubectl create cm cm-dir --from-file=conf
configmap/cm-dir created
由于该ConfigMap是直接基于目录创建的,没有指定ConfigMap中的Key名,因此默认是按照目录下的文件名作为ConfigMap数据中的Key名,查看当前创建的ConfigMap:
$ kubectl get cm cm-dir -o yaml
apiVersion: v1
data:
game.properties: "enemies=aliens\r\nlives=3\r\nenemies.cheat=true\r\nenemies.cheat.level=noGoodRotten\r\nsecret.code.passphrase=UUDDLRLRBABAS\r\nsecret.code.allowed=true\r\nsecret.code.lives=30"
ui.properties: "color.good=purple\r\ncolor.bad=yellow\r\nallow.textmode=true\r\nhow.nice.to.look=fairlyNice"
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T06:41:29Z"
name: cm-dir
namespace: default
resourceVersion: "152782"
uid: 0238826d-3ffb-4365-9b12-76610f4b6b31
基于文件创建ConfigMap
在实际使用时,大部分都是基于单个文件创建ConfigMap的,然后挂载至某个资源文件供其Pod使用。例如有一个game.properties文件,可以基于此文件使用kubectl create cm创建ConfigMap:
$ kubectl create cm cm-one-file --from-file=conf/game.properties
configmap/cm-one-file created
由于没有指定ConfigMap的Key,因此依旧使用文件名作为Key,查看当前的ConfigMap:
$ kubectl get cm cm-one-file -o yaml
apiVersion: v1
data:
game.properties: "enemies=aliens\r\nlives=3\r\nenemies.cheat=true\r\nenemies.cheat.level=noGoodRotten\r\nsecret.code.passphrase=UUDDLRLRBABAS\r\nsecret.code.allowed=true\r\nsecret.code.lives=30"
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T06:55:37Z"
name: cm-one-file
namespace: default
resourceVersion: "153250"
uid: 83485dd5-f727-4c0f-a17c-e9f399d41c77
如果需要指定ConfigMap的Key名,可以使用如下格式进行创建:
$ kubectl create cm cm-simple-key --from-file=simple-key=conf/game.properties
configmap/cm-simple-key created
$ kubectl get cm cm-simple-key -o yaml
apiVersion: v1
data:
simple-key: "enemies=aliens\r\nlives=3\r\nenemies.cheat=true\r\nenemies.cheat.level=noGoodRotten\r\nsecret.code.passphrase=UUDDLRLRBABAS\r\nsecret.code.allowed=true\r\nsecret.code.lives=30"
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T06:57:21Z"
name: cm-simple-key
namespace: default
resourceVersion: "153465"
uid: 5d64cab9-66cf-4a9e-b52a-b542460684a8
也可以使用--from-file多次传入参数以从多个数据源创建ConfigMap,此方式和基于文件夹类似,只不过可以单独设置ConfigMap的Key名:
$ kubectl create cm cm-mul-key --from-file=one=conf/game.properties --from-file=two=conf/ui.properties
configmap/cm-mul-key created
$ kubectl get cm cm-mul-key -o yaml
apiVersion: v1
data:
one: "enemies=aliens\r\nlives=3\r\nenemies.cheat=true\r\nenemies.cheat.level=noGoodRotten\r\nsecret.code.passphrase=UUDDLRLRBABAS\r\nsecret.code.allowed=true\r\nsecret.code.lives=30"
two: "color.good=purple\r\ncolor.bad=yellow\r\nallow.textmode=true\r\nhow.nice.to.look=fairlyNice"
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T06:59:21Z"
name: cm-mul-key
namespace: default
resourceVersion: "153721"
uid: c4159373-79df-4f91-97b7-83dbf1547e55
基于ENV文件创建ConfigMap
假如有一个文件game.properties,里面存储的是key=value形式的数据,此类文件可以当作某个应用的环境变量配置,此时可以使用--from-env-file从ENV文件创建ConfigMap:
$ kubectl create cm cm-env-file --from-env-file=conf/game.properties
configmap/cm-env-file created
$ kubectl get cm cm-env-file -o yaml
apiVersion: v1
data:
enemies: aliens
enemies.cheat: "true"
enemies.cheat.level: noGoodRotten
lives: "3"
secret.code.allowed: "true"
secret.code.lives: "30"
secret.code.passphrase: UUDDLRLRBABAS
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T07:01:20Z"
name: cm-env-file
namespace: default
resourceVersion: "153968"
uid: caa9cfa9-ea79-499c-9ec1-a08c07365c3f
基于字符值创建ConfigMap
有时候配置并不是很多,只有几个key=value的参数,可以直接使用kubectl create configmap与--from-literal参数来定义命令行的字符值,比如以special.how=very和special.type=charm进行创建:
$ kubectl create cm cm-literal --from-literal=special.how=very --from-literal=special.type=charm
configmap/cm-literal created
$ kubectl get cm cm-literal -o yaml
apiVersion: v1
data:
special.how: very
special.type: charm
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T07:05:33Z"
name: cm-literal
namespace: default
resourceVersion: "154501"
uid: adbcdc21-28f1-4820-bdb6-82e561b02aa8