介绍
比如我们安装各种中间件,他们会有各自的配置文件,为了方便修改,我们都会把它们挂载出来在k8s里面,挂载目录可以使用pv和pvc,挂载配置文件可以使用ConfigMap,他可以实现抽取应用配置,并且可以自动更新
实践
比如我们准备一个redis配置文件redis.conf如下
appendonly yes
创建一个ConfigMap,根据上面的redis.conf制作一个k8s的配置集
# 创建配置,redis保存到k8s的etcd;
kubectl create cm redis-conf --from-file=redis.conf
使用下面命令查看创建情况,会看到一个redis-conf
[root@k8s-master opt]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 58m
redis-conf 1 14s
这时候这个redis.conf就没啥用 可以删了
创建一个pod
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
command:
- redis-server
- "/redis-master/redis.conf" #指的是redis容器内部的位置
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: redis-conf
items:
- key: redis.conf
path: redis.conf
挂载关系如下
执行上面的pod创建文件
kubectl apply -f redis.yaml
进入这个pod里面查看我们挂载的配置文件,确实是使用的我们的ConfigMap
这边还有个好处就是,k8s在外面把这个配置文件改了,内部也会自动更新
kubectl edit cm redis-conf
我们加个requirepass
apiVersion: v1
data:
redis.conf: |
appendonly yes
requirepass 123456
kind: ConfigMap
metadata:
creationTimestamp: "2023-03-04T13:43:20Z"
name: redis-conf
namespace: default
resourceVersion: "5856"
uid: 72b0699f-b4fa-4a2e-81ea-9f4c3783379d
等待一段时间同步发现里面的也跟着改了过来