# Zookeeper on k8s 部署实验
# 1 简介
# 1.1 实验环境
已经使用 Kuboard Spary 搭建好 Kubernetes 集群和 Kuboard,使用的软件如下:
名称 | 版本 |
---|---|
kuboard spary | v1.2.3-amd64 |
kubernetes | v1.25.5 |
zookeeper | 3.8.0 |
# 1.2 集群规划
- Zookeeper(三台 4 核 8G 的 Ubuntu20.04 服务器)
主机名 | IP |
---|---|
node1 | 192.168.0.6 |
node2 | 192.168.0.7 |
node3 | 192.168.0.14 |
# 2 创建 ConfigMap
# 2.1 创建 zookeeper-environment
- 创建一个名为
zookeeper-environment
的配置字典,包含变量对如下:Key Value ALLOW_ANONYMOUS_LOGIN yes BITNAMI_DEBUG false ZOO_4LW_COMMANDS_WHITELIST srvr, mntr, ruok ZOO_DATA_LOG_DIR ZOO_ENABLE_AUTH no ZOO_INIT_LIMIT 10 ZOO_LOG_LEVEL ERROR ZOO_MAX_CLIENT_CNXNS 60 ZOO_PORT_NUMBER 2181 ZOO_SERVERS zookeeper-statefulset-0.zookeeper-statefulset.bigdata.svc.cluster.local:2888:3888::1 zookeeper-statefulset-1.zookeeper-statefulset.bigdata.svc.cluster.local:2888:3888::2 zookeeper-statefulset-2.zookeeper-statefulset.bigdata.svc.cluster.local:2888:3888::3 ZOO_SYNC_LIMIT 5 ZOO_TICK_TIME 2000
# 2.2 创建 zookeeper-setup
创建一个名为
zookeeper-setup
的配置字典,Key 为setup.sh
,value 如下:#!/bin/bash if [[ -f "/bitnami/zookeeper/data/myid" ]]; then export ZOO_SERVER_ID="$(cat /bitnami/zookeeper//data/myid)" else HOSTNAME="$(hostname -s)" if [[ $HOSTNAME =~ (.*)-([0-9]+)$ ]]; then ORD=${BASH_REMATCH[2]} export ZOO_SERVER_ID="$((ORD + 1 ))" else echo "Failed to get index from hostname $HOST" exit 1 fi fi exec /entrypoint.sh /run.sh
# 3 创建 StatefulSet
- 创建一个名为
zookeeper-statefulset
的有状态副本集,设置 replica 为3
# 3.1 创建工作容器
容器名称:zookeeper
容器镜像:bitnami/zookeeper:3.8.0
命令:
/opt/scripts/setup.sh
环境变量:引用之前创建的配置字典
zookeeper-environment
容器端口:2181
资源请求限制:
CPU 资源请求:500m
内存资源请求:500Mi
CPU 资源限制:500m
内存资源限制:500Mi
健康检查:
容器存活探针:
执行命令:
/bin/bash -c 'echo "ruok" | timeout 2 nc -w 2 localhost 2181 | grep imok'
初始延迟:30 秒
执行探测频率:10 秒
超时时间:5 秒
健康阈值:1 秒
不健康阈值:6 秒
容器就绪探针:与容器存活探针相同
容器安全上下文:
runAsNonRoot:
true
用户:1001
# 3.2 创建存储挂载
数据卷:配置字典
zookeeper-setup
挂载路径:/opt/scripts/setup.sh
子路径:setup.sh
# 3.3 创建 SVC
服务类型:NodePort
端口:
端口名称 port targetPort client 2181 2181 server 2888 2888 leader-election 3888 3888
# 3.4 设置亲和性
设置 Node 亲和性(硬策略)
- 必须满足标签表达式:app.kubernetes.io/component=zookeeper
设置 Pod 反亲和性(软策略)
尽量满足标签表达式
权重:49
togologykey:app.kubernetes.io/name
表达式:app.kubernetes.io/component=zookeeper
# 4 部署结果
# 4.1 集群信息
# 4.2 节点状态测试
zkServer.sh status