Powrót do strony głównej

Architektura Kubernetes wyjaśniona na przykładach | Przewodnik

Ten artykuł zawiera kompleksowe wyjaśnienie architektury Kubernetes na przykładach, rozbijając komponenty płaszczyzny sterowania (API server, etcd, scheduler, controller-manager) i elementy węzłów roboczych (kubelet, kube-proxy, środowisko uruchomieniowe kontenerów). Wykorzystuje praktyczny przykład wdrożenia Nginx, aby zilustrować interakcje komponentów, samonaprawianie, skalowanie i aktualizacje kroczące, czyniąc Kubernetes dostępnym dla początkujących i praktyków.

Architektura Kubernetes: Praktyczny przewodnik z przykładami
Advertisement 728x90

Architektura Kubernetes z praktycznymi przykładami

Kubernetes stał się standardem branżowym w orkiestracji kontenerów, ale jego złożona architektura często przeraża początkujących. Ten przewodnik oferuje wyjaśnienie architektury Kubernetes z przykładami, które rozjaśnia każdy komponent, pokazując, jak współdziałają, aby automatyzować wdrażanie, skalowanie i zarządzanie aplikacjami w środowiskach produkcyjnych.

Czego się nauczysz

Pod koniec tego przewodnika zrozumiesz, jak komponenty klastra Kubernetes współpracują, aby niezawodnie uruchamiać konteneryzowane aplikacje, i będziesz w stanie określić rolę każdego komponentu płaszczyzny sterowania i węzła roboczego. Będziesz w stanie wyjaśnić cały przepływ żądań — od wysłania przez użytkownika wdrożenia do pojawienia się aplikacji — na konkretnym przykładzie.

Jak to działa: architektura wielowarstwowa z analogią ze świata rzeczywistego

Wyobraź sobie klaster Kubernetes jako firmę transportową. Płaszczyzna sterowania to centrala, w której menedżerowie podejmują strategiczne decyzje. Węzły robocze to statki towarowe, które fizycznie przewożą kontenery. Każdy kontener na statku to Pod, najmniejsza jednostka wdrażana w Kubernetes.

Google AdInline article slot

Płaszczyzna sterowania: mózg klastra

Płaszczyzna sterowania zarządza stanem klastra i koordynuje wszystkie działania. Składa się z kilku krytycznych komponentów:

kube-apiserver pełni rolę punktu rejestracji — cała komunikacja z klastrem przechodzi przez ten komponent. Gdy wykonujesz polecenia kubectl, serwer API uwierzytelnia twoje żądanie, sprawdza je i aktualizuje stan klastra przechowywany w etcd — rozproszonym magazynie klucz-wartość, który służy jako główne repozytorium wszystkich danych klastra.

kube-scheduler śledzi nowo utworzone Pody, którym nie przypisano węzła. Inteligentnie wybiera najbardziej odpowiedni węzeł roboczy na podstawie wymagań dotyczących zasobów, ograniczeń i polityk. Na przykład, jeśli żądasz Poda, który potrzebuje GPU, scheduler będzie rozważał tylko węzły z zasobami GPU.

Google AdInline article slot

kube-controller-manager uruchamia zestaw kontrolerów, które nieprzerwanie monitorują stan klastra i wprowadzają poprawki. Kontroler węzłów wykrywa, gdy węzły ulegają awarii, kontroler zadań zarządza jednorazowymi zadaniami, a kontroler EndpointSlice łączy serwisy z Podami.

Węzły robocze: gdzie działają aplikacje

Każdy węzeł roboczy uruchamia trzy główne komponenty:

kubelet to główny agent węzła, który zapewnia uruchamianie kontenerów w Podzie zgodnie ze specyfikacją. Otrzymuje specyfikacje Podów z serwera API i zarządza środowiskiem uruchomieniowym kontenerów, aby uruchamiać i monitorować te kontenery.

Google AdInline article slot

kube-proxy utrzymuje reguły sieciowe, które umożliwiają komunikację z Podami z wewnątrz lub z zewnątrz klastra. Implementuje koncepcję serwisu, przekierowując ruch do odpowiednich Podów za pomocą reguł filtrowania pakietów.

Środowisko uruchomieniowe kontenerów (np. containerd lub CRI-O) to oprogramowanie odpowiedzialne za faktyczne uruchamianie kontenerów.

Praktyczny przykład: wdrażanie aplikacji webowej

Prześledźmy, co się dzieje podczas wdrażania serwera WWW Nginx:

  1. Piszesz plik YAML wdrożenia, określający 3 repliki kontenera Nginx.
  2. Wysyłasz go za pomocą kubectl apply -f deployment.yaml. Żądanie dociera do serwera API.
  3. Serwer API uwierzytelnia cię i zapisuje żądany stan w etcd.
  4. Scheduler wykrywa niezaplanowane Pody i przypisuje je do węzłów roboczych z dostępną pojemnością.
  5. Na każdym przypisanym węźle roboczym kubelet otrzymuje specyfikację Poda i instruuje środowisko uruchomieniowe kontenerów, aby pobrało obraz Nginx i uruchomiło kontener.
  6. Kontroler-menadżer nieprzerwanie sprawdza, czy działają 3 repliki, a jeśli Pod ulegnie awarii, tworzy zamiennik.
  7. Tworzony jest serwis, aby udostępnić aplikację, a kube-proxy konfiguruje reguły sieciowe, aby ruch mógł docierać do Podów.

Dlaczego to jest ważne

Architektura Kubernetes zapewnia możliwości, które radykalnie zmieniają sposób, w jaki organizacje wdrażają i zarządzają oprogramowaniem:

Samouzdrawianie: Jeśli kontener ulegnie awarii lub węzeł stanie się niedostępny, kontrolery automatycznie zastępują uszkodzone Pody na zdrowych węzłach, minimalizując przestoje.

Skalowanie poziome: Horyzontalny autoskalator Podów może automatycznie regulować liczbę replik Podów na podstawie obciążenia CPU lub niestandardowych metryk, umożliwiając aplikacjom obsługę skoków ruchu bez ręcznej interwencji.

Stopniowe aktualizacje i wycofywanie: Wdrożenia zapewniają aktualizacje bez przestojów. Możesz stopniowo zastępować stare Pody nowymi wersjami, a w przypadku problemów natychmiast wycofać zmiany.

Efektywność wykorzystania zasobów: Scheduler optymalizuje rozmieszczenie Podów na węzłach, poprawiając wykorzystanie zasobów i obniżając koszty infrastruktury.

W liczbach

Metryka Szczegóły
Pierwsze wydanie Kubernetes 1.0 wydany 21 lipca 2015 roku
Węzły płaszczyzny sterowania Klastry produkcyjne zwykle uruchamiają 3 węzły płaszczyzny sterowania dla wysokiej dostępności
Węzły robocze Duże klastry mogą przekraczać 1 000 węzłów roboczych
Maksymalna liczba Podów na węzeł Do 110 domyślnie (można skonfigurować)
Opóźnienie żądań do API 99. percentyl zwykle poniżej 1 sekundy w dobrze skonfigurowanych klastrach
etcd Może obsłużyć do ~10 000 zapisów na sekundę na dyskach NVMe

Powszechne mity vs. fakty

Mit Fakt
"Kubernetes uruchamia kontenery bezpośrednio na węzłach." Kubernetes nigdy nie uruchamia kontenerów bezpośrednio — zawsze działają one wewnątrz Podów, które są najmniejszymi jednostkami wdrażanymi, obejmującymi sieć i magazyn.
"Serwer API to pojedynczy punkt awarii." kube-apiserver jest zaprojektowany do skalowania poziomego poprzez wdrożenie wielu instancji z równoważeniem obciążenia.
"Wszystkie klastry Kubernetes muszą uruchamiać kube-proxy." Wtyczki sieciowe mogą implementować własne proxy serwisów, co czyni kube-proxy opcjonalnym w takich przypadkach.
"Pody zawsze powinny zawierać tylko jeden kontener." Pody mogą zawierać wiele ściśle powiązanych kontenerów, które współdzielą sieć i magazyn, na przykład serwer WWW i kontener do logowania.
"Dane etcd nie są krytyczne dla działania klastra." etcd jest głównym magazynem wszystkich danych klastra i powinieneś mieć plan tworzenia kopii zapasowych dla niego.

Co zrobić z tą wiedzą

Aby efektywnie pracować z architekturą Kubernetes:

  1. Zacznij od zarządzanego Kubernetes, jeśli jesteś początkujący — takie usługi jak GKE, EKS lub AKS abstrahują zarządzanie płaszczyzną sterowania, abyś mógł skupić się na aplikacjach.
  2. Naucz się czytać manifesty YAML dla podstawowych zasobów: Podów, wdrożeń, serwisów i ConfigMap. To fundamentalne elementy składowe, których będziesz używać codziennie.
  3. Używaj poleceń kubectl describe i logs do rozwiązywania problemów — zrozumienie, jak komponenty współdziałają, pomoże ci szybciej diagnozować problemy.
  4. Zawsze określaj żądania i limity zasobów w manifestach wdrożenia. Pomaga to schedulerowi podejmować optymalne decyzje dotyczące rozmieszczenia i zapobiega niedoborom zasobów.
  5. Poznaj polityki sieciowe, aby zapewnić bezpieczeństwo komunikacji między Podami po zrozumieniu podstawowej architektury.

Często zadawane pytania

Jaka jest różnica między wdrożeniem a serwisem? Wdrożenie zarządza cyklem życia replik Podów — gwarantuje, że działa określona liczba identycznych Podów, i obsługuje aktualizacje oraz wycofywanie. Serwis zapewnia stabilny punkt końcowy sieci do dostępu do tych Podów, które są efemeryczne i mogą być w każdej chwili zastąpione.

Dlaczego Kubernetes potrzebuje etcd? etcd służy jako główne repozytorium danych Kubernetes, sekwencyjnie i niezawodnie przechowując wszystkie informacje o stanie klastra, w tym które Pody działają, jakie serwisy istnieją i dane konfiguracyjne. Bez etcd klaster nie ma "źródła prawdy" o swoim pożądanym i rzeczywistym stanie.

Co się dzieje, gdy węzeł roboczy ulegnie awarii? Kontroler węzłów wykrywa niedostępność węzła (zwykle po okresie timeoutu). Następnie scheduler przeprogramowuje wszelkie Pody, które działały na uszkodzonym węźle, na inne zdrowe węzły, utrzymując żądaną liczbę replik.

Jak serwis kieruje ruch do Podów? Serwis utrzymuje zestaw punktów końcowych — adresy IP Podów pasujących do jego selektora etykiet. kube-proxy na każdym węźle programuje reguły sieciowe (iptables lub IPVS), które przekierowują ruch przeznaczony dla wirtualnego adresu IP serwisu do tych punktów końcowych, zapewniając równoważenie obciążenia między Podami.

Jaka jest różnica między zadaniem a CronJob? Zadanie tworzy jeden lub więcej Podów i gwarantuje ich pomyślne zakończenie — jest używane do jednorazowych zadań, takich jak kopia zapasowa bazy danych. CronJob tworzy zadania według powtarzającego się harmonogramu, co jest przydatne do okresowych zadań konserwacyjnych, takich jak codzienne czyszczenie logów.

Źródła

  • Oficjalna dokumentacja Kubernetes – Architektura klastra
  • Dokumentacja szkoleniowa Kubernetes z SLAC National Accelerator Laboratory
  • Notatki z wprowadzenia do Kubernetes od KodeKloud
  • Samouczki i przewodniki Kubernetes od LabEx
  • Kompletny przewodnik po Kubernetes (GitHub)

— Editorial Team

Advertisement 728x90

Czytaj dalej