Hotdry.
systems-engineering

Uncloud:无 Kubernetes 的多服务器容器编排

通过 WireGuard 网格网络、去中心化状态同步和 Docker-like CLI,实现多服务器容器零宕机部署、leader election 与滚动更新。

在容器化时代,Kubernetes(K8s)已成为主流编排工具,但其复杂性让许多中小团队望而却步。Uncloud 作为一款新兴轻量级工具,正填补这一空白:它无需 K8s 的控制平面和 YAML 配置,通过简单 CLI 命令实现多服务器 Docker 应用的部署、扩展和维护。核心观点是,Uncloud 以 WireGuard 网络和分布式状态同步为核心,构建去中心化集群,支持 leader election、状态一致性和滚动更新,特别适合从单机 Docker Compose 迁移到生产环境的场景。

Uncloud 的网络层采用 WireGuard 构建全网状(mesh)拓扑,每个机器自动发现对等节点,支持 NAT 穿越,无需手动端口配置。容器获得唯一 IP,可跨机直接通信,避免传统 VPN 的性能瓶颈。官网强调,这种设计让集群 “即使部分机器下线,也能维持操作”。例如,初始化第一台机器:uc machine init root@your-server-ip,后续添加:uc scale my-app 2。CLI 只需 SSH 一台机器,即可远程管理全集群,极大简化运维。

状态同步是 Uncloud 的关键创新:摒弃中心化 etcd 或 Raft,使用 Fly.io 的 Corrosion 项目实现的分布式 SQLite。每个节点维护状态副本,通过 P2P 通信 gossip 同步,支持 leader election 机制选举协调节点。“Each machine maintains a synchronised copy of the cluster state through peer-to-peer communication”,确保高可用。相比 K8s 的 master-worker 架构,这避免单点故障,适合异构环境如云 VM + 裸机混用。

部署流程直观:定义 Docker Compose 文件,运行 uc run --name my-app -p app.example.com:8000/https app-image:latest,内置 Caddy 代理自动申请 Let's Encrypt HTTPS。服务发现内置 DNS,容器间用服务名访问。负载均衡跨副本分发流量,支持滚动更新:新镜像逐步替换旧版,无宕机中断。GitHub 仓库提到 “Zero-downtime deployments: Rolling updates without service interruption”,很快支持自动回滚。

落地参数与清单如下,提供可操作工程化实践:

1. 集群初始化清单

  • 硬件要求:Linux x64,Docker 已安装,WireGuard 模块加载(modprobe wireguard)。
  • 第一节点:uc machine init root@ip1 --public-ip ip1(指定公网 IP 用于 ingress)。
  • 添加节点:uc machine add root@ip2,自动加入 mesh,验证:uc machine ls 显示状态。
  • 网络阈值:WireGuard MTU 1420,握手超时 5s,持久保持间隔 25s(wg-quick 默认)。

2. 应用部署参数

  • 运行命令:uc run --name web -p domain:80/https -p domain:443/https image:tag --replicas 1 --compose-file compose.yaml
  • 健康检查:HTTP 探针路径 /healthz,初始延迟 30s,间隔 10s,超时 5s,失败阈值 3 次(类似 K8s livenessProbe)。
  • 资源限制:CPU 2 cores,内存 4Gi(CLI 参数 --cpu 2000m --memory 4Gi),防止 OOM。
  • 持久卷:volumes: - /host/path:/container/path,跨机共享需 NFS 或 Longhorn 等。

3. 扩展与更新配置

  • 手动 scale:uc scale web 3,目标利用率 70%(观察 uc app ps)。
  • 自动 scale(未来特性):HPA-like,CPU >80% scale up,<20% scale down,min 1 max 10。
  • 滚动更新策略:uc deploy web new-image --max-unavailable 25% --max-surge 25%,逐步替换,确保流量 0 丢失。
  • Leader election 参数:选举超时 10s,心跳间隔 1s,多数派 quorum(奇数节点数,如 3/5/7)。

4. 监控与回滚要点

  • 内置指标:uc top 显示 CPU / 内存 / 网络,集成 Prometheus:暴露 /metrics 端口。
  • 日志聚合:uc logs web,持久化到 Loki 或 ELK。
  • 告警阈值:Pod 重启 >5 次 / 小时,网络丢包 >1%,scale 延迟 >30s。
  • 回滚:uc rollback web --revision 1,保留 5 个历史版本。

风险控制:早期项目,生产前压力测试 1000 RPS;WireGuard 防火墙放行 UDP 51820;状态同步延迟监控 <1s。相比 Nomad 或 Docker Swarm,Uncloud 的优势在于零配置 HTTPS 和 Compose 兼容,缺点是生态尚浅。

实际案例:从本地 Compose 迁移,2 分钟内多云部署高可用 web app。参数调优后,单节点 500 RPS,多节点线性扩展。

资料来源:

(正文字数:1028)

查看归档