Skażenia i tolerancje
Zapobiegaj planowaniu Podów na określonych węzłach za pomocą skażeń i pozwalaj wybranym Podom je tolerować.
Skażenia i tolerancje to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Czym są skażenia?
Wyobraź sobie, że masz w klastrze Kubernetes specjalne węzły, na przykład wyposażone w określony sprzęt, taki jak GPU, albo zarezerwowane dla konkretnych obciążeń. Nie chcesz przecież, aby trafił tam dowolny Pod, prawda?
Właśnie do tego służą skażenia (Taints)! Skażenie to właściwość przypisana do węzła, która uniemożliwia planowanie na nim Podów, chyba że te Pody jawnie „tolerują” dane skażenie.
Powody stosowania skażeń
Skażenia są bardzo przydatne do zarządzania miejscem uruchamiania Podów:
- Dedykowane węzły: rezerwowanie węzłów dla określonych zespołów lub aplikacji.
- Specjalny sprzęt: odizolowanie węzłów z GPU lub wysokowydajnymi dyskami SSD dla Podów, które ich wymagają.
- Konserwacja: oznaczenie węzła jako przeznaczonego do konserwacji, aby tymczasowo uniemożliwić planowanie na nim nowych Podów.
Jak działają skażenia
Potraktuj skażenie jak znak „zakaz wstępu” umieszczony na węźle. Pod może zignorować ten znak tylko wtedy, gdy ma pasujące „zezwolenie” zwane tolerancją (Toleration).
Skażenie składa się z klucza, wartości i efektu. Na przykład: key=value:effect.
Zrozumienie efektów skażeń
Część „efekt” skażenia informuje Kubernetes, co zrobić z Podami, które go nie tolerują. Wyróżniamy trzy główne efekty:
NoSchedulePreferNoScheduleNoExecute
Przyjrzyjmy się każdemu z nich.
Efekt skażenia: NoSchedule
Efekt NoSchedule jest najbardziej rygorystyczny. Jeśli węzeł ma skażenie z efektem NoSchedule, żaden Pod nie zostanie na nim zaplanowany, chyba że ma pasującą tolerancję.
Istniejące Pody działające już na węźle NIE są objęte nowym skażeniem NoSchedule.
Efekt skażenia: PreferNoSchedule
PreferNoSchedule to „miękka” wersja efektu NoSchedule. Kubernetes dołoży starań, aby nie planować Podów na skażonym węźle, ale nie jest to bezwzględne wymaganie.
Jeśli nie ma innych odpowiednich węzłów, Pod może mimo wszystko zostać zaplanowany na węźle ze skażeniem PreferNoSchedule, nawet bez tolerancji.
Efekt skażenia: NoExecute
Efekt NoExecute jest wyjątkowy, ponieważ wpływa na Pody *już działające*. Jeśli węzeł ma skażenie NoExecute:
- Pody bez pasującej tolerancji są *natychmiast eksmitowane*.
- Nowe Pody bez pasującej tolerancji nie mogą zostać zaplanowane.
Efekt ten jest często używany podczas opróżniania węzłów lub obsługi awarii węzłów.
Wprowadzenie do tolerancji
Podczas gdy skażenia są przypisywane do węzłów, tolerancje (Tolerations) są przypisywane do Podów. Tolerancja Poda pozwala zaplanować go na węźle, który ma pasujące skażenie.
Bez pasującej tolerancji Pod nie może zostać (lub nie powinien zostać) zaplanowany na skażonym węźle.
Tolerancje w manifestach Podów
Tolerancje definiuje się w manifeście YAML Poda, w sekcji spec. Oto jak Pod toleruje skażenie key=value:NoSchedule:
apiVersion: v1
kind: Pod
metadata:
name: my-tolerated-pod
spec:
containers:
- name: nginx
image: nginx
tolerations:
- key: "special-purpose"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"Jak dopasowują się skażenia i tolerancje
Aby Pod mógł zostać zaplanowany na skażonym węźle, jego tolerancja musi pasować do skażenia węzła. Dopasowanie obejmuje:
- Klucz: musi być taki sam.
- Wartość: musi być taka sama, jeśli użyto
operator: Equal. - Efekt: musi być taki sam.
- Operator: może mieć wartość
EquallubExists(czyli dowolna wartość dla danego klucza).
Specjalna tolerancja key: "" operator: Exists toleruje *dowolne* skażenie.
Szybkie sprawdzenie: skażenia
Węzeł ma skażenie env=production:NoSchedule. Jaka konfiguracja Poda pozwoli zaplanować go na tym węźle?
Podsumowanie: skażenia i tolerancje
Wiesz już, czym są skażenia i tolerancje!
- Skażenia przypisuje się do węzłów, aby odpychać Pody.
- Tolerancje przypisuje się do Podów, aby umożliwić ich planowanie na skażonych węzłach.
- Najważniejsze efekty skażeń to
NoSchedule,PreferNoScheduleiNoExecute. - Aby Pod mógł zostać zaplanowany, tolerancja musi pasować do klucza, wartości i efektu skażenia.
Narzędzia te zapewniają szczegółową kontrolę nad rozmieszczaniem Podów!
Często zadawane pytania
Czy lekcja „Skażenia i tolerancje” jest bezpłatna?
Tak — pełny tekst „Skażenia i tolerancje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Co nauczysz się w „Skażenia i tolerancje”?
Zapobiegaj planowaniu Podów na określonych węzłach za pomocą skażeń i pozwalaj wybranym Podom je tolerować. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Skażenia i tolerancje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Żądania zasobów i limity
- Selektory węzłów i powinowactwo
- Skażenia i tolerancje
- Priorytet Podów i wywłaszczanie