Đoạn bạn trích dẫn mô tả nơi chúng tôi hy vọng sẽ ở trong tương lai (nơi tương lai được xác định theo đơn vị tháng, không phải năm). Chúng tôi chưa có, nhưng lịch trình có một số tính năng hữu ích đã có, đủ cho một triển khai đơn giản. Trong phần còn lại của câu trả lời này, tôi sẽ giải thích cách hoạt động của trình lập lịch biểu ngày hôm nay.
Trình lên lịch không chỉ là bộ điều khiển nhập học; cho mỗi nhóm được tạo, nó sẽ tìm thấy máy "tốt nhất" cho nhóm đó và nếu không có máy nào phù hợp, vỏ vẫn chưa được lên lịch cho đến khi máy trở nên phù hợp.
Trình lên lịch có thể định cấu hình được. Nó có hai loại chính sách, FitPredicate (xem master/pkg/scheduler/predicates.go) và PriorityFunction (xem master/pkg/scheduler/priorities.go). Tôi sẽ mô tả chúng.
Các biến vị ngữ phù hợp là các quy tắc bắt buộc, ví dụ: nhãn trên nút phải tương thích với bộ chọn nhãn trên nhóm (quy tắc này được triển khai trong PodSelectorMatches() trong predicates.go) và tổng các tài nguyên được yêu cầu của (các) vùng chứa đã chạy trên máy cộng với các tài nguyên được yêu cầu của (các) vùng chứa mới mà bạn đang xem xét lên lịch trên máy không được lớn hơn dung lượng của máy (quy tắc này được triển khai trong PodFitsResources() trong các vị từ. đi, lưu ý rằng "tài nguyên được yêu cầu" được định nghĩa là pod.Spec.Containers [n] .Resources.Limits và nếu bạn yêu cầu không có tài nguyên thì bạn luôn phù hợp). Nếu bất kỳ quy tắc bắt buộc nào không thỏa mãn cho một cặp (nhóm máy, mới) cụ thể, thì nhóm mới sẽ không được lên lịch trên máy đó. Nếu sau khi kiểm tra tất cả các máy, trình lên lịch quyết định rằng nhóm mới không thể được lên lịch trên bất kỳ máy nào, khi đó pod vẫn ở trạng thái Đang chờ cho đến khi nó có thể được một trong các máy thỏa mãn.
Sau khi kiểm tra tất cả các máy liên quan đến các biến vị ngữ phù hợp, trình lên lịch có thể thấy rằng nhiều máy "phù hợp" với nhóm. Nhưng tất nhiên, pod chỉ có thể được lên lịch trên một máy. Đó là nơi các chức năng ưu tiên đi vào. Về cơ bản, trình lập lịch xếp hạng các máy đáp ứng tất cả các biến vị ngữ phù hợp và sau đó chọn các biến vị trí tốt nhất. Ví dụ, nó thích máy mà các pod đã chạy của nó tiêu thụ ít tài nguyên nhất (điều này được thực hiện trong LeastRequestedPriority() trong priorityities). Chính sách này lây lan các thùng (và do đó các thùng chứa) ra thay vì đóng gói rất nhiều vào một máy trong khi để lại những người khác trống rỗng.
Khi tôi nói rằng trình lên lịch có thể định cấu hình được, tôi có nghĩa là bạn có thể quyết định thời gian biên dịch phù hợp với các biến vị ngữ và các chức năng ưu tiên bạn muốn Kubernetes áp dụng. Hiện tại nó áp dụng tất cả những cái bạn nhìn thấy trong predicates.go và priorityities.
Tôi nghĩ có gì đó sai với tài liệu cũ. Kuber sử dụng 'yêu cầu' để lập lịch và' giới hạn' để hạn chế tài nguyên. – harryz
@DavidO Có tài liệu công khai mô tả các hàm Fit Predicates và Priority mặc định được đặt ra, bằng tiếng Anh đơn giản thay vì mã không? Sẽ rất hữu ích để giải thích cho những người không phải là kubernite và đưa ra quyết định thiết kế. – alph486
Vậy hai năm sau, bạn có đạt được mục tiêu dự định mà bạn đề cập ở phần đầu câu trả lời của bạn không? –