2015-03-04 17 views
25

Jak działa terminarz Kubernetes? Co mam na myśli to, że program planujący Kubernetesa wydaje się bardzo prosty?Jak działa terminarz Kubernetes?

Moja początkowa myśl polega na tym, że ten program do planowania jest zwykłym systemem kontroli wstępu, a nie rzeczywistym programem planującym. Czy to prawda?

znalazłem krótki opis, ale to nie jest strasznie informacyjny:

Harmonogram kubernetes jest,, funkcja obciążenia specyficzne topologii świadoma polityka bogatych, które znacząco dostępność skutki, wydajność i Pojemność. Harmonogram musi uwzględniać wymagania indywidualne i zbiorowe zasobów, wymagania dotyczące jakości usług, wymagania dotyczące sprzętu/oprogramowania/polityki, powinowactwa i specyfikacje anty-powinowactwa, lokalizację danych, obciążenie między nakładami zakłócenia, terminy i tak dalej. Specyficzne wymagania związane z obciążeniem zostaną w razie potrzeby ujawnione za pomocą interfejsu API.

Odpowiedz

39

Cytowany paragraf opisuje, gdzie mamy nadzieję być w przyszłości (gdzie przyszłość definiowana jest w jednostkach miesięcy, a nie lat). Nie jesteśmy jeszcze na miejscu, ale program planujący ma już wiele użytecznych funkcji, wystarczającą do prostego wdrożenia. W pozostałej części tej odpowiedzi wyjaśnię, jak działa program planujący.

Program planujący to nie tylko kontroler dostępu; dla każdej utworzonej kapsuły znajduje się "najlepsza" maszyna do tej kapsuły, a jeśli żadna maszyna nie jest odpowiednia, kapsuła pozostaje niezaplanowana, aż maszyna stanie się odpowiednia.

Harmonogram jest konfigurowalny. Ma dwa typy polityk, FitPredicate (patrz master/pkg/scheduler/predicates.go) i PriorityFunction (patrz master/pkg/scheduler/priorities.go). Opiszę je.

Predykaty dopasowania to wymagane reguły, na przykład etykiety na węźle muszą być zgodne z selektorem etykiet na strąku (ta reguła jest zaimplementowana w PodSelectorMatches() w predicates.go), a suma żądanych zasobów Kontener (y) już uruchomione na maszynie plus wymagane zasoby nowego kontenera (ów), które planujesz, na maszynie, nie mogą być większe niż pojemność maszyny (ta reguła jest zaimplementowana w PodFitsResources() w predykatach. idź, zauważ, że "wymagane zasoby" są zdefiniowane jako pod.Spec.Containers [n] .Resources.Limits, a jeśli zażądasz zerowych zasobów, to zawsze pasujesz). Jeśli którakolwiek z wymaganych reguł nie jest spełniona dla konkretnej pary (nowego strąka, maszyny), nowy plan nie jest zaplanowany na tym komputerze. Jeśli po sprawdzeniu wszystkich maszyn planista zdecyduje, że nowej kapsuły nie można zaplanować na żadnej maszynie, to kapsuła pozostaje w stanie oczekiwania, dopóki nie zostanie spełniona przez jedną z maszyn.

Po sprawdzeniu wszystkich maszyn w odniesieniu do predykatów dopasowania, program planujący może stwierdzić, że wiele maszyn "pasuje" do bloku. Ale oczywiście kapsułę można zaplanować tylko na jednej maszynie. Tutaj pojawiają się funkcje priorytetowe. Zasadniczo scheduler plasuje maszyny, które spełniają wszystkie predykaty dopasowania, a następnie wybiera najlepszy. Na przykład preferuje maszynę, której już działające kapsuły zużywają najmniej zasobów (jest to zaimplementowane w LeastRequestedPriority() w priority.go). Ta zasada rozdziela kapsuły (a tym samym kontenery) zamiast pakować je na jeden komputer, pozostawiając inne puste.

Kiedy powiedziałem, że program planujący jest konfigurowalny, mam na myśli to, że możesz zdecydować w czasie kompilacji, które pasuje do predykatów i funkcji priorytetowych, które chcesz zastosować w Kubernetes. Obecnie dotyczy wszystkich tych, które widzisz na predicates.go i priority.go.

+0

Myślę, że coś jest nie tak ze starym dokumentem. Kuber używa 'request' do planowania i' ograniczenia' dla ograniczenia zasobów. – harryz

+0

@DavidO Czy istnieje publiczna dokumentacja opisująca domyślne funkcje Predykatów Dopasowanych i Priorytetów w języku angielskim zamiast kodu? Byłoby użyteczne, aby wyjaśnić non-kubernites i podejmować decyzje projektowe. – alph486

+4

Czy dwa lata później osiągnąłeś zamierzony cel, o którym wspomniałeś na początku swojej odpowiedzi? –

5

Dokonaliśmy dostosowań, które na przykład stosują wielopoziomowe koligacje i powinowactwa oparte na niestandardowych selektorach. Harmonogram nie jest doskonały, ale jest całkiem niezły w przypadku większości obciążeń na poziomie usług, aw przyszłości powinien być znacznie lepszy. https://docs.openshift.org/latest/admin_guide/scheduler.html#use-cases opisuje jedną konkretną konfigurację programu planującego Kube, która to zapewnia.

+0

Świetne szczegółowe zasoby w programie planującym k8s! Dzięki za link do dokumentów OpenShift! – TrinitronX

Powiązane problemy