创建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:

由于没有指定ConfigMap的Key,因此依旧使用文件名作为Key,查看当前的ConfigMap:

如果需要指定ConfigMap的Key名,可以使用如下格式进行创建:

也可以使用--from-file多次传入参数以从多个数据源创建ConfigMap,此方式和基于文件夹类似,只不过可以单独设置ConfigMap的Key名:

基于ENV文件创建ConfigMap

假如有一个文件game.properties,里面存储的是key=value形式的数据,此类文件可以当作某个应用的环境变量配置,此时可以使用--from-env-file从ENV文件创建ConfigMap

基于字符值创建ConfigMap

有时候配置并不是很多,只有几个key=value的参数,可以直接使用kubectl create configmap与--from-literal参数来定义命令行的字符值,比如以special.how=very和special.type=charm进行创建:

最后更新于

这有帮助吗?