0Pricing
Kubernetes Basics · Lekcja

Selektory węzłów i powinowactwo

Kontroluj, gdzie są planowane Pody, używając selektorów węzłów oraz bardziej elastycznych reguł powinowactwa węzłów i Podów.

Selektory węzłów i powinowactwo to bezpłatna lekcja Kubernetes Basics na CoddyKit. To lekcja 2 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 Kubernetes Basics, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kubernetes Basics zawiera 4 lekcji w sumie.

Kontrolowanie rozmieszczania Podów

Domyślnie Kubernetes planuje Pody na dowolnym dostępnym węźle. Co jednak zrobić, gdy potrzebujesz większej kontroli?

Czasami Pody muszą działać na określonych węzłach. Być może te węzły mają specjalny sprzęt, odpowiednie licencje lub znajdują się w określonych strefach dostępności.

W tej lekcji poznasz sposoby kierowania schedulerem Kubernetes za pomocą selektorów węzłów i powinowactwa węzłów.

Dlaczego warto kierować schedulerem?

Wyobraź sobie, że masz Pod bazy danych, który musi działać na węźle z wysokowydajnymi dyskami SSD, albo aplikację intensywnie korzystającą z GPU, która wymaga określonego sprzętu.

Możesz także chcieć odseparować niektóre Pody od siebie w celu zwiększenia odporności na awarie lub zagwarantować ich działanie na węzłach z określonymi systemami operacyjnymi.

Kubernetes udostępnia narzędzia pozwalające wyrażać takie preferencje dotyczące planowania.

Węzły mają etykiety

Zanim wskażemy Podom, dokąd mają trafić, węzły potrzebują własnej identyfikacji! Kubernetes używa etykiet do identyfikowania węzłów na podstawie ich cech.

  • Etykiety to pary klucz-wartość, takie jak disk=ssd lub gpu=true.
  • Własne etykiety można dodawać do węzłów za pomocą kubectl label nodes <node-name> <key>=<value>.
  • To właśnie za pomocą tych etykiet wybieramy określone węzły do umieszczania Podów.

Selektory węzłów: proste dopasowanie

Najprostszym sposobem ograniczenia Poda do określonego zestawu węzłów jest użycie nodeSelector.

Jest to pole w specyfikacji Poda, które przyjmuje mapę par klucz-wartość. Pod zostanie zaplanowany wyłącznie na węzłach zawierających wszystkie wskazane etykiety.

To tak, jakby powiedzieć: „Potrzebuję węzła dokładnie o takich cechach”.

Selektor węzła w praktyce

Załóżmy, że mamy węzły oznaczone etykietą disk=ssd. Oto jak uruchomić Poda wyłącznie na tych węzłach:

apiVersion: v1
kind: Pod
metadata:
  name: ssd-app
spec:
  containers:
  - name: my-container
    image: nginx
  nodeSelector:
    disk: ssd

Powinowactwo węzłów: zaawansowane dopasowanie

Chociaż nodeSelector jest prosty, działa bardzo rygorystycznie. Co zrobić, jeśli chcesz wskazać węzły „preferowane” albo zastosować bardziej złożone reguły dopasowania?

Powinowactwo węzłów zapewnia większą elastyczność. Pozwala wyrażać „miękkie” lub „twarde” wymagania dotyczące umieszczania Podów na węzłach z określonymi etykietami.

Wykorzystuje bardziej rozbudowaną składnię z operatorami takimi jak In, NotIn, Exists, DoesNotExist, Gt i Lt.

Wymagane i preferowane powinowactwo

Powinowactwo węzłów ma dwa główne typy:

  • requiredDuringSchedulingIgnoredDuringExecution: Pod musi zostać zaplanowany na węźle zgodnym z regułami. Jeśli taki węzeł nie istnieje, Pod nie zostanie zaplanowany.
  • preferredDuringSchedulingIgnoredDuringExecution: scheduler próbuje znaleźć węzeł zgodny z regułami, ale jeśli żaden nie jest dostępny, nadal zaplanuje Pod w innym miejscu. Jest to podejście typu „best effort”.

Wymagane powinowactwo węzłów

Oto Pod wymagający węzła z etykietą env=production. Jeśli taki węzeł nie istnieje, Pod pozostanie w stanie oczekiwania.

apiVersion: v1
kind: Pod
metadata:
  name: prod-app
spec:
  containers:
  - name: my-container
    image: httpd
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: env
            operator: In
            values:
            - production

Powinowactwo Podów: inne Pody mają znaczenie

Co zrobić, jeśli chcesz planować Pody na podstawie miejsca, w którym działają inne Pody?

  • Powinowactwo Podów: przyciąga Pody do węzłów, na których już działają inne Pody z określonymi etykietami. Jest przydatne do umieszczania obok siebie usług, które często się komunikują.
  • Antypowinowactwo Podów: odsuwa Pody od węzłów, na których działają inne Pody z określonymi etykietami. Doskonale sprawdza się przy rozpraszaniu replik między węzłami w celu zapewnienia wysokiej dostępności.

Antypowinowactwo Podów w praktyce

Ten manifest gwarantuje, że żadne dwa Pody z etykietą app=my-web nie zostaną zaplanowane na tym samym węźle. Zwiększa to odporność na awarie.

topologyKey określa domenę, w której obowiązuje antypowinowactwo (np. węzeł lub strefa).

apiVersion: v1
kind: Pod
metadata:
  name: web-app-pod
  labels:
    app: my-web
spec:
  containers:
  - name: web-container
    image: busybox
    command: ["sh", "-c", "echo 'Hello from web-app'; sleep 3600"]
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              app: my-web
          topologyKey: "kubernetes.io/hostname"

Sprawdź swoją wiedzę

Chcesz zagwarantować, że krytyczne Pody bazy danych nie mogą być planowane na węzłach z etykietą zone=dev. Jakiego typu reguły planowania użyjesz do tego ścisłego wykluczenia na podstawie etykiet węzłów?

Podsumowanie: kontrolowanie planowania

Świetnie! Poznałeś(-aś) zaawansowane sposoby kontrolowania miejsc uruchamiania Podów:

  • Etykiety węzłów: pary klucz-wartość identyfikujące cechy węzłów.
  • Selektory węzłów: proste, ścisłe dopasowanie umożliwiające planowanie Podów na węzłach z określonymi etykietami.
  • Powinowactwo węzłów: bardziej elastyczne reguły (wymagane lub preferowane) wyboru węzłów z użyciem operatorów.
  • Powinowactwo i antypowinowactwo Podów: umieszczanie Podów obok siebie lub ich rozdzielanie na podstawie lokalizacji innych Podów.

Narzędzia te mają kluczowe znaczenie dla optymalizacji wykorzystania zasobów, zapewnienia odporności na awarie i spełnienia konkretnych wymagań aplikacji.

Często zadawane pytania

Czy lekcja „Selektory węzłów i powinowactwo” jest bezpłatna?

Tak — pełny tekst „Selektory węzłów i powinowactwo” 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 Kubernetes Basics, przejdź na CoddyKit PRO. Kurs Kubernetes Basics zawiera 4 lekcji w sumie.

Co nauczysz się w „Selektory węzłów i powinowactwo”?

Kontroluj, gdzie są planowane Pody, używając selektorów węzłów oraz bardziej elastycznych reguł powinowactwa węzłów i Podów. Ćwiczysz Kubernetes Basics 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ąć Kubernetes Basics?

Nie wymagamy żadnego doświadczenia. Kubernetes Basics 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 2 z 4.

Ile czasu zajmuje lekcja „Selektory węzłów i powinowactwo”?

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 Kubernetes Basics?

Tak. Każda lekcja Kubernetes Basics 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

  1. Żądania zasobów i limity
  2. Selektory węzłów i powinowactwo
  3. Skażenia i tolerancje
  4. Priorytet Podów i wywłaszczanie
← Powrót do Kubernetes Basics