23 điểm bởi GN⁺ 2025-12-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • Uncloud là công cụ mã nguồn mở cho phép triển khai và mở rộng các ứng dụng web được đóng gói bằng container trên nhiều máy chủ mà không cần Kubernetes
  • Vẫn giữ quy trình làm việc dựa trên Docker Compose, đồng thời hỗ trợ triển khai không gián đoạn, HTTPS tự động và mở rộng trên nhiều máy chủ
  • Không có control plane trung tâm, mỗi máy được kết nối bằng mạng P2P dựa trên WireGuard, nên cụm vẫn tiếp tục hoạt động ngay cả khi một số máy chủ ngoại tuyến
  • Bao gồm HTTPS tự động thông qua reverse proxy Caddy, service discovery dựa trên DNS tích hợp và chức năng cân bằng tải
  • Có thể triển khai theo cùng một cách ngay cả trong môi trường lai cloud và on-premise, giúp đảm bảo quyền kiểm soát hạ tầng và khả năng dự đoán chi phí

Quy trình làm việc kiểu PaaS

  • Mang lại trải nghiệm triển khai đơn giản như Heroku hay Fly.io nhưng vẫn giữ toàn quyền kiểm soát với máy chủ và dữ liệu
    • Cấu trúc chi phí có thể dự đoán thay vì tính phí theo từng request
    • Không bị khóa vào nhà cung cấp, có thể debug bằng các công cụ SSH tiêu chuẩn
  • Cấu trúc thân thiện với Docker Compose, cho phép build, push và deploy chỉ với một lệnh
    • Không cần image registry, hỗ trợ triển khai rolling không gián đoạn
    • Có thể mở rộng bằng bản sao trên nhiều máy

Thiết kế ít cần bảo trì

  • Không cần control plane hay quản lý quorum, giảm thiểu độ phức tạp trong quản trị
  • Hỗ trợ giao tiếp an toàn giữa các máy mà không cần mở cổng
  • Tích hợp sẵn service discovery tự độngtự động cấp HTTPS dựa trên Let's Encrypt

Cách hoạt động

  • Thay vì một cụm phức tạp, hệ thống được cấu thành từ mạng lưới máy đơn giản, cung cấp hạ tầng ổn định mà không tăng gánh nặng bảo trì
  • Mỗi máy tham gia vào mạng mesh WireGuard, tự động phát hiện peer và thực hiện NAT traversal
    • Container nhận IP riêng để có thể giao tiếp trực tiếp giữa các máy chủ
  • Kiến trúc phân tán hoàn toàn, không có nút điều khiển trung tâm, mỗi máy sẽ đồng bộ trạng thái cụm
    • Cụm vẫn tiếp tục vận hành ngay cả khi một số máy ngoại tuyến
  • Điều khiển toàn bộ hạ tầng bằng CLI tương tự Docker
    • Chỉ cần quyền truy cập SSH vào một máy là có thể triển khai, giám sát và mở rộng

Tính năng chính

  • Có thể triển khai ở bất cứ đâu: hỗ trợ mọi máy Linux như cloud VM, máy chủ chuyên dụng, on-premise
  • HTTPS tự động: reverse proxy Caddy tích hợp cho phép cấp chứng chỉ TLS không cần cấu hình và kích hoạt HTTPS
  • Cân bằng tải: phân phối lưu lượng giữa các bản sao container được phân tán trên nhiều máy
  • Service discovery: DNS tích hợp tự động theo dõi vị trí dịch vụ trong mạng
  • Infrastructure as Code: có thể định nghĩa toàn bộ stack ứng dụng bằng file Docker Compose hiện có
  • Không bị khóa vào nhà cung cấp: có thể tự do kết hợp cloud và phần cứng riêng

1 bình luận

 
GN⁺ 2025-12-06
Ý kiến trên Hacker News
  • Xin chào, mình là tác giả. Cảm ơn vì đã chia sẻ
    Uncloud là một container orchestrator không có control plane. Nói đơn giản, nó giống như Docker Compose chạy trên nhiều máy, kèm mesh WireGuard tự động, service discovery và HTTPS thông qua Caddy. Mỗi máy dùng Corrosion của Fly.io để đồng bộ p2p trạng thái cụm, nên không cần duy trì quorum
    Sau khi từng vận hành Kubernetes ở cả startup lẫn công ty kỳ lân, mình nhận ra rằng phần lớn đội ngũ thực ra chỉ cần chạy container ổn định trên vài máy, cùng networking, rollout và HTTPS. So với nhu cầu đó, overhead vận hành của K8s là quá lớn
    Các đặc điểm chính như sau

    • Dùng đặc tả Docker Compose quen thuộc, không cần học DSL mới
    • Build và push Docker image trực tiếp lên máy mà không cần registry bên ngoài (dùng dự án khác của mình là unregistry)
    • Cung cấp CLI mệnh lệnh thay vì kiểu khai báo, nên dễ debug hơn
    • Có thể kết nối cloud VM, bare metal, cho đến Raspberry Pi nằm sau NAT
    • Dùng dưới 150MB bộ nhớ
      Liên kết dự án: https://github.com/psviderski/uncloud
      • K8s vốn đã có thể chạy container tốt ngay cả trong môi trường nhỏ, nên tôi không nghĩ có lý do gì phải dùng thứ khác. Các bản phân phối nhẹ như k3s cũng đã giúp việc triển khai dễ hơn, nên tôi không cảm thấy cần giải pháp thay thế
      • Ý tưởng rất hay, nhưng việc uc machine init bên trong lại chạy curl | bash với quyền root trông rủi ro về bảo mật. Tôi muốn thử, nhưng có lẽ sẽ không chạy nó trên máy thật
      • Thật sự rất thú vị. Có vẻ tôi sẽ sớm có dịp thử. Tuy nhiên, dù đã xem tài liệu, tôi vẫn chưa thấy rõ cách onboarding thêm kỹ sư khác sau khi thiết lập cụm, hoặc cách triển khai từ runner CI/CD. Tôi muốn biết quy trình kết nối một máy mới vào cụm hiện có
      • Tôi muốn biết nó khác Kamal ở điểm nào
      • Tôi muốn biết cách tạo kết nối bảo mật đến các dịch vụ bên ngoài như AWS RDS từ trong mạng riêng chạy trên WireGuard. Không rõ có hỗ trợ kiểu cách Tailscale truy cập AWS RDS hay không
  • Tôi đã dành phần lớn sự nghiệp của mình cho Kubernetes, nên tôi tò mò lợi ích của kiến trúc không có control plane là gì. Với tôi, control plane mới chính là chức năng cốt lõi của K8s.
    Cỡ vài trăm node, hàng chục nghìn container thì cluster managed có thể tự cập nhật nên cũng không phải gánh nặng lớn. Tôi tự hỏi liệu nỗi đau mà mọi người gặp phải khi tự host K8s có phải là bối cảnh dẫn đến những giải pháp thay thế kiểu này không

    • “Vài trăm node, mười nghìn container” nghe không hề nhỏ. Tôi đang ở quy mô 2~5 node, 10~30 container, và ở mức đó thì K8s quá nặng. Có lẽ rất nhiều công ty nhỏ cũng như vậy
    • Đây không phải câu hỏi bất lịch sự. Ưu điểm của việc không có control plane là mọi máy được đơn giản hóa thành cấu trúc peer ngang hàng. Không có “bộ não cụm” tập trung, nên không cần lo cấu hình HA hay các vấn đề quorum của etcd.
      Ngay cả khi mạng bị phân đoạn, từng phân vùng vẫn có thể hoạt động độc lập. Nó giống sự đơn giản của thời Chef hay Ansible trước đây, nhưng có thêm những bài học rút ra từ K8s
    • Tất nhiên là có người thử tự host K8s. Nó giống như backup vậy, nếu không tập làm trước thì đến lúc cần sẽ không làm được
    • Từ góc nhìn doanh nghiệp vừa và nhỏ, mười nghìn container hoàn toàn không nhỏ. Tôi có chưa đến 10 container nhưng vẫn cần HA. Uncloud có vẻ rất hợp với trường hợp của tôi
    • “Mười nghìn container mà là nhỏ á, đó không phải số liệu của job CI sao? ;)”
  • Dự án rất hay. Sau này tôi nhất định sẽ dùng thử.
    Nếu muốn một giải pháp thay thế đơn giản hơn, Kamal cũng khá ổn. Đây là công cụ đã được kiểm chứng thực tế bởi chính công ty vận hành nó, hoàn toàn rời xa K8s và cloud

  • Tôi muốn biết liệu có tính năng tự động hardening máy chủ khi chỉ định server hay không

  • Tôi là người dùng Docker Swarm. Uncloud là giải pháp thay thế đầu tiên khiến tôi thấy hứng thú
    Tôi có những câu hỏi sau

    • Có kế hoạch hỗ trợ secrets không
    • Có thể định nghĩa quy tắc URL rewrite bằng label của container như Swarm+Traefik không
    • Nếu triển khai hai Compose stack, container giữa các stack khác nhau có thể truy cập mạng của nhau không
    • Ánh xạ domain và cổng nội bộ được định nghĩa trong file Compose bằng x-ports: app.example.com:8000/https.
      Hoặc có thể tùy biến cấu hình Caddy bằng x-caddy: Caddyfile. Xem chi tiết trong tài liệu chính thức
      Hiện tại chưa có tính năng cô lập mạng giữa các stack. Thảo luận liên quan đang diễn ra tại GitHub Discussion #94.
      Tôi muốn biết bạn kỳ vọng hành vi như thế nào
    • Tính năng secrets đang được theo dõi tại issue #75. Hiện có thể inject bằng Compose config nhưng vẫn chưa có lưu trữ mã hóa.
      Câu trả lời cho câu 2 và 3 là “chưa” và “hiện tại là có”. Xem thêm thảo luận tại Discussion #94
      Với tư cách là người từng dùng Swarm, tôi muốn biết những điểm Swarm còn thiếu hoặc gây bất tiện mà Uncloud có thể cải thiện là gì
  • Đây là một dự án thật sự ấn tượng. Cũng đáng tham khảo thêm một số công cụ khác có chủ đề tương tự

    • Dokploy
    • Coolify
    • Kubero
      Nếu bạn biết thêm thì mong bạn bổ sung
    • Danh sách self-hosted PaaS khá hữu ích.
      Gần đây tôi đã thử Coolify nhưng thấy nó hơi chưa hoàn thiện. Hiện tôi đang dùng Dokku, nhưng giá mà UI quản lý DB tốt hơn thì hay
  • Tôi hài lòng với k3s, nhưng rất vui khi thấy những thử nghiệm mới trong vùng trung gian giữa Docker Compose và K8s đầy đủ. Đặc biệt phần tích hợp WireGuard rất thú vị

  • Công cụ thực sự rất tuyệt. Cảm ơn vì công sức của bạn.
    Tôi muốn biết sao chép trạng thái ở backend hoạt động như thế nào. Có nhắc đến CRDT và giao thức gossip, nhưng cách triển khai cụ thể vẫn chưa rõ

    • Hiện tại việc sao chép trạng thái dựa trên Corrosion
  • Nếu không dùng K8s thì tại sao lại không dùng Nomad?

    • Nomad cũng tốt, nhưng vẫn có control plane
    • Nomad có đường cong học khá dốc. Trong khi đó, Uncloud gần như có thể dùng ngay với bất kỳ ai đã biết Docker và Compose
    • Giấy phép của HashiCorp cấm cung cấp dưới dạng SaaS sau khi chỉnh sửa.
      Tức là ngoài việc tự host thì khả năng tận dụng bị hạn chế, và trên thực tế là không thể tự do dịch vụ hóa. Xem toàn văn giấy phép
  • Nhân tiện, xin chia sẻ hai thành phần p2p thú vị