ConfigMap


一、引入

         应用部署的一个最佳实践是将应用所配置的配置信息与程序分离,这样可以使应用程序被更好地复用。通过不同的配置也能实现更灵活的功能。将应用打包为容器镜像后,也可以通过环境变量或者文件的方式在创建容器时进行配置注入,但在规模容器集群的环境中,对多个容器进行不同的配置将变得非常复杂。Kubernetes从1.12版本中开始提供一种统一的应用配置管理方案——ConfigMap


二、ConfigMap概括

         ConfigMap 是一种API对象,用来将非机密性的数据保存到键值对中。使用时,Pods可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

 ConfigMap将您的环境配置信息和容器解耦,便于应用配置的修改。

注:ConfigMap 不提供保密或者加密功能。如果你想存储的数据是机密的,请使用Secret,或者其他第三方工具。

 ConfigMap供容器使用的典型用法如下:

•生成容器的环境变量。

•设置容器启动命令的参数(需设置为环境变量)。

•以Volume的形式挂载为容器内部的文件或目录。


三、案例演示


$ ls  k8s-yml/ConfigMap/catalogue     ##查看目录文件


ConfigMap 用法_键值对


$  cat -n  k8s-yml/ConfigMap/catalogue/game && cat -n k8s-yml/ConfigMap/catalogue/ui     #查看文件内容


ConfigMap 用法_环境变量_02


 如果不使用YAML 文件创建的话,可以直接通过kubectl 创建ConfigMap,使用参数--from-file 或 --from-literal 指定内容,并且可以在一行命令中指定多个参数。

•--from-file:指定在目录下的所有文件都会被ConfigMap里面创建一个键值对,键的名就是文件名,值就是文件内容。或者这个参数可以使用多次,你也可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录一样的。

•--from-literal:会从文本中进行创建,直接将指定的key#=value#创建为ConfigMap的内容。


1、使用--from-file 创建ConfigMap

语法格式:

$ kubectl create configmap NAME --file-file=[key=]source  --fron-file=[key=]source


通过这种方法创建ConfigMap上述game 和ui 文件,使用目录方法:

$ kubectl create  configmap game-ui-config --from-file=k8s-yml/ConfigMap/catalogue/



kubectl get configmaps  game-ui-config    # 查看创建的CongfigMap 状态


ConfigMap 用法_环境变量_03



查看文件configmap 内容:

$ kubectl describe configmaps game-ui-config 


Name: game-ui-config
Namespace: default
Labels:
Annotations:


Data
====
game:
----
enemies=aliens
lives=3
enmies.cheat=true
enmies.cheat.level=noGoodRotten
sercret.code.passphrase=UUDLRLRBABAS
sercret.code.allowed=true
secret.code.lives=30


ui:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice


Events:


$ kubectl create  configmap game-ui-config-1 --from-file=k8s-yml/ConfigMap/catalogue/game   # 使用文件方式创建


2、使用--from-literal 创建ConfigMap

语法格式:

$ kubectl create configmap NAME --from-literal=key=value1  --from-literal=key2=value2


使用--from-literal 创建ConfigMap 文件名hello-config

$ kubectl create configmap hello-config --from-literal=hello.how=name --from-literal=type=Alive   


$ kubectl get configmaps hello-config ##查看状态


$ kubectl describe configmaps


env-config game-ui-config kube-root-ca.crt ui-1
game-1 hello-config special-config
$ kubectl describe configmaps hello-config


Name: hello-config
Namespace: default
Labels:
Annotations:


Data
====
type:
----
Alive
hello.how:
----
name
Events:




3、使用YMAL 创建ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
data:
special.how: very
special.type: charm



4、使用volume挂载ConfigMap使用

apiVersion: v1
kind: Pod
metadata:
name: pod-configmap
spec:
containers:
- name: nginx-2
image: docker.io/nginx:latest
volumeMounts: # 将对应configmap进行挂载
- name: special-config
mountPath: /config #定义挂载文件目录
volumes:
- name: special-config
configMap:
name: special-config


测试:

$ kubectl exec pod-configmap -it /bin/bash  #进入pod容器。进入对应文件夹


注:挂载成功可以通过进入容器或者kubectl describe pod pod-configmap 查看


5、ConfigMap 热更新

$ kubectl edit configmaps special-config   #对应的ConfigMap修改键值对


ConfigMap 用法_键值对_04


修改完成大概需要修改10秒左右才会成功。

ConfigMap 用法_键值对_05




完毕!!!!