在 Kubernetes 中,挂载目录可以用 PV&PVC,但挂载配置文件,比如挂载 Redis、RabbitMQ等中间件的配置文件,却是推荐使用 ConfigMap(配置集)。
使用 ConfigMap 主要有两个步骤:
- 将原有的配置文件,创建为配置集
- 引用配置集进行使用
下面以 Redis 为例,进行实践。
1. 创建配置集
方式一:使用命令行方式
# 创建配置,redis保存到k8s的etcd;
kubectl create cm redis-conf-map --from-file=redis.conf
方式二:使用yaml文件方式
(1)新建一个 redis-config.yaml 文件,内容如下
apiVersion: v1
data: #data是所有真正的数据,key:默认是文件名 value:配置文件的内容
redis.conf: |
appendonly yes
kind: ConfigMap
metadata:
name: redis-conf-map
namespace: default
(2)应用上面的文件
kubectl apply -f redis-config.yaml
(3)查看结果
kubectl get cm
2. 创建 Pod
(1)新建一个 redis-pod.yaml 文件,内容如下
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 # Pod内部要挂载的目录
name: data
- mountPath: /redis-master
name: config # 映射到volumes下面的 name
volumes:
- name: data
emptyDir: {} # k8s自动分配目录
- name: config
configMap: # 配置集方式
name: redis-conf-map # 通过名称查找对应配置集
items:
- key: redis.conf
path: redis.conf # 映射到Pod里面的/redis-master/redis.conf文件
(2)应用一下
kubectl apply -f redis-pod.yaml
(3)查看创建结果
kubectl get pod
3. 测试一下
(1)在 master 结点,更改配置文件
# 查看cm信息
kubectl get cm
# 更改cm信息,往里面加入新的配置信息,并保存退出
kubectl edit cm redis-conf-map
(2)进入到对应的 Redis 的 Pod 内部,查看是否将变更信息更新到配置文件中
cd /redis-master/
cat redis.conf
(3)如果配置文件中有变更信息,证明成功。
总结:修改了 ConfigMap,Pod 里面的配置文件也会跟着变更;但如果配置文件没有生效,则需要重启 Pod,以应用到最新的配置文件信息。