Configmap配置管理
ConfigMap API资源提供了将配置注入容器的机制,ConfigMap可用于存储细粒度信息如单个属性,或粗粒度信息如整个配置文件或JSON对象。
用于保存配置数据,以键对形式储存。
ConfigMap API资源存储键/值对配置数据,这些数据可以在pods里使用。ConfigMap跟Secrets类似,但是ConfigMap可以更方便的处理不包含敏感信息的字符串。
ConfigMap有以下几种使用方式:
填充环境变量的值
设置容器内的命令行参数
填充卷的配置文件
1、 创建configmap
创建ConfigMap的方式有4种:
直接在命令行中指定configmap参数创建,即--from-literal
指定文件创建,即将一个配置文件创建为一个ConfigMap--from-file=<文件>
指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,--from-file=<目录>
先写好标准的configmap的yaml文件,然后kubectl create -f 创建
(1)直接在命令行中指定configmap参数创建
[wjjk8s@server1 manifest]$ kubectl create configmap cm1 --from-literal=key1=vules1
[wjjk8s@server1 manifest]$ kubectl get cm
NAME DATA AGE
cm1 1 9s
[wjjk8s@server1 manifest]$ kubectl describe cm cm1
[wjjk8s@server1 manifest]$ kubectl get cm -o yaml
(2)指定文件创建
文件名称为key,内容为vules
[wjjk8s@server1 manifest]$ kubectl create configmap cm2 --from-file=/etc/resolv.conf
(3)指定目录创建
[wjjk8s@server1 manifest]$ kubectl create configmap cm3 --from-file=cm
(4)configmap的yaml文件
[wjjk8s@server1 cm]$ cat cm4.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm4
data:
db_host: "172.25.1.250"
db_port: "3306"
[wjjk8s@server1 cm]$ kubectl create -f cm4.yaml
2、使用ConfigMap
使用ConfigMap有三种方式:
第一种是通过环境变量的方式,直接传递给pod
使用configmap中指定的key
使用configmap中所有的key
第二种是通过在pod的命令行下运行的方式(启动命令中)
第三种是作为volume的方式挂载到pod内
(1)通过环境变量的方式,直接传递给pod
1.1:定义容器内名称
[wjjk8s@server1 cm]$ vim pod.yaml
[wjjk8s@server1 cm]$ kubectl create -f pod.yaml
[wjjk8s@server1 cm]$ kubectl logs pod1
KUBERNETES_PORT_443_TCP_PORT=443
key1=172.25.1.250
KUBERNETES_PORT_443_TCP_PROTO=tcp
key2=3306
1.2:直接导入cm4
envFrom:
- configMapRef:
name: cm4
[wjjk8s@server1 cm]$ kubectl create -f pod1.yaml
[wjjk8s@server1 cm]$ kubectl logs pod1 #查看
(2)通过在pod的命令行下运行的方式
command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]
(3)作为volume的方式挂载到pod内
command: ["/bin/sh", "-c", "cat /config/db_host"]
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
configMap:
name: cm4
[wjjk8s@server1 cm]$ kubectl logs pod2
172.25.1.250
3、configmap热更新
[wjjk8s@server1 cm]$ kubectl exec -it my-nginx-7b55b857-5k4b9 -- bash
root@my-nginx-7b55b857-5k4b9:/# cd /config/
root@my-nginx-7b55b857-5k4b9:/config# ls
db_host db_port
root@my-nginx-7b55b857-5k4b9:/config# cat db_host
172.25.1.250
更新:删除pod重新创建更新
[wjjk8s@server1 cm]$ kubectl get cm cm4 -o yaml #查看
[wjjk8s@server1 cm]$ kubectl edit cm cm4 #更改内容
[wjjk8s@server1 cm]$ kubectl delete pod my-nginx-7b55b857-5k4b9 #删除会自动更新
[wjjk8s@server1 cm]$ kubectl exec -it my-nginx-7b55b857-5k4b9 -- bash
root@my-nginx-7b55b857-5k4b9:/# cd config/
root@my-nginx-7b55b857-5k4b9:/config# cat db_host
172.25.1.100
更新:指令热更新
[wjjk8s@server1 cm]$ kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20200502"}}}}}'
[[wjjk8s@server1 cm]$ vim pod5.yaml
4、创建nginx
[wjjk8s@server1 cm]$ vim pod5.yaml
[wjjk8s@server1 cm]$ vim nginx.conf
[wjjk8s@server1 cm]$ kubectl create configmap nginxconf --from-file=nginx.conf
[wjjk8s@server1 cm]$ kubectl create -f pod5.yaml
[wjjk8s@server1 cm]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-9f4f65995-zzl84 1/1 Running 0 20s 10.244.2.93 server4 <none> <none>
[wjjk8s@server1 cm]$ curl 10.244.2.93:8000
更新:指令热更新
[wjjk8s@server1 cm]$ kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20200502"}}}}}' #pod名称更改