Giới thiệu
Nếu các bạn đọc bài này thì chắc chắn các bạn đã biết về Kubernetes và có lẽ cũng đã sử dụng nó. Hiện tại thì nếu nói tới vấn đề về Container Orchestration thì chắc chắn thằng Kubernetes đang được sử dụng nhiều nhất và có lẽ là phổ biến nhất, có thể nói nó là top 1 trong mảng Container Orchestration.
Và chắc các bạn cũng biết là ta sẽ có rất nhiều công cụ khác có thể dùng để thay thế Kubernetes được, nhưng trong tất cả các công cụ mà có thể dùng để thay thế Kubernetes thì thằng mà mình thấy nó thật sự là có thể thay thế được Kubernetes trong vấn đề Container Orchestration là Nomad.
Vậy Nomad là gì?
Nomad
Nomad được phát hành bởi Hashicorp, là một công cụ phổ biến trong việc quản lý và điều phối Workload, một Workload có thể là Containerized hoặc Non-containerized.
Containerized là các ứng dụng được đóng gói thành container, ví dụ như đóng gói ứng dụng NodeJS thành Image bằng Docker và dùng Kubernetes để chạy Container đó.
Non-containerized là các ứng dụng chạy thẳng trên máy chủ của ta mà không cần phải được đóng gói thành container để chạy, ví dụ như thay vì đóng gói ứng dụng NodeJS thành Image thì ta có thể ssh
thẳng lên máy chủ, cài NodeJS lên máy chủ và chạy ứng dụng bằng pm2
.
Nomad quản lý cả hai loại Workload Containerized và Non-containerized. Kubernetes chỉ có thể quản lý Workload dạng Containerized.
Nếu bạn biết tới Hashicorp thì nó có một công cụ là Terrafrom, Terrafrom sử dụng Infrastructure-as-Code để mô tả và quản lý hạ tầng. Nomad cũng tương tự như vậy, nó cho phép ta dùng Infrastructure-as-Code để mô tả và quản lý ứng dụng. Nomad hỗ trợ trên cả ba hệ điều hành là macOS, Windows, và Linux.
Hiện nay Nomad được sử dụng bởi rất nhiều công ty lớn điển hình là PagerDuty, Target, Citadel, Trivago, SAP, Pandora, Roblox, eBay, Deluxe Entertainment.
Nomad vs Kubernetes
Vậy thì khi so sánh với Kubernetes, nó sẽ có những điểm mạnh và điểm yếu gì.
Độ đơn giản
Đầu tiên ta sẽ nói về độ đơn giản của hai thằng.
Kubernetes được thiết kế với 4 thành phần chính ở trong Control Plan là API Server, Etcd, Controller Manager, Scheduler. Với Etcd được dùng làm Storage để lưu trữ trạng thái của Cluster, API Server là thành phần trung tâm để giao tiếp với các thành phần khác, còn hai thành phần thực hiện công việc Container Orchestration là Controller Manager và Scheduler, nếu các bạn muốn hiểu về kiến trúc bên trong Kubernetes thì đọc bài này nha Kubernetes internals architecture. Kubernetes được thiết kế khá phức tạp và cần học nhiều mới có thể sử dụng được. Công việc cài đặt và triển khai một Kubernetes Cluster cũng không hề đơn giản.
So với Kubernetes thì cấu trúc của Nomad đơn giản hơn khá nhiều, nó chỉ là một tệp tin binary
, và không cần một dịch vụ bên ngoài nào cho việc lưu trữ cả. Không giống như Kubernetes, Nomad chỉ tập trung vào việc Manager và Scheduler Workload.
Hệ điều hành hỗ trợ
Vấn đề thứ hai là về các môi trường mà hai thằng hỗ trợ.
Kubernetes tập trung hỗ trợ cho Linux Containers, các OS khác như macOs và Windows thì chỉ phù hợp cho môi trường Dev.
Nomad thì không đặc biệt tập trung vào hỗ trợ Linux, các OS khác Nomad đều hỗ trợ tốt.
Quá trình triển khai
Vấn đề thứ ba là tính nhất quán khi ta cài đặt và triển khai.
Đối với Kubernetes, ta không thể xài cùng một công cụ để cài đặt cho môi trường phát triển ở dưới local
và môi trường Production được. Ví dụ thông thường khi ta triển khai môi trường phát triển ở dưới local
ta sẽ dùng minikube, k3s, … Còn khi cài môi trường Production ta sẽ xài kubeadm
, kops
, rancher
, …
Còn đối với Nomad, nó chỉ là một tệp tin binary
nên ta có thể xài cùng một công cụ để cài đặt cho cả môi trường Dev và môi trường Production.
Mở rộng
Vấn đề thứ 4, và là vấn đề mà mình thấy nó sẽ vượt trội so với Kubernetes là vấn đề về việc mở rộng.
Hiện tại khi mình viết bài này thì trong tài liệu của Kubernetes có nói là một Kubernetes Cluster chỉ hỗ trợ mở rộng tới 5,000 Node và 300,000 Container. Các bạn xem ở đây Kubernetes Documentation.
Còn thằng Nomad nó có thể mở rộng tới 10,000 Node và 2 triệu Container. Các bạn xem ở đây 2 million container challenge.
Đây là ưu điểm duy nhất mà mình thấy nó có thể so sánh với Kubernetes, còn về các vấn đề ở trên như tính dễ dàng, các hệ điều hành hỗ trợ, tính nhất quán khi cài đặt chỉ là phụ mà thôi.
Thằng Nomod có vẻ nó ngon như vậy, nhưng tại sao bây giờ mọi người vẫn sử dụng Kubernetes nhiều hơn?
Tại sao Nomad không thể thay thế Kubernetes
Tuy thằng Nomad nó hỗ trợ việc mở rộng tốt hơn và dễ học hơn, nhưng như mình nói ở trên thì thằng Nomad chỉ hỗ trợ về Manager và Scheduler Workload. Còn các vấn đề như Service Discovery, Secret Manager nó không có hỗ trợ. Mà để xây dựng được một giải pháp toàn diện thì ta phải sử dụng thêm hai thằng khác của Hashicorp nữa là Consul (Service Mesh), Vault (Secret Manager).
Với Nomad thì để xây dựng được một môi trường giải pháp toàn diện thì ta sẽ xài cả 4 thằng là Terrafrom + Nomad + Consul + Vault. Ta cần phải học thêm 2 thằng nữa là Consul + Vault, không đơn giản xíu nào 🤣, tuy nhiên nếu làm chủ được cả 4 thằng thì quá tuyệt vời.
Trong khi thằng Kubernetes thì nó hỗ trợ một giải pháp toàn diện sẵn cho ta, Manager và Scheduler Workload thì chắc chắn là có trong Kubernetes, vấn đề Service Discovery thì thằng Kubernetes hỗ trợ thông qua coredns
, chỉ cần học một thằng thì ta có thể làm việc được hầu hết toàn bộ mọi công việc, so với việc ta phải học cả 3 thằng Nomad + Consul + Vault.
Kết luận
Tuy thằng Nomad rất tuyệt nhưng ở thời điểm hiện tại nó khó có thể cạnh tranh được với Kubernetes, nhưng ai biết tương lai sẽ như thế nào nên mình nghĩ tốt nhất là học cả hai :)))
.
Tác giả @Quân Huỳnh
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?