ZooKeeper · Kafka 的分布式协调服务

ZooKeeper 是 messaging 命名空间下的分布式协调组件,在本集群中作为 Kafka 的依赖运行(README 将其定位为"分布式协调")。它以单副本 StatefulSet 部署,持有客户端(2181)、follower(2888)、leader 选举(3888)三个端口,通过 ClusterIP Service 暴露给集群内部消费方,目前仅 Kafka 命名空间被 NetworkPolicy 放行访问其 2181 端口。

部署形态

  • Name
    命名空间
    Description
    zookeeper
  • Name
    工作负载类型
    Description
    StatefulSet(serviceName: zookeeper-headless)
  • Name
    镜像与版本
    Description
    bitnami/zookeeper:3.9
  • Name
    副本数
    Description
    1
  • Name
    调度
    Description
    nodeSelector workload: app(对应 worker2 / worker4,见 README)
  • Name
    端口
    Description
    2181 client、2888 follower、3888 election
  • Name
    存储
    Description
    volumeClaimTemplates data,storageClass nfs-client,5Gi,RWO,挂载到 /bitnami/zookeeper
  • Name
    资源
    Description
    requests 100m CPU / 256Mi,limits 500m CPU / 512Mi

存活与就绪探针均通过 echo ruok | nc localhost 2181 | grep imok 探测 ZooKeeper 的四字命令端口:livenessProbe initialDelaySeconds 30 / periodSeconds 10,readinessProbe initialDelaySeconds 10 / periodSeconds 5。

配置与依赖

配置通过容器环境变量注入,manifest 中只有两项:

环境变量含义
ALLOW_ANONYMOUS_LOGINyes允许匿名客户端连接(未启用认证)
ZOO_SERVER_ID1本节点 server id,对应单副本部署

命名空间级别还配有两道护栏:LimitRange zookeeper-limitrange 为容器设置默认 limits 500m CPU / 512Mi、defaultRequest 100m CPU / 128Mi;ResourceQuota zookeeper-quota 限制命名空间总量 requests 1 CPU / 1Gi、limits 2 CPU / 2Gi。该服务不依赖外部 DB 或密钥(无 ExternalSecret),其数据持久化在 nfs-client PVC 上。

访问与监控

服务通过两个 ClusterIP Service 暴露,均无 Ingress,不对集群外开放:

Service类型端口用途
zookeeperClusterIP2181 client集群内客户端访问入口
zookeeper-headlessHeadless(clusterIP: None)2181 / 2888 / 3888StatefulSet 稳定网络标识

访问由两条 NetworkPolicy 控制:zookeeper 仅放行 kafka 命名空间内 app: kafka 的 Pod 访问 2181,并允许 app: zookeeper 自身 Pod 互访 2888 / 3888(集群内 follower 与选举通信);allow-from-argo-workflows 额外放行 argo-workflows 命名空间的全部入站流量。manifest 中没有 ServiceMonitor / PrometheusRule(无 Prometheus 抓取配置),也没有 HPA / VPA / PDB。

返回 messaging 总览

评论