创建ConfigMap

ConfigMap可以用目录(目录下有多个文件)单个文件字符值的方式创建,使用kubectl创建一个ConfigMap的命令格式如下:

kubectl create cm <map-name> <datasource>
  • map-name:ConfigMap的名称。

  • data-source:数据源,可以是目录文件字符值

基于目录创建ConfigMap

conf文件夹

有一个conf文件夹,里面包含两个配置文件,文件内容如下:

ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
game.properties
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

最后更新于