0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

So sánh Karpenter và Cluster Autoscaler vào năm 2025

Đăng vào 1 tháng trước

• 13 phút đọc

So sánh Karpenter và Cluster Autoscaler vào năm 2025

Mỗi vài năm, một dự án mới xuất hiện khiến hệ sinh thái Kubernetes phải suy nghĩ lại về mô hình vận hành. Vào năm 2018, tôi đã giúp một công ty quản lý một cụm ba trăm nút với Cluster Autoscaler (CA). Chỉ bằng cách sử dụng CA, công ty đã tiết kiệm được hàng nghìn đô la mỗi tháng bằng cách loại bỏ các nút không sử dụng.

CA đã giúp đỡ nhiều khách hàng, nhưng nó cũng gặp một số thách thức. Sau đó, vào năm 2021, Karpenter ra mắt — một giải pháp mới cho việc tự động mở rộng trong Kubernetes. Bất ngờ, CA không còn là sự lựa chọn duy nhất.

Nhìn lại hiện tại, cả hai dự án đều đủ trưởng thành để chạy lưu lượng sản xuất. Chúng giải quyết vấn đề mở rộng từ hai góc độ khác nhau. Trong khi CA tối ưu hóa trong các ràng buộc của các nhóm nút đã định nghĩa trước, Karpenter linh hoạt hơn và vẽ lại bức tranh trong mỗi chu kỳ lập lịch.

Với tất cả điều này trong tâm trí, hãy cùng chúng tôi tìm hiểu ý nghĩa thực tiễn của điều đó, nơi mà mỗi công cụ tỏa sáng, và cách DevZero lấp đầy những khoảng trống mà không công cụ mã nguồn mở nào cố gắng giải quyết.

Tự động mở rộng Pod ngang là nền tảng

Trước khi đi sâu vào việc Karpenter và Cluster Autoscaler phù hợp ở đâu, rất quan trọng để bạn hiểu nơi mà Horizontal Pod Autoscaler (HPA) vào cuộc, vì nó hoạt động song song với cả hai công cụ này.

HPA hoạt động ở cấp độ công việc, tự động điều chỉnh số lượng bản sao pod trong một triển khai, tập hợp bản sao hoặc tập hợp trạng thái dựa trên các chỉ số quan sát được như mức sử dụng CPU, mức sử dụng bộ nhớ, hoặc các chỉ số tùy chỉnh.

Tuy nhiên, HPA chỉ quản lý số lượng pods; nó không cấp phát các nút mới. Nếu không đủ dung lượng trong cụm của bạn để lập lịch các pod bổ sung mà HPA muốn tạo ra, các pod đó sẽ ở trạng thái "Đang chờ".

Đây là lúc tự động mở rộng cấp độ nút trở nên cần thiết. HPA tạo thêm pods, trong khi Cluster Autoscaler hoặc Karpenter phản ứng bằng cách cấp phát hạ tầng cơ sở để lưu trữ các pod đó. HPA xử lý việc mở rộng ứng dụng, trong khi các tự động mở rộng cấp nút xử lý việc mở rộng hạ tầng. Vậy, với điều đó trong tâm trí, hãy tiếp tục.

Cluster Autoscaler là gì và hoạt động như thế nào?

Cluster Autoscaler là một giải pháp tự động mở rộng cụm đã là câu trả lời mặc định cho quản lý đội ngũ nút kể từ năm 2016. Nó theo dõi các pod mà bộ lập lịch đánh dấu là không thể lập lịch, sau đó thay đổi kích thước nhóm nút cơ bản như một Nhóm Tự động mở rộng AWS, nhóm phiên bản quản lý GKE, bộ quy mô VM Azure, hoặc API nhà cung cấp đám mây thông thường để phù hợp với nhu cầu.

Thiết kế của CA cảm thấy bảo thủ theo cách tốt nhất có thể. Tại sao? Bởi vì nó:

  • Tin tưởng vào nhà cung cấp đám mây để biết loại phiên bản nào cần khởi chạy
  • Chỉ hoạt động bên trong các nhóm nút mà bạn mô tả trước
  • Chờ đợi thời gian chờ có thể cấu hình trước khi thu nhỏ
  • Có các điều chỉnh cho mọi trường hợp biên có thể tưởng tượng để điều chỉnh sự cân bằng giữa chi phí, hiệu suất và tính khả dụng

Sự thận trọng đó đã giữ cho nhiều công ty tồn tại qua các đợt tăng lưu lượng trong đại dịch, nhưng nó cũng cứng nhắc những giả định của ngày hôm qua: một nhóm nút là đồng nhất, các nút khởi chạy khá chậm, và giá bạn trả cho mỗi core có thể dự đoán được (nếu không sử dụng quá nhiều loại phiên bản khác nhau; chúng ta sẽ nói về điều này sau).

Karpenter là gì và hoạt động như thế nào?

Karpenter loại bỏ những giả định của CA. Thay vì kéo dài hoặc thu hẹp các nhóm, nó mở toàn bộ danh mục EC2 (hoặc nhà cung cấp dịch vụ tính toán nào khác) trong mỗi lần khởi chạy. Bộ điều khiển gom nhóm các Pods đang chờ, giải quyết các ràng buộc tập thể của chúng — như CPU, bộ nhớ, taints, phân bố topology và loại dung lượng — và thực hiện một cuộc gọi API duy nhất để lấy phiên bản rẻ nhất phù hợp. Khi nhóm được xử lý, Karpenter sẽ đánh giá lại cụm, loại bỏ các nút trống hoặc sử dụng không hết và kết thúc chúng thông qua logic hợp nhất của nó.

Điều này mang lại tốc độ và chi phí hợp lý. Các nút thường xuất hiện trong vòng 30 đến 45 giây và biến mất vài phút sau khi khối lượng công việc cuối cùng được xử lý. Kể từ khi phát hành, tôi đã thấy khách hàng nói rằng họ tiết kiệm được từ 25 đến 40 phần trăm chỉ từ việc phân bổ — và gấp đôi khi khả năng Spot được sử dụng.

Lợi ích của Cluster Autoscaler

Tôi không ở đây để vinh danh một người chiến thắng, nhưng tôi muốn nhấn mạnh một vài điểm về CA để cuối cùng giúp bạn tránh vội vàng chuyển sang Karpenter nếu bạn chưa sẵn sàng hoặc không cần ngay bây giờ.

Đầu tiên, hãy xem xét rằng — trong thực tế — CA có cách tiếp cận hạ tầng trước cho việc mở rộng, có nghĩa là bạn định nghĩa hạ tầng nút của mình từ trước và tự động mở rộng làm việc trong các ranh giới đã định nghĩa trước đó. Cách tiếp cận này cung cấp một số lợi thế rõ ràng:

  • Kiểm soát chi tiết đối với hành vi mở rộng: CA cung cấp nhiều tùy chọn cấu hình cho phép bạn tinh chỉnh chính xác cách quyết định mở rộng được thực hiện. Bạn có thể đặt các bộ đếm thời gian giảm quy mô khác nhau cho các nhóm nút khác nhau, cấu hình các loại ước lượng để tối ưu hóa cho phân bổ hoặc chiến lược tiết kiệm tối thiểu, và sử dụng các chính sách mở rộng để kiểm soát nhóm nút nào sẽ mở rộng trước trong các khoảng thời gian cao điểm (hoặc kết hợp các phiên bản theo yêu cầu với các phiên bản Spot). Mức độ kiểm soát này đặc biệt có giá trị cho những ai có quy trình quản lý thay đổi nghiêm ngặt.
  • Độ tin cậy đã được kiểm chứng: Hãy thẳng thắn: Với việc đã hoạt động trong sản xuất từ năm 2016, CA đã gặp và giải quyết vô số trường hợp biên. Cách tiếp cận bảo thủ của nó đối với việc mở rộng — tức là, chờ đợi các khoảng thời gian chờ có thể cấu hình trước khi đưa ra quyết định — ngăn chặn sự biến động có thể xảy ra khi mở rộng quá mức.
  • Tương thích đa đám mây: Thiết kế hạ tầng trước của CA khiến nó tương thích tự nhiên với bất kỳ nhà cung cấp đám mây nào hỗ trợ nhóm nút hoặc nhóm tự động mở rộng. Dù bạn đang chạy trên AWS, GCP, Azure, hoặc thậm chí trên các phân phối Kubernetes tại chỗ, CA có thể quản lý nhu cầu mở rộng của bạn bằng cách sử dụng cùng một trừu tượng nhóm nút quen thuộc.
  • Thực thi ngân sách tài nguyên: Bằng cách định nghĩa các nhóm nút với kích thước tối thiểu và tối đa cụ thể, CA cung cấp các giới hạn cứng trên mức tiêu thụ tài nguyên. Điều này giúp dễ dàng thực thi các ràng buộc ngân sách hoặc dự trữ dung lượng để tiếp cận giá máy tính tốt hơn. Nó cũng ngăn chặn các tình huống mở rộng không kiểm soát có thể dẫn đến hóa đơn đám mây bất ngờ.

Bây giờ, hãy chuyển sự chú ý của chúng ta sang Karpenter để xem nó tỏa sáng ở đâu và để hiểu rõ hơn về cách mà nó khác với CA.

Lợi ích của Karpenter

Karpenter lấy một cách tiếp cận ứng dụng đầu tiên, nơi các ràng buộc công việc điều khiển các quyết định hạ tầng thay vì ngược lại. Sự thay đổi cơ bản trong triết lý này mở ra một số khả năng mạnh mẽ:

  • Lựa chọn hạ tầng động: Thay vì bị ràng buộc bởi các nhóm nút đã định nghĩa trước, Karpenter đánh giá yêu cầu tài nguyên của từng pod, bộ chọn nút, quy tắc tương đồng, và các ràng buộc phân bố, sau đó chọn các loại phiên bản ứng viên từ toàn bộ danh mục đám mây. Khi một pod yêu cầu 4 vCPUs và 8GB bộ nhớ, Karpenter có thể cấp phát một phiên bản c5.xlarge, m5.xlarge, hoặc thậm chí một phiên bản m6i.xlarge — tùy thuộc vào giá cả và tính khả dụng — mà không cần yêu cầu các nhóm nút riêng biệt cho mỗi khả năng.
  • Tích hợp với bộ lập lịch: Karpenter hoạt động song song với bộ lập lịch Kubernetes, nhận các pod không thể lập lịch và sử dụng cùng một logic giải quyết ràng buộc để xác định các nút cần cấp phát (không chỉ số lượng như CA). Sự tích hợp chặt chẽ này có nghĩa là Karpenter hiểu không chỉ các yêu cầu tài nguyên mà còn cả các ràng buộc lập lịch phức tạp như quy tắc chống tương đồng cho pod, các ràng buộc phân bố topology, và yêu cầu tương đồng của volume, dẫn đến việc khởi chạy các nút hiệu quả. Vì vậy, thay vì mở rộng từng nhóm nút một cách độc lập, Karpenter có thể cấp phát một nút đa dạng duy nhất phù hợp với nhiều loại công việc khác nhau, dẫn đến hiệu quả tổng thể cao hơn cho cụm.
  • Tối ưu hóa theo thời gian thực: Bởi vì Karpenter không phụ thuộc vào các nhóm nút đã được cấp phát trước, nó có thể xem xét lại các nút dựa trên tài nguyên đã được cấp. Nó mô phỏng điều gì sẽ xảy ra nếu các pod bị đuổi để tìm ra liệu các loại phiên bản tốt hơn có thể được khởi chạy hay không. Nói cách khác, nó có thể khởi chạy các nút nhỏ hơn hoặc rẻ hơn hoặc loại bỏ các nút trống bằng cách hợp nhất các khối lượng công việc vào các phiên bản tiết kiệm chi phí hơn khi các điều kiện thay đổi. Karpenter liên tục đánh giá liệu các nút hiện có được sử dụng tối ưu hay không và có thể tự động hợp nhất các khối lượng công việc vào ít nút hơn, hiệu quả hơn.
  • Mô hình vận hành đơn giản hóa: Cách tiếp cận ứng dụng đầu tiên có nghĩa là các nhà phát triển tập trung vào việc định nghĩa yêu cầu công việc của họ trong các thông số pod, trong khi Karpenter xử lý việc chuyển đổi sang hạ tầng. Các nhóm không cần hiểu rõ các vấn đề phức tạp của quản lý nhóm nút; họ chỉ cần chỉ định CPU, bộ nhớ, và các ràng buộc lập lịch, và Karpenter cấp phát các nút phù hợp.

Điểm khác biệt cốt lõi nằm ở mô hình tư duy: CA hỏi, "Tôi muốn quản lý hạ tầng nào?" trong khi Karpenter hỏi, "Các ứng dụng của tôi cần gì?" Sự khác biệt này khiến CA lý tưởng cho các tổ chức ưu tiên kiểm soát hạ tầng và (một số) tính dự đoán, trong khi Karpenter xuất sắc trong các môi trường mà sự linh hoạt của ứng dụng và tối ưu hóa chi phí là rất quan trọng.

DevZero phù hợp ở đâu trong bối cảnh tự động mở rộng

Cho đến nay, chúng ta đã xem xét cách Karpenter và CA tiếp cận thách thức mở rộng các cụm Kubernetes. Nhưng nếu những thách thức mở rộng của bạn vượt xa việc chỉ mở rộng nút hoặc pod? Đó là nơi DevZero xuất hiện, cung cấp một cách tiếp cận rộng hơn, linh hoạt hơn cho việc phối hợp tài nguyên.

DevZero không chỉ phản ứng với nhu cầu công việc; nó phối hợp tài nguyên trên toàn bộ stack của bạn, giúp có thể mở rộng ở cấp cụm, nút và khối lượng công việc. Ví dụ, DevZero sử dụng học máy để dự đoán nhu cầu công việc trong tương lai, từ đó điều chỉnh động CPU, bộ nhớ, và thậm chí cả phân bổ GPU cho từng container mà không cần khởi động lại. Các ứng dụng của bạn nhận được chính xác những gì chúng cần, khi chúng cần, trong thời gian thực. Khác với việc mở rộng truyền thống, khi các khối lượng công việc được di chuyển giữa các nút, DevZero sử dụng công nghệ để chụp lại các tiến trình đang chạy, giữ nguyên trạng thái bộ nhớ, kết nối TCP, và trạng thái hệ thống tệp.

Điều thực sự khiến DevZero nổi bật là khả năng hỗ trợ đa đám mây và thông tin về chi phí. Bạn không bị ràng buộc với một nhà cung cấp đám mây duy nhất; DevZero phối hợp môi trường trên AWS, Azure, GCP, và các cụm tại chỗ — tất cả từ một nền tảng duy nhất.

Kết luận

Karpenter và CA đều cung cấp lời hứa về việc mở rộng tự động hiệu quả cho các cụm Kubernetes, nhưng chúng tiếp cận vấn đề từ những góc độ cơ bản khác nhau.

CA là lựa chọn tốt nếu bạn đánh giá cao hạ tầng có thể dự đoán, kiểm soát chi tiết và khả năng tương thích đa đám mây. Mô hình hạ tầng đầu tiên của nó hoạt động tốt cho các tổ chức có yêu cầu nghiêm ngặt về loại nút và quản lý thay đổi.

Karpenter, ngược lại, được xây dựng cho các nhóm muốn di chuyển nhanh và để nhu cầu ứng dụng điều khiển các quyết định hạ tầng. Cách tiếp cận ứng dụng đầu tiên của nó có nghĩa là ít cấu hình trước, nhiều linh hoạt hơn, và khả năng tối ưu hóa chi phí và hiệu suất theo thời gian thực.

DevZero ngồi trên cả hai, phối hợp tài nguyên ở cấp cụm, nút và khối lượng công việc. Nó mang lại hỗ trợ đa đám mây và di chuyển trực tiếp, cho phép các nhóm chuyển đổi khối lượng công việc giữa các môi trường một cách liền mạch.

Cuối cùng, công cụ tốt nhất phụ thuộc vào ưu tiên của bạn: kiểm soát và tính dự đoán, linh hoạt và hiệu quả, hay phối hợp và tính minh bạch rộng rãi.

Bảng so sánh

Tiêu chí Cluster Autoscaler Karpenter
Cách tiếp cận Hạ tầng trước Ứng dụng trước
Quản lý nhóm nút Không
Tốc độ khởi chạy nút Chậm Nhanh (30-45 giây)
Tính linh hoạt Thấp Cao
Khả năng tối ưu hóa chi phí Thấp Cao
Tương thích đa đám mây
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào