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 不暴露公网 |
| Secret | Join 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=10m4. 验证
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 部署。