多谢,对于st模式的集群模式之前尝试过,应该是ok的,但我们现在要求用deployment+host主机映射,所以有了上述一些问题。
https://www.kubebiz.com/KubeBiz/zookeeper
你可以参考这个网站使用的zookeeper案例。 是你想要的集群方式。
谢谢~
起先,我主机的目录是空的,对于镜像中/conf目录如果不进行挂载,则/conf目录也有上面的configuration.xsl log4j.properties zoo.cfg这些文件,一旦进行volumeMounts挂载后,/conf将被清空,最后会将zoo.cfg拷贝到主机目录下。
您说的
volumeMounts:
- mountPath: /opt/zookeeper-xxxxx.xxx.xx/conf/zoo.cfg
name: cfg
subPath: zoo.cfg
我也尝试将mountPath改成/conf/zoo.cfg,其它跟您的一致,结果在主机目录下生成zoo.cfg目录,此时kubectl logs仍没有相关日志,于是我再将log4j.properties也采用subPath的方法,结果也只是生成log4j.properties目录,仍没有相关日志,估计还是pod中/conf仍没有log4j.properties文件的缘故。
后来我尝试用其它目录作为mountPath,如/home, 此时pod中/conf有上面的几个文件了,也产生的日志文件,不过,此时zoo.cfg虽然在pod下/home生成了,但并没有映射到主机目录了,zk也就没读zoo.cfg配置信息,故不能组成集群
问题1:你没有使用subPath挂载,你是使用的全文件夹目录挂载的。只要你主机的/opt/local/data/zk/conf这个目录下有几个配置文件,容器中就只会有几个配置文件,他会将原来容器中的清空,再挂你的主机中的文件。
问题2:你挂载了文件自然就与主机的配置一样的。
问题3:如果你的主机中没写全配置文件,就必须每个都需要写subPath挂载。
谢谢回复。我是通过主机目录映射的方式挂载的,应该就是你说的外部挂载方式,其中template:spec如下:
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
nodeName: zk-1234
volumes:
- name: time-volume
hostPath:
path: /etc/localtime
- name: zk-conf
hostPath:
path: /opt/local/data/zk/conf
- name: zk-data
hostPath:
path: /opt/local/data/zk/data
- name: zk-datalog
hostPath:
path: /opt/local/data/zk/datalog
#- name: zk-logs
# hostPath:
# path: /opt/local/data/zk/logs
containers:
- name: zk0
image: zookeeper:3.6.3
ports:
- containerPort: 2181
volumeMounts:
- mountPath: /etc/localtime
name: time-volume
- mountPath: /data
name: zk-data
- mountPath: /conf
name: zk-conf
- mountPath: /datalog
name: zk-datalog
(1).像我这样的配置yml方式如果采用subPath就可以实现原始文件完全映射了,是吧?
(2).这样如果数据更新会不会同步呢?
(3).此外,如果/conf目录下有3个文件:configuration.xsl log4j.properties zoo.cfg, 是需要像zoo.cfg一样,对其它两个文件均使用subPath的方式挂载吗?