Cloud & hạ tầng

Volcano v1.16 bổ sung hàng đợi theo namespace và lập lịch phân chia công bằng

Volcano v1.16 giới thiệu NamespaceQueue để cô lập tenant, plugin fairshare để theo dõi mức sử dụng trong quá khứ, cùng các tối ưu hiệu năng cho khối lượng công việc batch lớn.

Minh họa cấu trúc hàng đợi phân cấp trên giá đỡ máy chủ
Minh họa được tạo riêng cho bài viết này

Được dịch tự động từ bản gốc tiếng Anh.

Cloud Native Computing Foundation đã phát hành Volcano v1.16.0, một bản cập nhật quan trọng cho trình lập lịch batch gốc Kubernetes. Phiên bản này giới thiệu các cơ chế mới để quản lý tài nguyên đa tenant, bao gồm hệ thống phân cấp hàng đợi theo phạm vi namespace và plugin lập lịch phân chia công bằng (fair-share). Nó cũng tách biệt việc khám phá topology khỏi lõi của trình lập lịch, cho phép tích hợp rộng rãi hơn với các hệ thống lập lịch khác.

Điều gì đã xảy ra

Volcano v1.16.0 tập trung vào việc cải thiện tính công bằng và khả năng mở rộng cho các cụm chạy khối lượng công việc batch hoặc AI nặng. Bản phát hành bổ sung hai tính năng chính cho quản trị tài nguyên: NamespaceQueue và plugin fairshare. NamespaceQueue cho phép các tenant tự quản lý các hàng đợi phân cấp và hạn ngạch (quota) của riêng họ trong các namespace cụ thể, thay vì chỉ phụ thuộc vào quản trị viên toàn cụm. Plugin fairshare đưa mức tiêu thụ tài nguyên trong quá khứ vào các quyết định lập lịch, đảm bảo rằng các nhóm sử dụng hàng đợi chung không độc quyền tài nguyên theo thời gian.

Bản cập nhật cũng mở rộng hệ sinh thái HyperNode bằng cách làm cho bộ điều khiển HyperNode có thể triển khai độc lập. Trước đây, việc sử dụng HyperNode để khám phá topology đòi hỏi phải chạy toàn bộ bộ công cụ lập lịch Volcano. Bây giờ, các nền tảng sử dụng các trình lập lịch khác nhau có thể chỉ triển khai bộ điều khiển HyperNode để quản lý các supernode và hệ thống phân cấp, đồng thời cung cấp dữ liệu này qua API cho các bên thứ ba sử dụng. Ngoài ra, bản phát hành còn bao gồm các cải tiến hiệu năng như Unschedulable Job Cache (Bộ nhớ đệm Job không thể lập lịch), giúp giảm bớt các kiểm tra lập lịch dư thừa cho những job hiện tại chưa thể chạy được.

Cách hoạt động

Tính năng NamespaceQueue mới căn chỉnh việc quản lý hàng đợi với ranh giới namespace của Kubernetes. Quản trị viên ủy quyền cho các namespace cụ thể gắn kết hệ thống phân cấp hàng đợi của họ vào một Queue cha ở cấp cụm. Trong phạm vi đó, các tenant có thể xác định các sub-queue riêng với các khả năng như tài nguyên được đảm bảo và giới hạn có thể thu hồi. Sự tách biệt này cho phép các nhóm tự quản lý việc phân bổ tài nguyên nội bộ mà không cần đặc quyền cluster-admin cho mỗi lần thay đổi. Hệ thống đảm bảo rằng các namespace khác nhau có thể sử dụng tên hàng đợi giống nhau mà không gây xung đột, vì danh tính được giới hạn trong phạm vi namespace.

Tính công bằng giữa các hàng đợi chung được xử lý bởi plugin fairshare mới, lấy cảm hứng từ phương pháp lập lịch phân chia công bằng của Slurm. Thay vì chỉ xem xét mức phân bổ hiện tại, plugin này theo dõi tổng số giây-tài nguyên (resource-seconds) lũy kế cho mỗi namespace. Nó áp dụng sự suy giảm hàm mũ cho lịch sử này, với chu kỳ bán rã mặc định là bốn giờ. Các namespace có mức tiêu thụ gần đây thấp hơn sẽ được ưu tiên khi cạnh tranh tài nguyên. Điều này ngăn chặn một nhóm đơn lẻ thống trị hàng đợi chung bằng cách liên tục gửi job, vì trọng số sử dụng trong quá khứ của họ tăng lên và cuối cùng làm giảm mức ưu tiên cho đến khi mức sử dụng của họ suy giảm.

Các cải tiến hiệu năng tập trung vào Unschedulable Job Cache. Khi một job thất bại trong việc lập lịch do hàng đợi đầy hoặc thiếu tài nguyên, trước đây trình lập lịch sẽ đánh giá lại nó trong mọi chu kỳ. Bộ nhớ đệm mới ghi nhận lý do cụ thể khiến job bị từ chối và bỏ qua việc đánh giá lại cho đến khi một sự kiện liên quan xảy ra, chẳng hạn như thay đổi nhãn node hoặc giải phóng tài nguyên. Một bộ đếm thời gian giám sát (watchdog timer) đảm bảo rằng các job đã được lưu vào cache sẽ được thử lại định kỳ, ngăn chúng bị kẹt vô thời hạn nếu các gợi ý sự kiện thất bại. Điều này giảm tải CPU trong các cụm có lượng job chờ tồn đọng lớn.

Chi tiết chính

  • NamespaceQueue: Cho phép các tenant quản lý hàng đợi phân cấp và quota trong các namespace được ủy quyền, tách biệt việc ủy quyền pool tài nguyên khỏi việc quản lý hàng ngày của tenant.
  • Plugin Fairshare: Theo dõi mức tiêu thụ tài nguyên trong quá khứ cho mỗi namespace với sự suy giảm hàm mũ (chu kỳ bán rã mặc định bốn giờ) để cải thiện tính công bằng dài hạn trong các hàng đợi chung.
  • Unschedulable Job Cache: Lưu trữ lý do từ chối cho các job đang chờ và bỏ qua các kiểm tra dư thừa cho đến khi các sự kiện kích hoạt xảy ra, giúp giảm tải cho trình lập lịch.
  • Bộ điều khiển HyperNode độc lập: Có thể được triển khai độc lập với trình lập lịch Volcano, cho phép các hệ thống lập lịch khác sử dụng khả năng khám phá topology và quản lý supernode của Volcano.
  • Anti-affinity topology cho PodGroup: Các quy tắc mới cho phép các bản sao suy luận (inference replicas) phân tán trên các supernode khác nhau, giảm nguy cơ hỏng hóc đồng thời trong một miền topology duy nhất.
  • Hỗ trợ Kubernetes 1.36: Bản phát hành cập nhật tính tương thích với Kubernetes 1.36 và bao gồm các cải tiến cho việc chấm điểm Dynamic Resource Allocation (DRA) và xử lý accelerator.

Tại sao điều này quan trọng

Đối với các nhóm kỹ thuật quản lý cụm Kubernetes dùng chung, đặc biệt là cho huấn luyện AI hoặc điện toán hiệu năng cao, sự cạnh tranh tài nguyên là một thách thức thường trực. Việc giới thiệu NamespaceQueue trao quyền cho trưởng nhóm tự quản lý hệ thống phân cấp tài nguyên của họ mà không bị nghẽn cổ chai bởi các kỹ sư nền tảng trung tâm. Sự phi tập trung hóa này đẩy nhanh quy trình vận hành trong khi vẫn duy trì các rào chắn thông qua các queue cha được quản trị viên ủy quyền. Nó lấp đầy khoảng cách giữa các chính sách cứng nhắc ở cấp cụm và sự linh hoạt cần thiết cho các nhóm phát triển agile.

Plugin fairshare giải quyết một điểm đau phổ biến trong môi trường đa tenant: vấn đề "hàng xóm ồn ào" (noisy neighbor). Bằng cách tính đến mức sử dụng trong quá khứ, trình lập lịch đảm bảo rằng không một nhóm nào có thể chiếm giữ tài nguyên vô thời hạn, ngay cả khi họ có số lượng lớn các job ngắn hạn. Điều này dẫn đến khả năng truy cập tài nguyên tính toán dự đoán được tốt hơn cho tất cả các nhóm. Trong khi đó, Unschedulable Job Cache tác động trực tiếp đến sự ổn định của cụm và hiệu quả chi phí bằng cách giảm tải cho control plane liên quan đến lượng job chờ tồn đọng lớn, cho phép trình lập lịch tập trung vào những job thực sự có thể chạy.

Bạn có thể làm gì

  • Bật NamespaceQueue trong Helm chart của bạn bằng cách đặt custom.namespace_queue_enable=true và xác định các namespace được phép trong specs của Queue cha.
  • Cấu hình plugin fairshare trong cấu hình trình lập lịch của bạn, đặt nó trước plugin DRF để ảnh hưởng đến thứ tự sắp xếp các job đang chờ dựa trên mức sử dụng trong quá khứ.
  • Kích hoạt Unschedulable Job Cache thông qua feature gate UnschedulableJobCache=true để giảm tải cho trình lập lịch trong các cụm có nhiều job chờ kéo dài.
  • Triển khai bộ điều khiển HyperNode độc lập bằng cách sử dụng custom.hypernode_controller_mode=standalone nếu bạn muốn sử dụng khả năng khám phá topology của Volcano với một trình lập lịch khác.
  • Cập nhật các định nghĩa PodGroup của bạn để bao gồm các quy tắc anti-affinity topology nếu bạn cần phân tán các bản sao suy luận trên các supernode khác nhau để đạt độ sẵn sàng cao hơn.
  • Xem xét lại các CRD và quyền RBAC của bạn trước khi nâng cấp, vì NamespaceQueue yêu cầu các cập nhật cụ thể để hỗ trợ các tài nguyên namespaced mới.
  • #kubernetes
  • #batch scheduling
  • #volcano
  • #resource management
  • #ai infrastructure

Công cụ từ cửa hàng Bytechap

Đọc tiếp

Tất cả bài viết