Hướng dẫn phê phán về Kubernetes
- Kubernetes đã có danh tiếng là phức tạp một cách không cần thiết và tốn thời gian trong một bộ phận kỹ sư, và việc dùng nó trong các nhóm nhỏ thường bị xem là thiết kế quá mức.
- Tại Jamsocket, sau vài năm vận hành Kubernetes trong môi trường production, họ đã tìm ra cách sử dụng hiệu quả bằng cách chỉ dùng những tính năng cần thiết và bỏ qua phần còn lại.
Vì sao dùng Kubernetes
- Kubernetes là con đường đã được kiểm chứng nhất khi bạn đồng thời muốn cả ba điều sau:
- Muốn chạy nhiều tiến trình/máy chủ/tác vụ theo lịch.
- Muốn chạy chúng theo dạng dự phòng và phân tán tải.
- Muốn cấu hình và mô tả mối quan hệ giữa chúng bằng code.
- Kubernetes là một lớp trừu tượng cho phép đối xử với một cụm máy tính như một máy tính không đầu mối duy nhất.
- Jamsocket triển khai nhiều lần mỗi ngày, và nếu sản phẩm của họ gặp sự cố thì sản phẩm của khách hàng cũng bị ảnh hưởng, nên việc triển khai cuốn chiếu giúp họ có đủ tự tin để triển khai thường xuyên.
Cách họ dùng Kubernetes
- Jamsocket là một dịch vụ tạo ra các tiến trình động có thể giao tiếp với ứng dụng web, tương tự AWS Lambda nhưng vòng đời tiến trình không phụ thuộc vào một lượt request/response duy nhất mà phụ thuộc vào kết nối WebSocket.
- Kubernetes được dùng để vận hành các tiến trình chạy dài hạn như API server, container registry, controller, bộ thu thập log, một số dịch vụ DNS và thu thập metric.
- Những thứ họ không dùng Kubernetes cho: tiến trình tạm thời, site tĩnh/site marketing, và những thứ trực tiếp lưu trữ dữ liệu.
- Họ dùng Google Kubernetes Engine để ủy thác việc quản lý Kubernetes ra bên ngoài, và nếu cần thì việc chuyển sang Amazon EKS cũng tương đối đơn giản.
Các tài nguyên Kubernetes được dùng tích cực
- Deployments: phần lớn pod được tạo thông qua deployment.
- Services: dùng ClusterIP cho dịch vụ nội bộ và LoadBalancer cho dịch vụ bên ngoài.
- CronJobs: dùng cho các script dọn dẹp và tương tự.
- ConfigMaps và Secrets: dùng để truyền dữ liệu vào các tài nguyên ở trên.
Những thứ được dùng một cách thận trọng
- Họ có dùng StatefulSet và PersistentVolumeClaim, nhưng thích lưu dữ liệu quan trọng vào các dịch vụ được quản lý ở bên ngoài Kubernetes hơn.
- Họ tránh RBAC nhiều nhất có thể vì nó làm tăng độ phức tạp.
Những thứ chủ động tránh
- Viết YAML thủ công: họ dùng TypeScript và Pulumi để tạo ra định nghĩa tài nguyên Kubernetes.
- Tài nguyên phi tiêu chuẩn và operator: chúng cho phép phần mềm bên thứ ba sử dụng hạ tầng của Kubernetes, nhưng trên thực tế lại khó dùng.
- Helm: họ không dùng vì operator và các quy ước YAML.
- Mọi thứ có chữ "mesh" trong tên: họ cho rằng không cần thiết.
- Tài nguyên Ingress: họ tránh thêm các tầng gián tiếp không cần thiết.
- Sao chép toàn bộ stack k8s về local: họ dùng Docker Compose hoặc script riêng để chỉ khởi động phần hệ thống cần thiết.
Con người không nên phải chờ Pod
- Kubernetes được thiết kế với trọng tâm là độ bền vững và tính mô-đun hơn là thời gian khởi động container, nên không phù hợp với các trường hợp con người phải chờ pod khởi động.
- Jamsocket dùng Plane, một orchestrator viết bằng Rust theo giấy phép MIT, để lên lịch và chạy tiến trình nhanh cho các workload mang tính tương tác.
Trừu tượng hóa ở cấp cao hơn
- Một số lựa chọn thay thế Kubernetes rất tốt, đặc biệt hữu ích khi bạn không cần mô tả hạ tầng bằng code.
- Có thể chọn các giải pháp khác thay cho Kubernetes bằng cách dùng những dịch vụ như Railway, Render hoặc Flight Control.
- Nếu bạn quản lý cách tiếp cận Kubernetes một cách có hệ thống, sẽ không ai có thể nói là bạn bắt đầu quá sớm.
Ý kiến của GN⁺
- Kubernetes là công cụ mạnh mẽ cho quản lý độ phức tạp và tự động hóa, đặc biệt trong các hệ thống quy mô lớn, nhưng chính độ phức tạp đó có thể trở thành gánh nặng với các dự án nhỏ hoặc startup.
- Bài viết này đưa ra cách tránh sự phức tạp quá mức có thể phát sinh khi dùng Kubernetes, từ đó giúp người mới hoặc các nhóm nhỏ vẫn có thể tận dụng lợi ích của Kubernetes.
- Trước khi dùng Kubernetes, cần cân nhắc kỹ các tính năng thực sự cần thiết và năng lực kỹ thuật của đội ngũ để đánh giá lợi ích so với độ phức tạp và chi phí quản lý.
- Thay vì Kubernetes, việc dùng các dịch vụ đơn giản và dễ quản lý hơn có thể là lựa chọn tốt hơn. Ví dụ như Docker Swarm, Apache Mesos, Nomad, mỗi giải pháp đều có ưu và nhược điểm riêng.
- Khi áp dụng Kubernetes, cần xem xét việc tích hợp với hạ tầng hiện có, bảo mật, chi phí quản trị và đường cong học tập.
- Những lợi ích có được khi chọn Kubernetes là khả năng mở rộng, tính sẵn sàng cao và trải nghiệm triển khai nhất quán trên nhiều môi trường đám mây. Tuy nhiên, điều đó đòi hỏi phải hiểu về quản lý tài nguyên và orchestration cần thiết.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt bình luận thứ nhất:
stateless) vốn không phải là vấn đề lớn về bảo trì, nhưng việc truyền bá microservices lại tạo ra những vấn đề vốn trước đây không tồn tại.Tóm tắt bình luận thứ hai:
Tóm tắt bình luận thứ ba:
Tóm tắt bình luận thứ tư:
Tóm tắt bình luận thứ năm:
Tóm tắt bình luận thứ sáu:
Tóm tắt bình luận thứ bảy:
Tóm tắt bình luận thứ tám:
Tóm tắt bình luận thứ chín:
Tóm tắt bình luận thứ mười: