ConfigMap使用说明

ConfigMap概述

ConfigMap供容器使用的典型用法如下。
(1)生成为容器内的环境变量。
(2)设置容器启动命令的启动参数(需设置为环境变量)。
(3)以Volume的形式挂载为容器内部的文件或目录。

ConfigMap以一个或多个key:value的形式保存在Kubernetes系统*应用使用,既可以用于表示一个变量的值(例如apploglevel=info),也可以用于表示一个完整配置文件的内容(例如server.xml=<?xml...>...)
可以通过YAML配置文件或者直接使用kubectl create configmap命令行的方式来创建ConfigMap。

通过kubectl命令行方式创建

通过kubectl create configmap也可以创建ConfigMap,可以使用参数--from-file或--from-literal指定内容,并且可以在一行命令中指定多个参数。

(1)通过--from-file参数从文件中进行创建,可以指定key的名称,也可以在一个命令行中创建包含多个key的ConfigMap,语法为:

kubectl create configmap NAME --from-file=[key=]source --from-file=[key=]source 

(2)通过--from-file参数从目录中进行创建,该目录下的每个配置文件名都被设置为key,文件的内容被设置为value,语法为:

kubectl create configmap NAME --from-file=config-file-dir

(3)使用--from-literal时会从文本中进行创建,直接将指定的key#=value#创建为ConfigMap的内容,语法为:

kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2 

使用ConfigMap的限制条件

  • ConfigMap必须在Pod之前创建
  • ConfigMap受Namespace限制,只有处于相同Namespace中的Pod才可以引用它
  • kubelet只支持可以被API Server管理的Pod使用ConfigMap。kubelet在本Node上通过--manifest-url--config自动创建的静态Pod将无法引用ConfigMap
  • 在Pod对ConfigMap进行挂载(volumeMount)操作时,在容器内部只能挂载为“目录”,无法挂载为“文件”。
    在挂载到容器内部后,在目录下将包含ConfigMap定义的每个item,如果在该目录下原来还有其他文件,则容器内的该目录将被挂载的ConfigMap覆盖。
    如果应用程序需要保留原来的其他文件,则需要进行额外的处理。
    可以将ConfigMap挂载到容器内部的临时目录,再通过启动脚本将配置文件复制或者链接到(cp或link命令)应用所用的实际配置目录下。
上一篇:k8s helm prometheus自动重启加载配置


下一篇:在k8s中将nginx.conf文件内容创建为ConfigMap挂载到pod容器中