configmap原理和实践

configmap原理和实践

原理:kubernetes通过ConfigMap来实现对容器中应用的配置管理,ConfigMap API资源保存配置数据的键值对,可以在pods中使用或者可以用于存储系统组件的配置数据。简单的说也就是,configmap是kubernetes的一种资源,ConfigMap可用于存储细粒度信息如单个属性,或粗粒度信息如整个配置文件或JSON对象。在容器中ConfigMap可用于填充各个环境变量或者整个使用。使用ConfigMap 挂载的 Env 不会同步更新,使用ConfigMap 挂载的 Volume 中的数据需要一段时间才能同步更新。

创建configmap
(1)命令行创建
kubectl create configmap test-config --from-file=/configs
直接将一个目录下的所有配置文件创建为一个ConfigMap
kubectl create configmap test-config2 --from-file=./configs/db.conf --from-file=./configs/cache.conf
直接将一个配置文件创建为一个ConfigMap
kubectl create configmap test-config3 --from-literal=db.host=10.5.10.116 --from-literal=db.port=‘3306’
在使用kubectl创建的时候,通过在命令行直接传递键值对创建
(2)yaml 文件创建
apiVersion: v1
kind: ConfigMap
metadata:
name: test
namespace: default
data:
special.how: nice
special.type: charm
这就是创建一个有两个键值的configmap。

使用configmap
(1)通过环境变量的方式,直接传递pod(容器中的环境变量不会更新)
apiVersion: v1
kind: Pod
metadata:
name: ssk-pod
spec:
containers:
- name: test-container
image: www.registry.it/dou
command: [“./run.sh”]
env:
- name: SPECIAL_HOW
valueFrom:
configMapKeyRef:
name: test
key: special.how
- name: SPECIAL_TYPE
valueFrom:
configMapKeyRef:
name: test
key: special.type
restartPolicy: Never
kubectl create -f ssk1.yaml 这样创建的容器中,环境变量SPECIAL_HOW对应的值就是nice,SPECIAL_TYPE对应的值就是charm。
(2)使用volume的方式挂载入到pod内
apiVersion: v1
kind: Pod
metadata:
name: ssk2-pod
spec:
containers:
- name: test-container
image: www.registry.it/dou
command: [“./run.sh”]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: test
restartPolicy: Never
kubectl create -f ssk2.yaml这样创建的容器中,/etc/config就有两个键值的文件。

在pod对configmap 进行挂载操作时,容器内部只能挂载为目录,无法挂载文件。在挂载到容器内部后,目录中将包含configmap定义到每个item,如果该目录下原先还有其他文件,则容器内的该目录将会被挂载的configmap进行覆盖。如果应用程序需要保留原来的文件,则需要进行额外的处理。可以通过将configmap挂载到容器内部的临时目录,再通过启动脚本将配置文件复制或者链接到应用所用的实际配置目录下。

你可能感兴趣的:(configmap原理和实践)