Chuyển đến nội dung chính
DevOps

Docker Swarm hay Kubernetes — chọn thế nào

Cả hai giải cùng một bài toán. Câu hỏi không phải cái nào mạnh hơn, mà là đội của bạn gánh được cái nào — và bạn có định tự vận hành cụm hay không.

Docker Swarm hay Kubernetes — chọn thế nào

Bài này là đánh giá, không phải số đo. Các bài khác của kênh chỉ đưa con số đo được và kèm mã chạy lại được. Bài này dựa trên cách hai hệ thống được thiết kế và được dùng — không có phép đo nào trên máy tôi. Nếu bạn cần số hiệu năng, hãy tự đo trên chính khối lượng công việc của mình; số của người khác không thay được.

Docker Swarm và Kubernetes giải cùng một bài toán. Nên câu hỏi "cái nào mạnh hơn" gần như luôn dẫn tới câu trả lời vô dụng. Câu hỏi dùng được là: đội của bạn gánh được cái nào.

Xem bản video

Bản video 3:07, có sơ đồ động: một máy chết rồi container tự nhảy sang máy khác, và hai cây đối tượng đặt cạnh nhau.

Cả hai đều trả lời bốn câu này

Bạn có nhiều máy và nhiều container. Ai đó phải quyết:

Câu hỏiViệc phải làm
Container nào chạy ở máy nào?xếp việc lên cụm
Máy chết thì sao?dựng lại chỗ khác, tự động
Dịch vụ tìm nhau kiểu gì?tên nội bộ, cân tải
Đổi phiên bản mà không tắt?cập nhật cuốn chiếu, quay lui được

Máy chết thì container đi đâu

Cả Swarm lẫn Kubernetes đều làm được cả bốn. Khác nhau không nằm ở chỗ làm được gì — nó nằm ở cái giá phải trả để có chúng.

Khác nhau căn bản: một chế độ, và một nền tảng

Đây là chỗ quyết định mọi thứ phía sau, và nó không phải danh sách tính năng.

Docker Swarm là một chế độ có sẵn trong Docker Engine. docker swarm init là xong; không cài thêm thành phần nào. File cấu hình vẫn là compose bạn viết hàng ngày, thêm khối deploy:

services:
  web:
    image: app:1.2
    deploy:
      replicas: 3

Kubernetes là một nền tảng có API mở rộng được. Bạn không chỉ dùng các loại tài nguyên có sẵn — bạn định nghĩa loại mới rồi viết controller cho nó:

Một chế độ so với một nền tảng

Một bên là tính năng của công cụ bạn đã dùng. Bên kia là nền tảng bạn xây lên trên.

Swarm được gì

Ít thứ phải học. Về cơ bản chỉ có service, stack và mạng overlay. Người vừa biết Docker đọc hiểu cấu hình ngay, không phải học một từ vựng mới.

Đổi lại: bạn tự vận hành cụm. Không có nhà cung cấp lớn nào chạy control plane Swarm hộ bạn như cách họ làm với Kubernetes.

Swarm mất gì — và đây là phần quan trọng

Cập nhật cuốn chiếu, tự dựng lại khi máy chết, cân tải nội bộ — Swarm làm được hết. Chuyện không nằm ở đó.

Chỗ hụt là hệ sinh thái. Phần lớn công cụ hạ tầng ngày nay viết cho Kubernetes trước: service mesh, chính sách bảo mật, autoscaler, GitOps, operator cho cơ sở dữ liệu. Nhiều thứ không có bản cho Swarm, và số còn lại thì tài liệu mỏng.

Đây là rủi ro về đà, không phải rủi ro kỹ thuật — công cụ, tài liệu, câu hỏi trên diễn đàn, và người biết việc. Và theo tôi nó là loại rủi ro nặng hơn, vì nó không hiện ra trong bản demo; nó hiện ra sau mười tám tháng khi bạn cần một thứ mà cả thế giới đã có sẵn cho K8s.

Kubernetes được gì

Chỗ để mở rộng. Khai báo loại tài nguyên mới rồi viết controller — cơ sở dữ liệu, chứng chỉ, hàng đợi, tất cả nói cùng một ngôn ngữ khai báo với phần còn lại của hạ tầng.

Một chuẩn chung. Nhà cung cấp nào cũng có bản dịch vụ quản lý, công cụ nào cũng hỗ trợ, người biết việc dễ tuyển hơn hẳn. Lợi thế này cộng dồn theo thời gian: càng nhiều thứ nói cùng ngôn ngữ, càng ít thứ bạn phải tự viết.

Kubernetes mất gì

Sự đơn giản. Cùng một dịch vụ nhỏ, đặt hai cây cạnh nhau:

Cùng một dịch vụ nhỏ, hai cây đối tượng

Nhiều nút vặn nghĩa là nhiều chỗ vặn sai. Theo kinh nghiệm của tôi, phần lớn sự cố trên Kubernetes đến từ cấu hình chứ không từ mã ứng dụng — quyền RBAC thiếu, probe đặt sai, resource limit quá tay, network policy chặn nhầm.

Và nếu bạn tự dựng cụm chứ không dùng dịch vụ quản lý, còn phải có người trực: nâng cấp phiên bản, xoay chứng chỉ, chăm etcd.

Bảng quyết định

Đọc theo hàng:

Swarm hợp khiKubernetes hợp khi
Đội có người chuyên hạ tầng?khôngcó
Số dịch vụvài cáivài chục trở lên
Cần phân quyền chi tiết, tự mở rộng?khôngcó
Công cụ bạn cần chỉ có bản K8s?khôngcó
Ai vận hành cụm?chính bạnnhà cung cấp, hoặc đội riêng

Không hàng nào tự nó quyết. Nhưng nếu ba hàng trở lên nghiêng về một bên, đó là câu trả lời.

Điểm hay bị bỏ qua

Lợi thế lớn nhất của Swarm là ít phải vận hành.

Nhưng nếu bạn dùng Kubernetes dạng dịch vụ quản lý, phần vận hành nặng nhất — control plane, nâng cấp, etcd — đã có người khác gánh. Và khi đó lợi thế của Swarm teo lại rất nhiều, trong khi cái giá của nó (hệ sinh thái mỏng) thì vẫn còn nguyên.

Nên câu hỏi thật không phải "Swarm hay Kubernetes". Nó là:

Bạn có định tự vận hành cụm không?

Trả lời được câu đó thì hai lựa chọn kia gần như tự sắp xếp.

Mang gì đi

  • Chọn theo đội, không theo bảng tính năng. Cả hai làm được những việc cơ bản; thứ khác nhau là ai phải gánh phần vận hành và bạn có người đó không.
  • Rủi ro về đà là thật. Một hệ thống hoạt động tốt hôm nay vẫn có thể là lựa chọn tệ nếu ba năm nữa không còn công cụ và không tuyển được người.
  • Dịch vụ quản lý làm đổi cả bài toán. Trước khi so Swarm với Kubernetes, hãy quyết trước xem bạn có tự vận hành cụm hay không.
DUY TRAN
Tác giả

DUY TRAN

Pursuing an AI-first mindset and intelligent system architecture. I build solutions by combining technology, creativity, and the ability to see structure in chaos — the foundation for becoming a Solution Architect.

Bình luận

Bài viết liên quan

Circuit Breaker Pattern trong Spring Boot
DevOps

Circuit Breaker Pattern trong Spring Boot

Tìm hiểu Circuit Breaker Pattern trong Spring Boot với Resilience4j - từ nguyên lý hoạt động, cấu hình chi tiết, ví dụ thực tế đến best practices. Hướng dẫn đầy đủ giúp bạn xây dựng hệ thống microservices resilient, ngăn chặn cascading failures và tự động recovery khi service gặp sự cố.

Duy TranDuy Tran35 phút