2015-03-04 34 views
25

Trình lập lịch biểu của Kubernetes hoạt động như thế nào? Ý tôi là lịch trình của Kubernetes dường như rất đơn giản?Lập lịch biểu của Kubernetes hoạt động như thế nào?

Suy nghĩ ban đầu của tôi là bộ lập lịch này chỉ là một hệ thống kiểm soát nhập học đơn giản, không phải là bộ lập lịch thực. Có đúng không?

Tôi tìm thấy một mô tả ngắn, nhưng nó không phải là khủng khiếp thông tin:

Các kubernetes lên lịch là một topo-aware, chức năng khối lượng công việc cụ thể chính sách giàu đáng kể tác động sẵn có, hiệu suất, và sức chứa. Trình lên lịch cần tính đến các yêu cầu tài nguyên cá nhân và tập thể, chất lượng dịch vụ yêu cầu, phần cứng/phần mềm/ràng buộc chính sách, ái lực và thông số chống mối quan hệ, địa phương dữ liệu, khối lượng công việc can thiệp, thời hạn, v.v. Các yêu cầu về khối lượng công việc cụ thể sẽ được hiển thị thông qua API khi cần thiết.

Trả lời

39

Đ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.

+0

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

+0

@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

+4

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? –

5

Chúng tôi đã thực hiện các tùy chỉnh, ví dụ: áp dụng mối quan hệ đa cấp và chống mối quan hệ dựa trên công cụ chọn tùy chỉnh. Trình lên lịch không phải là hoàn hảo, nhưng nó khá tốt cho hầu hết các khối lượng công việc ở mức dịch vụ và trong tương lai sẽ tốt hơn rất nhiều. https://docs.openshift.org/latest/admin_guide/scheduler.html#use-cases mô tả một cấu hình lịch biểu Kube cụ thể cung cấp điều đó.

+0

Tài nguyên chi tiết tuyệt vời trên lịch trình của k8! Cảm ơn bạn đã liên kết đến tài liệu OpenShift! – TrinitronX

Các vấn đề liên quan