k8s 部署zookeeper(kubesphere)
①zookeeper的docker官方镜像不能直接用于此次集群服务搭建,由于官方zookeeper镜像在k8s环境中节点myid不能动态配置,这里我们需要根据实际需求定制我们可以动态改变zookeeper中的myid节点的镜像。
②这里使用的镜像是:ydockerp/zookeeper
ydockerp/zookeeper:3.8.0
③关于定制版的zookeeper镜像制作可参考Docker Hub
现在 kubesphere中新建 一个 项目kafka-test ,这里是测试环境。
(1)创建zookeeper集群服务配置文件
点击配置中心-配置-创建,新建zookeeper集群配置文件。填写zookeeper集群配置文件基础信息
zk-conf
添加元数据
zookeeper集群配置文件zoo.cfg
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
clientPort=2181
quorumListenOnAllIPs=true
server.0=zookeeper-v1-0.zookeeper.kafka-test.svc.cluster.local:2888:3888;2181
server.1=zookeeper-v1-1.zookeeper.kafka-test.svc.cluster.local:2888:3888;2181
server.2=zookeeper-v1-2.zookeeper.kafka-test.svc.cluster.local:2888:3888;2181
注意这里的 配置信息是根据自己集群来的, 如果不会配置,可以找到白眉大叔Q,71570383
zoo.cfg
点击创建,完成zookeeper集群配置添加
PS:这里我们以三个节点的配置为例,超过3个节点的配置与此类似。集群的配置规则如下: server.<myid>=ip:2888:3888;2181,这里ip地址由于k8s集群中pod节点的上下线会动态改变ip地址,
我们取其hostname主机名地址,其构成规则是<节点名称>-<版本号>-<动态索引>.<节点名称>.<命名空间>.svc.cluster.local,固定写法,
这样就可以通过域名的方式访问集群各个pod节点;myid在zookeeper中pod启动时动态获取,我们镜像使用的策略是从访问域名中截取动态索引的值为节点的myid,myid范围从 0 ~ 255 之间,使用ydockerp/zookeeper这个镜像必须遵守这个规范,不然系统会报未知的错误。2888端口用于集群内部通讯,3888用于集群leader选举,2181端口用于客户端操作。
(2) 创建 服务
zookeeper集群服务搭建
- 点击应用负载-服务-创建-有状态服务
- 填写基本信息,点击下一步,这里要与集群配置信息填写一致,否则集群不能相互访问
- 选择容器副本数量为3,点击添加镜像
- 添加 ydockerp/zookeeper 镜像,并点选使用默认端口
ydockerp/zookeeper:3.8.0
- 勾选同步主机时区,点对号添加,点击下一步
- 点击添加存储卷模板添加zookeeper的pvc存储
然后配置一下 目录 /data
- 点击挂载配置文件和秘钥
- 填写挂载zookeeper集群配置的基本信息,这里要选择添加子路径
- 勾选添加特定的键和路径,添加zookeeper集群配置,点击对号添加
- 完成挂载存储,点击下一步
- 点击创建,zookeeper服务就创建完成了
这样就部署完了。
zookeeper外网访问服务搭建
- 点击应用负载-服务-创建-指定工作负载
- 填写基本信息,点击下一步
zookeeper-node
- 指定zookeeper工作负载,点击确定
-填写客户端访问端口映射2181,点击下一步
- 选择外网访问,NodePort方式暴露端口,点击创建
- 使用idea插件工具zoolytic连接zookeeper测试
不会用的,点击连接
接下来我们对zookeeper集群服务验证
(1)查看集群主机名
for i in 0 1 2; do kubectl exec -n kafka-test zookeeper-v1-$i -- hostname; done
(2)查看集群myid
for i in 0 1 2; do echo "myid zookeeper-v1-$i";kubectl exec -n kafka-test zookeeper-v1-$i -- cat /data/myid; done
(3)#查看集群状态
for i in 0 1 2; do kubectl exec --namespace kafka-test zookeeper-v1-$i zkServer.sh status; done
(4)#查看集群主机全名
for i in 0 1 2; do kubectl exec -n kafka-test zookeeper-v1-$i -- hostname -f; done
(5)#查看集群配置文件
for i in 0 1 2; do kubectl exec -n kafka-test zookeeper-v1-$i -- cat /conf/zoo.cfg; done
欢迎来撩 : 汇总all