Hotdry.
systems-engineering

Uncloud:轻量级多 Docker 主机编排

Uncloud 通过 WireGuard mesh 和去中心化状态同步,实现跨多 Docker 主机的容器部署管理,支持 Compose YAML、自动 HTTPS,桥接 K8s 原语而无集群开销。

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 字)

查看归档