WuKongIM Docs

Kubernetes 部署(Beta)

把已验证制品部署为具备稳定身份、独立存储和正确探针的 WuKongIM 集群。

编辑此页报告文档问题

这条路径面向已经拥有 Kubernetes 平台能力的团队。先确定 WuKongIM 拓扑,再把已验证镜像和配置交给平台编排;Kubernetes 本身不会提供成员关系、数据副本或升级兼容性。

Beta,不是官方安装包

当前仓库不提供可直接用于生产的 Helm Chart 或完整 Kubernetes 清单。本文给出最短实施顺序;平台团队必须审阅并维护最终资源、Secret、网络、容量和恢复证据。

先确认适用

  • 已完成多节点集群的成员、地址、副本和故障域设计;
  • 已有稳定的 StorageClass,并完成独立 PVC 的快照与恢复演练;
  • 能管理镜像摘要、Secret、NetworkPolicy、入口和监控;
  • 能为 API、TCP、WebSocket/WSS、Manager、指标和节点 Transport 划分网络边界。

参考资源使用三节点、三副本拓扑。它没有节点余量:失去任一节点后,其他节点的 /readyz 会因副本候选不足返回 503。若故障目标要求失去一台后仍保留三个副本候选,至少准备四个合格数据节点。

1. 构建并固定镜像

git rev-parse HEAD
docker buildx build --load --pull \
  -t registry.example.com/wukongim:${GIT_COMMIT} .
docker push registry.example.com/wukongim:${GIT_COMMIT}
docker inspect --format='{{index .RepoDigests 0}}' \
  registry.example.com/wukongim:${GIT_COMMIT}

发布流水线应显式设置 ${GIT_COMMIT}。最终 Pod 镜像必须固定为 registry.example.com/wukongim@sha256:REPLACE_WITH_REVIEWED_DIGEST,不能使用浮动标签。

2. 适配资源

Kubernetes 资源参考复制并审阅 ConfigMap、Headless Service、客户端 Service、StatefulSet、PVC 和 PodDisruptionBudget 片段。至少替换:

项目必须确认
镜像所有 Pod 使用同一已审阅摘要
身份StatefulSet 序号稳定映射到唯一 WK_NODE_ID
成员表WK_CLUSTER_NODES 是 JSON 整表,地址通过 Headless Service 双向可达
配置hash_slot_count = 256,副本数符合节点数和故障目标
存储每个 Pod 使用独立 PVC,容量、拓扑和回收策略明确
探针startup/liveness 使用 /healthz,readiness 使用 /readyz
网络客户端地址真实可达;Manager、指标和 Transport 不暴露公网
SecretJoin Token、Manager JWT 和账号不进入 ConfigMap 或 Git

StatefulSet 需要保留 enableServiceLinks: false,避免 Kubernetes 注入未知的 WK_* 环境变量。稳定身份与 PVC 语义见 StatefulSet 文档,探针行为见 Probe 文档

3. 部署平台清单

把审阅后的资源保存在团队自己的发布仓库,再按依赖顺序应用。下面的文件名只是示例,不代表仓库内置清单:

kubectl apply -f namespace.yaml
kubectl apply -f secrets.yaml
kubectl apply -f config.yaml
kubectl apply -f services.yaml
kubectl apply -f statefulset.yaml
kubectl apply -f pdb.yaml

kubectl -n wukongim rollout status statefulset/wukongim --timeout=10m

4. 验证

kubectl -n wukongim get pods -o wide
kubectl -n wukongim get pvc
kubectl -n wukongim get endpointslice \
  -l kubernetes.io/service-name=wukongim-peer
kubectl -n wukongim logs wukongim-0 --tail=200

kubectl -n wukongim port-forward pod/wukongim-0 15001:5001
curl --fail http://127.0.0.1:15001/healthz
curl --fail http://127.0.0.1:15001/readyz

然后逐节点确认:

  • Pod 身份、WK_NODE_ID、PVC 和 Transport DNS 一一对应;
  • /readyz 返回 200,Manager 与指标中没有重复节点 ID;
  • 客户端使用实际广告地址完成路由、连接、发送、接收和重连同步;
  • Pod 重建后挂回原 PVC,路由和持久消息恢复符合预期。

生命周期边界

  • 扩容:不能只修改 replicas;新增 Pod 必须有合法节点 ID、成员地址、独立 PVC 和受控迁移过程。
  • 升级:只有目标版本明确支持混合运行时才逐节点更新,否则使用维护窗口。遵循升级与迁移
  • 上线:完成生产检查清单后再接收生产流量。

做到镜像摘要固定、状态持久化、所有节点就绪、客户端地址可达,并保留端到端与恢复证据,才算完成 Kubernetes 部署。

本页内容