
该Docker镜像旨在通过Kubernetes的StatefulSets(有状态集)简化Apache ZooKeeper的部署。ZooKeeper是一个分布式协调服务,常用于分布式系统中的配置管理、服务发现和分布式锁等场景。本镜像提供了在K8s环境中部署ZooKeeper集群的完整解决方案。
zookeeper运行。/opt/zookeeper/usr/etc/zookeeper//usr/bin/var/lib/zookeeper(与RPM分发版结构一致)ZooKeeper有状态集需要无头服务来控制网络域。以下是示例配置:
yamlapiVersion: v1 kind: Service metadata: name: zk-svc labels: app: zk-svc spec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None selector: app: zk-svc
说明:服务包含两个端口,server端口(2888)用于从节点同步主节点日志,leader-election端口(3888)用于集群选主。
有状态集配置需与无头服务匹配,并指定副本数。示例配置创建3节点ZooKeeper集群:
yamlapiVersion: apps/v1beta1 kind: StatefulSet metadata: name: zk spec: serviceName: zk-svc replicas: 3
重要:由于不支持加权仲裁,必须选择奇数副本数(推荐1、3、5或7)。更大的副本数可提升读性能,但会降低写性能,需谨慎选择。
zkGenConfig.sh脚本会根据环境变量生成ZooKeeper配置(zoo.cfg)、Log4J配置(log4j.properties)和JVM配置(jvm.env),并写入/opt/zookeeper/conf目录。以下是容器配置示例:
yamlcontainers: - name: k8szk imagePullPolicy: Always image: gcr.io/google_samples/k8szk:v3 ports: - containerPort: 2181 name: client - containerPort: 2888 name: server - containerPort: 3888 name: leader-election env: - name: ZK_ENSEMBLE value: "zk-0;zk-1;zk-2" - name: ZK_CLIENT_PORT value: "2181" - name: ZK_SERVER_PORT value: "2888" - name: ZK_ELECTION_PORT value: "3888"
集群成员配置
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_ENSEMBLE | string | N/A | 集群成员列表(分号分隔),必填项。格式为{statefulset名称}-{索引},如3节点集群为zk-0;zk-1;zk-2 |
网络配置
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_CLIENT_PORT | integer | 2181 | 客户端请求端口 |
| ZK_SERVER_PORT | integer | 2888 | 主节点向从节点发送事件的端口 |
| ZK_ELECTION_PORT | integer | 3888 | 集群选主端口 |
| ZK_MAX_CLIENT_CNXNS | integer | 60 | 单个节点允许的最大并发客户端连接数 |
说明:端口需与容器配置的containerPort及无头服务端口一致,使用默认值时可省略环境变量。
ZooKeeper时间配置
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_TICK_TIME | integer | 2000 | 集群内部时间单位(毫秒) |
| ZK_INIT_LIMIT | integer | 5 | 节点参与选主的最大Tick数 |
| ZK_SYNC_LIMIT | integer | 10 | 从节点允许落后主节点的最大Tick数 |
ZooKeeper会话配置
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_MIN_SESSION_TIMEOUT | integer | 2 * ZK_TICK_TIME | 客户端最小会话超时时间(毫秒) |
| ZK_MAX_SESSION_TIMEOUT | integer | 20 * ZK_TICK_TIME | 客户端最大会话超时时间(毫秒) |
数据保留配置
注意:ZooKeeper默认不清理旧事务日志和快照,可能导致磁盘占满。可通过以下变量配置自动清理:
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_SNAP_RETAIN_COUNT | integer | 3 | 自动清理时保留的快照数(需开启清理间隔) |
| ZK_PURGE_INTERVAL | integer | 0 | 日志和快照清理间隔(小时,0表示禁用) |
JVM配置
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_HEAP_SIZE | integer | 2 | JVM堆大小(GiB),需避免进程交换内存 |
日志级别配置
| 变量名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| ZK_LOG_LEVEL | enum(TRACE,DEBUG,INFO,WARN,ERROR,FATAL) | INFO | ZooKeeper日志级别 |
zkOk.sh脚本可用于检查ZooKeeper进程状态。以下是探针配置示例:
yamlreadinessProbe: exec: command: - sh - -c - "zkOk.sh" initialDelaySeconds: 15 timeoutSeconds: 5 livenessProbe: exec: command: - sh - -c - "zkOk.sh" initialDelaySeconds: 15 timeoutSeconds: 5
容器卷挂载配置示例:
yamlvolumeMounts: - name: datadir mountPath: /var/lib/zookeeper
必须使用Persistent Volumes确保数据持久化。以下是动态供应20GiB存储的示例:
yamlvolumeClaimTemplates: - metadata: name: datadir annotations: volume.alpha.kubernetes.io/storage-class: anything spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 20Gi
日志输出位置不可修改,ZooKeeper进程前台运行,日志输出到stdout,符合容器化应用最佳实践,可利用K8s现有日志轮转和保留机制。
zkMetrics.sh脚本可获取ZooKeeper指标并输出到stdout。可通过Kubernetes定时任务收集指标:
bashkubectl exec zk-0 zkMetrics.sh
示例输出:
zk_version 3.4.9-***, built on 08/23/2016 06:50 GMT zk_avg_latency 0 zk_max_latency 0 zk_min_latency 0 zk_packets_received 21 zk_packets_sent 20 zk_num_alive_connections 1 zk_outstanding_requests 0 zk_server_state follower zk_znode_count 4 zk_watch_count 0 zk_ephemerals_count 0 zk_approximate_data_size 27 zk_open_file_descriptor_count 39 zk_max_file_descriptor_count ***
以下是 perrykim/zookeeper 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务