我正在尝试在Kubernetes中部署Redis哨兵部署。我已经做到了,但是想要使用ConfigMaps允许我们更改sentinel.conf文件中的主服务器的IP地址。我开始进行此操作,但是redis无法写入配置文件,因为configMaps的安装点为readOnly。
我希望运行一个初始化容器,并将redis conf复制到Pod中的另一个目录中。但是init容器找不到conf文件。
我有什么选择?初始化容器? ConfigMap以外的东西?
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: redis-sentinel
spec:
replicas: 3
template:
metadata:
labels:
app: redis-sentinel
spec:
hostNetwork: true
containers:
- name: redis-sentinel
image: IP/redis-sentinel
ports:
- containerPort: 63790
- containerPort: 26379
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /usr/local/etc/redis/conf
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: sentinel-redis-config
items:
- key: redis-config-sentinel
path: sentinel.conf
答案 0 :(得分:0)
创建启动脚本。在该副本中,将安装在卷中的configMap文件写入可写位置。然后运行容器过程。
答案 1 :(得分:0)
根据@P Ekambaram的建议,您可以尝试以下一种方法:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: redis-sentinel
spec:
replicas: 3
template:
metadata:
labels:
app: redis-sentinel
spec:
hostNetwork: true
containers:
- name: redis-sentinel
image: redis:5.0.4
ports:
- containerPort: 63790
- containerPort: 26379
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /usr/local/etc/redis/conf
name: config
initContainers:
- name: copy
image: redis:5.0.4
command: ["bash", "-c", "cp /redis-master/redis.conf /redis-master-data/"]
volumeMounts:
- mountPath: /redis-master
name: config
- mountPath: /redis-master-data
name: data
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
在此示例中,initContainer将文件从ConfigMap复制到可写目录。
注意:
emptyDir卷是在将Pod分配给节点时首先创建的,并且只要该Pod在该节点上运行就存在。顾名思义,它最初是空的。 Pod中的容器都可以在emptyDir卷中读取和写入相同的文件,尽管该卷可以安装在每个Container中的相同或不同路径上。如果出于任何原因将Pod从节点中删除,则emptyDir中的数据将被永久删除。