Featured image of post Zookeeper on k8s 部署实验

Zookeeper on k8s 部署实验

Apache Zookeeper 是一个分布式协调服务,用于管理分布式系统中的数据一致性。它可以帮助维护分布式应用程序的配置信息,命名服务,分布式协调和组服务。本文将使用 Kubernetes 部署 Zookeeper 集群,充分利用 Kubernetes 的优点。

Zookeeper on k8s 部署实验

1 简介

1.1 实验环境

已经使用 Kuboard Spary 搭建好 Kubernetes 集群和 Kuboard,使用的软件如下:

名称版本
kuboard sparyv1.2.3-amd64
kubernetesv1.25.5
zookeeper3.8.0

1.2 集群规划

  • Zookeeper(三台 4 核 8G 的 Ubuntu20.04 服务器)
主机名IP
node1192.168.0.6
node2192.168.0.7
node3192.168.0.14

2 创建 ConfigMap

2.1 创建 zookeeper-environment

  • 创建一个名为zookeeper-environment 的配置字典,包含变量对如下:
    KeyValue
    ALLOW_ANONYMOUS_LOGINyes
    BITNAMI_DEBUGfalse
    ZOO_4LW_COMMANDS_WHITELISTsrvr, mntr, ruok
    ZOO_DATA_LOG_DIR
    ZOO_ENABLE_AUTHno
    ZOO_INIT_LIMIT10
    ZOO_LOG_LEVELERROR
    ZOO_MAX_CLIENT_CNXNS60
    ZOO_PORT_NUMBER2181
    ZOO_SERVERSzookeeper-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_LIMIT5
    ZOO_TICK_TIME2000

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

  • 端口:

    端口名称porttargetPort
    client21812181
    server28882888
    leader-election38883888

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
本博客已稳定运行
发表了70篇文章 · 总计295.51k字
Welcome to cuterwrite's blog!
使用 Hugo 构建
主题 StackJimmy 设计
基于 v3.25.0 分支版本修改