【kubernetes/k8s概念】configMap配置管理

ConfigMap概述     

      ConfigMap API资源提供了将配置注入容器的机制,ConfigMap可用于存储细粒度信息如单个属性,或粗粒度信息如整个配置文件或JSON对象。

     ConfigMap API资源存储键/值对配置数据,这些数据可以在pods里使用。ConfigMap跟Secrets类似,但是ConfigMap可以更方便的处理不包含敏感信息的字符串。

ConfigMap有以下几种使用方式:

  • 填充环境变量的值
  • 设置容器内的命令行参数
  • 填充卷的配置文件

 

命令行

$ configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]

 

1. 创建configmap

     创建ConfigMap的方式有4种:

  • 直接在命令行中指定configmap参数创建,即--from-literal
  • 指定文件创建,即将一个配置文件创建为一个ConfigMap--from-file=<文件>
  • 指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,--from-file=<目录>
  • 先写好标准的configmap的yaml文件,然后kubectl create -f 创建

1.1 从文件创建

   $ kubectl create configmap cumulx-test --from-file=xxxx

   当 --from-file指向一文件,key的名称是文件名称,value的值是这个文件的内容         

【kubernetes/k8s概念】configMap配置管理_第1张图片

 

1.2 从目录创建

    $ kubectl create configmap cumulx-test --from-file=xxxx

   当 --from-file指向一个目录,每个目录中的文件直接用于填充ConfigMap中的key,key的名称是文件名称,value的值是这个文件的内容   

【kubernetes/k8s概念】configMap配置管理_第2张图片

 

    指定data中的key

     $  kubectl create configmap test-data-key --from-file=test-aaa=aaa.txt

【kubernetes/k8s概念】configMap配置管理_第3张图片

 

1.3 通过字面值创建

    通过kubectl create configmap创建ConfigMap使用字面值。--from-literal选项使用一个key=value语法

    $ kubectl create configmap test-literal --from-literal=key1=value1

【kubernetes/k8s概念】configMap配置管理_第4张图片

 

1.4 编写yaml文件

【kubernetes/k8s概念】configMap配置管理_第5张图片

 

2. 使用ConfigMap

      使用ConfigMap有三种方式:

  • 第一种是通过环境变量的方式,直接传递给pod 
    • 使用configmap中指定的key
    • 使用configmap中所有的key
  • 第二种是通过在pod的命令行下运行的方式(启动命令中)
  • 第三种是作为volume的方式挂载到pod内

 

2.1 ConfigMap在环境变量中

    创建一个Pod,并将一个已经创建好的ConfigMap作为环境变量,注入到Pod中

   使用valueFromconfigMapKeyRefnamekey指定要用的key:   

【kubernetes/k8s概念】configMap配置管理_第6张图片

    登陆容器查看:   

【kubernetes/k8s概念】configMap配置管理_第7张图片

 

      通过envFromconfigMapRefname使得configmap中的所有key/value对都自动变成环境变量:        

【kubernetes/k8s概念】configMap配置管理_第8张图片

 

2.2 设置命令行参数用ConfigMap

 

 

configmap的热更新

       更新 ConfigMap 后:

  • 使用该 ConfigMap 挂载的 Env 不会同步更新
  • 使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新

       当ConfigMap以数据卷的形式挂载进Pod时,更新ConfigMap(或删掉重建ConfigMap),Pod内挂载的配置信息会热更新,但使用环境变量方式加载到pod,则不会自动更新(ENV 是在容器启动的时候注入的,启动之后 kubernetes 就不会再改变环境变量的值)。且同一个 namespace 中的 pod 的环境变量是不断累加的

你可能感兴趣的:(kubernetes)