1、我在k8s中使用zookeeper 3.6.3的官方镜像搭建zk集群,发现镜像中/conf目录下有以下4个文件:
configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
2、但部署后k8s容器中只有zoo.cfg这个文件,没有了log4j.properties, 从而用kubectl logs查看zk pod日志时
会显示如下:
3、我发现在镜像中conf目录隶属于zookeeper:zookeeper用户组:用户下,尝试创建 zookeeper:zookeeper用户组,并赋予相关权限,但容器中 /conf 目录下仍只有 zoo.cfg 文件,这样由于没有 log4j.properties 无法继续显示启动日志,如果这个 pod 部署不成功 Error/CrashLoopBackOff 均无法查看其失败的原因。
4、请问一下我需要额外配置什么,在k8s容器中才会显示其它3个配置文件呢?或者如何查看pod Error/CrashLoopBackOff 部署失败的详情?谢谢
查看相关的事件,看看是否可以定位到相关错误:
kubectl get events -n base-services
谢谢回复,我按您的方法试了一下,得到的信息也是比较少,跟kubectl describe pod的结果差不多。请问下您们用k8s部署后也会出现log4j配置文件丢失吗?
你的zoo.cfg配置文件是否是通过外部挂载的方式,进行挂载的。如果是直接挂载目录的话,容器中的原始文件将会被覆盖清空。
建议你使用子目录的方式,单独挂载文件目录。
volumeMounts: - mountPath: /opt/zookeeper-xxxxx.xxx.xx/conf/zoo.cfg name: cfg subPath: zoo.cfg
谢谢回复。我是通过主机目录映射的方式挂载的,应该就是你说的外部挂载方式,其中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的方式挂载吗?
问题1:你没有使用subPath挂载,你是使用的全文件夹目录挂载的。只要你主机的/opt/local/data/zk/conf这个目录下有几个配置文件,容器中就只会有几个配置文件,他会将原来容器中的清空,再挂你的主机中的文件。
问题2:你挂载了文件自然就与主机的配置一样的。
问题3:如果你的主机中没写全配置文件,就必须每个都需要写subPath挂载。
谢谢~
起先,我主机的目录是空的,对于镜像中/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配置信息,故不能组成集群
https://www.kubebiz.com/KubeBiz/zookeeper
你可以参考这个网站使用的zookeeper案例。 是你想要的集群方式。
多谢,对于st模式的集群模式之前尝试过,应该是ok的,但我们现在要求用deployment+host主机映射,所以有了上述一些问题。
你的答案