k8s从入门到实战(十二):k8s存储之ConfigMap

242 阅读1分钟
介绍

比如我们安装各种中间件,他们会有各自的配置文件,为了方便修改,我们都会把它们挂载出来在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

挂载关系如下

image.png

执行上面的pod创建文件

kubectl apply -f redis.yaml

进入这个pod里面查看我们挂载的配置文件,确实是使用的我们的ConfigMap

image.png

这边还有个好处就是,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

等待一段时间同步发现里面的也跟着改了过来

image.png