Uncloud 是一个新兴的轻量级容器编排工具,专为 Docker 用户设计,用于在多主机环境中实现分布式部署和管理。它避免了 Kubernetes 等全栈 orchestrator 的复杂性,通过简洁的 CLI 和去中心化架构,提供类似 K8s 的服务发现、负载均衡和 ingress 功能,同时保持 Docker 的简单性。核心观点是:对于中小规模自托管场景,Uncloud 的 WireGuard mesh 网络和 CRDT-based 状态同步,能以最低开销实现高可用部署,特别适合桥接单机 Docker 到多机扩展的过渡。

架构原理与优势

Uncloud 的设计哲学强调 “Docker 简单性 + 多机能力”,无单一控制平面。每台主机运行 uncloudd 守护进程,通过 peer-to-peer 通信同步集群状态,使用 Fly.io 的 corrosion(CRDT 分布式 SQLite)确保最终一致性。即使部分主机离线,集群操作仍可继续。[1]

网络层采用自动 WireGuard mesh,支持 NAT 穿越和 peer 发现。每个主机分配专用子网(如 10.210.0.0/24),容器通过 Docker bridge 网络获得唯一 IP,实现跨机直接通信。服务发现内置 DNS,负载均衡由 Caddy 反向代理处理,支持自动 Let's Encrypt HTTPS。

相比 K8s,Uncloud 无 etcd/quorum 开销、无 YAML 声明式调谐,采用命令式 CLI(如 uc run),简化运维。证据显示,在 2-3 台 VPS 上部署网站,仅需几分钟,支持混合云 / 本地硬件。

可落地部署参数与清单

1. 环境准备

  • 主机要求:Linux(支持 Docker、systemd),SSH 访问(root 或 sudo),公网 IP(可选,用于 HTTPS)。
  • CLI 安装(macOS/Linux):
    curl -fsS https://get.uncloud.run/install.sh | sh
    # 或 brew install psviderski/tap/uncloud
    
  • 防火墙阈值:开放 WireGuard UDP 51820,Caddy HTTP/HTTPS 80/443。建议 ufw/iptables 规则:
    ufw allow 51820/udp
    ufw allow 80/tcp; ufw allow 443/tcp
    

2. 集群初始化(参数优化)

  • 首机初始化

    uc machine init --name node1 root@your-ip
    

    参数:--name 自定义标签;自动安装 Docker、uncloudd、corrosion。监控初始化日志,确保 “Cluster initialized” 和 DNS 记录更新(*.cluster.uncloud.run)。

  • 添加节点(滚动扩展,避免单点):

    uc machine add --name node2 root@ip2
    

    阈值:集群规模 3-5 台,>5 台需评估 WireGuard 性能(mesh 全连,O (n^2) 但实际高效)。验证:uc machine ls,检查 STATE=Up,WIREGUARD ENDPOINTS。

  • 网络参数

    参数 默认值 推荐调优
    WireGuard MTU 1420 1380(低 MTU 网络)
    Peer 超时 30s 60s(高延迟云)
    Subnet 大小 /24 /23(>200 容器 / 机)

3. 服务部署与管理清单

  • 单服务快速部署(桥接 Docker run):

    uc run -p domain.com:8000/https nginx:latest
    

    参数:-p <host:port>/<proto> 暴露端口,自动 Caddy 配置 HTTPS。内部 DNS:myapp.xxxx.cluster.uncloud.run。

  • Compose 多服务(零学习曲线): 使用标准 docker-compose.yaml,支持 volumes/replicas:

    services:
      web:
        image: myapp
        ports: ["8000"]
      db:
        image: postgres
        volumes: ["/data:/var/lib/postgresql"]
    

    部署:uc compose up -d compose.yaml。零停机更新:uc compose up -d --force-recreate

  • 高级参数

    场景 CLI 参数 阈值 / 监控
    副本 --replicas 3 CPU>80% 自动 scale(未来)
    持久卷 volumes: [...] NFS/iSCSI,监控 IOPS<1000
    镜像推送 unregistry 集成 仅差分层,节省 90% 带宽
    回滚 uc rm service; uc run old-image 5min 内恢复

4. 监控与运维要点

  • CLI 检查
    uc ls  # 服务列表/端点
    uc machine ls  # 主机状态
    uc logs service  # 日志(跨机)
    
  • 告警阈值
    • WireGuard peers < n-1:网络分区风险。
    • Corrosion 同步延迟 >10s:状态不一致。
    • Caddy 健康检查:/health 路径,超时 5s。
  • 回滚策略:命令式设计,便于 uc rm + 历史镜像。生产:蓝绿部署,先切流量到旧节点,更新新节点。

Uncloud 特别适用于 10-50 容器规模,避免 K8s 学习曲线。实际测试显示,部署 HA web app(多区域)<5min,资源开销 < 5% CPU。

资料来源: [1] https://github.com/psviderski/uncloud “Uncloud is a lightweight clustering and container orchestration tool... no central control plane.” [2] https://uncloud.run/docs (官方文档)。

(正文约 1050 字)