Kubernetes Architektura

Print Friendly, PDF & Email

Czym jest Kubernetes?

Kubernetes to przenośna, rozszerzalna platforma typu open source do zarządzania kontenerowymi obciążeniami i usługami, która ułatwia zarówno deklaratywną konfigurację, jak i automatyzację. Posiada duży, szybko rozwijający się ekosystem. Usługi, wsparcie i narzędzia Kubernetes są powszechnie dostępne.

Nazwa Kubernetes pochodzi z języka greckiego i oznacza sternika lub pilota. K8s jako skrót wynika z policzenia ośmiu liter między „K” i „s”. Firma Google udostępniła projekt Kubernetes w trybie open source w 2014 r. Kubernetes łączy ponad 15-letnie doświadczenie Google w zakresie obsługi obciążeń produkcyjnych na dużą skalę z najlepszymi pomysłami i praktykami społeczności.

Powrót do przeszłości

Przyjrzyjmy się, dlaczego Kubernetes jest tak użyteczny, cofając się w czasie.

Deployment evolution
Zmiany historyczne w utrzymywaniu infrastruktury

Era tradycyjnych wdrożeń – na początku organizacje uruchamiały aplikacje na serwerach fizycznych. Nie było możliwości zdefiniowania granic zasobów dla aplikacji na serwerze fizycznym, co powodowało problemy z alokacją zasobów. Jeśli wiele aplikacji działa na serwerze fizycznym, mogą wystąpić sytuacje, w których jedna aplikacja zajęłaby większość zasobów, a w rezultacie inne aplikacje miałyby gorsze wydajności. Rozwiązaniem byłoby uruchomienie każdej aplikacji na innym serwerze fizycznym. Nie było to jednak skalowane, ponieważ zasoby nie były w pełni wykorzystywane, a utrzymanie wielu serwerów fizycznych było kosztowne dla organizacji.

Era wdrożeń zwirtualizowanych – jako rozwiązanie powyższego problemu wprowadzono wirtualizację. Umożliwia uruchamianie wielu maszyn wirtualnych (VM) na pojedynczym procesorze serwera fizycznego. Wirtualizacja umożliwia izolację aplikacji między maszynami wirtualnymi i zapewnia poziom bezpieczeństwa, ponieważ informacje z jednej aplikacji nie mogą być swobodnie dostępne dla innej aplikacji.

Wirtualizacja umożliwia lepsze wykorzystanie zasobów fizycznego serwera i lepszą skalowalność, ponieważ aplikacja może być łatwo dodawana lub aktualizowana, zmniejsza koszty sprzętu i wiele więcej. Dzięki wirtualizacji możesz przedstawić zestaw zasobów fizycznych jako klaster jednorazowych maszyn wirtualnych.

Każda maszyna wirtualna to pełna maszyna, na której działają wszystkie komponenty, w tym własny system operacyjny, na sprzęcie zwirtualizowanym.

Era wdrażania kontenerów – kontenery są podobne do maszyn wirtualnych, ale mają złagodzone właściwości izolacji, aby udostępniać system operacyjny (OS) między aplikacjami. Dlatego pojemniki są uważane za lekkie. Podobnie jak maszyna wirtualna, kontener ma własny system plików, udział procesora, pamięć, przestrzeń procesową i inne. Ponieważ są oddzielone od podstawowej infrastruktury, sąwygodniejsze do przenoszenia pomiędzy różnymi infrastrukturami, zarówno lokalnymi jak i chmurowymi.

Kontenery stały się popularne, ponieważ zapewniają dodatkowe korzyści, takie jak:

  • Zwinne tworzenie i wdrażanie aplikacji (Agile): większa łatwość i wydajność tworzenia obrazu kontenera w porównaniu z użyciem obrazu maszyny wirtualnej.
  • Continuous development oraz Continuous integration (CD/CI) – zapewnia niezawodne i częste tworzenie i wdrażanie obrazu kontenera z szybkim i wydajnym wycofywaniem zmian (ze względu na niezmienność obrazu).
  • Rozdzielenie problemów deweloperskich i operacyjnych: twórz obrazy kontenerów aplikacji w czasie kompilacji/wydawania, a nie w czasie wdrażania, oddzielając w ten sposób aplikacje od infrastruktury.
  • Obserwowalność: nie tylko ujawniają informacje i metryki na poziomie systemu operacyjnego, ale także kondycję aplikacji i inne sygnały.
  • Spójność środowiskowa podczas programowania, testowania i produkcji: działa tak samo na laptopie, jak w chmurze.
  • Przenośność dystrybucji w chmurze i systemu operacyjnego: działa na Ubuntu, RHEL, CoreOS, lokalnie, w głównych chmurach publicznych i gdziekolwiek indziej.
  • Zarządzanie zorientowane na aplikacje: podnosi poziom abstrakcji od uruchamiania systemu operacyjnego na sprzęcie wirtualnym do uruchamiania aplikacji w systemie operacyjnym przy użyciu zasobów logicznych.
  • Luźno powiązane, rozproszone, elastyczne, wyzwolone mikrousługi: aplikacje są dzielone na mniejsze, niezależne części i można je wdrażać i zarządzać nimi dynamicznie — a nie monolityczny stos działający na jednej dużej maszynie jednofunkcyjnej.
  • Izolacja zasobów: przewidywalna wydajność aplikacji.
  • Wykorzystanie zasobów: wysoka wydajność i gęstość.

Dlaczego potrzebujesz Kubernetes i co może zrobić?

Kontenery to dobry sposób na łączenie i uruchamianie aplikacji. W środowisku produkcyjnym musisz zarządzać kontenerami, na których działają aplikacje i zapewnić, że nie ma przestojów. Na przykład, jeśli kontener ulegnie uszkodzeniu, inny kontener musi zostać uruchomiony. Czy nie byłoby łatwiej, gdyby to zachowanie było obsługiwane przez system?

W ten sposób Kubernetes przychodzi na ratunek! Kubernetes zapewnia platformę do elastycznego uruchamiania systemów rozproszonych. Zajmuje się skalowaniem i przełączaniem awaryjnym aplikacji, udostępnia wzorce wdrażania i nie tylko.

Kubernetes zapewnia:

  • Wykrywanie usług i równoważenie obciążenia Kubernetes może ujawnić kontener przy użyciu nazwy DNS lub własnego adresu IP. Jeśli ruch do kontenera jest duży, Kubernetes jest w stanie zrównoważyć obciążenie i rozłożyć ruch sieciowy, aby wdrożenie było stabilne.
  • Orkiestracja pamięci masowej Kubernetes umożliwia automatyczne montowanie wybranego systemu pamięci masowej, takiego jak magazyny lokalne, dostawcy chmury publicznej i nie tylko.
  • Zautomatyzowane wdrażanie i wycofywanie Za pomocą Kubernetes można opisać żądany stan wdrożonych kontenerów i zmienić stan rzeczywisty na żądany w kontrolowanym tempie. Na przykład możesz zautomatyzować Kubernetes, aby tworzyć nowe kontenery do wdrożenia, usuwać istniejące kontenery i dostosowywać wszystkie ich zasoby do nowego kontenera.
  • Mówisz Kubernetesowi, ile procesora i pamięci (RAM) potrzebuje każdy kontener. Kubernetes może dopasować kontenery do Twoich węzłów, aby jak najlepiej wykorzystać zasoby.
  • Samonaprawiający się Kubernetes ponownie uruchamia kontenery, które się nie powiodło, zastępuje kontenery, zabija kontenery, które nie odpowiadają na kontrolę stanu zdefiniowaną przez użytkownika, i nie ogłasza ich klientom, dopóki nie będą gotowe do obsługi.
  • Kubernetes umożliwia przechowywanie i zarządzanie poufnymi informacjami, takimi jak hasła, tokeny OAuth i klucze SSH. Możesz wdrażać i aktualizować wpisy tajne i konfigurację aplikacji bez przebudowy obrazów kontenerów i bez ujawniania wpisów tajnych w konfiguracji stosu.

Czym Kubernetes nie jest?

Kubernetes nie jest tradycyjnym, kompleksowym systemem PaaS (Platform as a Service). Działa na poziomie kontenera, a nie na poziomie sprzętu, zapewnia ogólnie stosowane funkcje wspólne dla PaaS: wdrażanie, skalowanie, równoważenie obciążenia, umożliwia użytkownikom zintegrowanie ich rozwiązań do rejestrowania, monitorowania i alertów. Jednak Kubernetes nie jest monolityczny, a te domyślne rozwiązania są opcjonalne i można je podłączyć. Kubernetes zapewnia elementy konstrukcyjne do budowania platform programistycznych, ale zachowuje wybór użytkownika i elastyczność tam, gdzie jest to ważne.

Kubernetes:

  • Nie ogranicza typów obsługiwanych aplikacji. Kubernetes ma na celu obsługę niezwykle różnorodnych obciążeń, w tym obciążeń bezstanowych, stanowych i przetwarzania danych. Jeśli aplikacja może działać w kontenerze, powinna działać świetnie na Kubernetes.
  • Nie wdraża kodu źródłowego i nie tworzy Twojej aplikacji. Przepływy CI/CD są określane przez kulturę i preferencje organizacji, a także wymagania techniczne.
  • Nie zapewnia usług na poziomie aplikacji, takich jak oprogramowanie pośredniczące (na przykład magistrale komunikatów), struktury przetwarzania danych (na przykład Spark), bazy danych (na przykład MySQL), pamięci podręczne ani klastrowe systemy pamięci masowej (na przykład Ceph) jako usługi wbudowane. Takie komponenty mogą działać na Kubernetes i/lub mogą być dostępne dla aplikacji działających na Kubernetes za pośrednictwem przenośnych mechanizmów, takich jak Open Service Broker.
  • Nie dyktuje rozwiązań dotyczących rejestrowania, monitorowania ani alertów. Zapewnia pewne integracje jako dowód koncepcji oraz mechanizmy zbierania i eksportowania metryk.
  • Nie zapewnia ani nie wymaga języka/systemu konfiguracji (na przykład Jsonnet). Zapewnia deklaratywne API, które może być celem dowolnych form specyfikacji deklaratywnych.
  • Nie zapewnia ani nie przyjmuje żadnych kompleksowych systemów konfiguracji, konserwacji, zarządzania ani samonaprawiania maszyn.
  • Dodatkowo Kubernetes nie jest zwykłym systemem orkiestracji. W rzeczywistości eliminuje potrzebę orkiestracji. Techniczną definicją orkiestracji jest wykonanie zdefiniowanego przepływu pracy: najpierw wykonaj A, potem B, a następnie C. W przeciwieństwie do tego, Kubernetes składa się z zestawu niezależnych, komponowalnych procesów kontrolnych, które w sposób ciągły kierują bieżący stan w kierunku podanego pożądanego stanu. Nie powinno mieć znaczenia, jak dotrzesz z punktu A do C. Scentralizowana kontrola również nie jest wymagana. Dzięki temu powstaje system, który jest łatwiejszy w użyciu i mocniejszy, solidniejszy, odporny i rozszerzalny.

Architektura Kubernetes

Architektura kubernetes składa się z płaszczyzny kontrolnej (control plane)master, rozproszonego systemu pamięci masowej (distributed storage system) do utrzymywania spójności stanu klastra (cluster state consistent) – etcd oraz wielu węzłów klastra (cluster nodes)Kubelets.

Kubernetes Control Plane

Kubernetes Control Plane

Control Plane to system, który prowadzi rejestr wszystkich obiektów Kubernetes. Ciągle zarządza stanami obiektów, reagując na zmiany w klastrze; działa również w celu dopasowania rzeczywistego stanu obiektów systemowych do pożądanego stanu.

Płaszczyzna sterowania składa się z pięciu głównych elementów:

  • Kube-apiserver
  • Kube-controller-manager
  • Kube-scheduler
  • Etcd
  • Cloud-controller-manager

Kube-apiserver

Serwer API udostępnia interfejsy API do obsługi aranżacji cyklu życia (skalowanie, aktualizacje itd.) dla różnych typów aplikacji. Działa również jako brama do klastra, więc serwer API musi być dostępny dla klientów spoza klastra.

Kube-controller-manager

Menedżer kontrolera (Controller Manager) to demon, który uruchamia podstawowe pętle kontrolne, obserwuje stan klastra i wprowadza zmiany w celu uzyskania pożądanego stanu. Cloud Controller Manager integruje się z każdą chmurą publiczną w celu optymalnej obsługi stref dostępności, instancji maszyn wirtualnych, usług przechowywania i usług sieciowych dla DNS, routingu i równoważenia obciążenia.

Kube-scheduler

Harmonogram (scheduler) jest odpowiedzialny za planowanie kontenerów w węzłach klastra; uwzględnia różne ograniczenia, takie jak ograniczenia zasobów lub gwarancje oraz specyfikacje powinowactwa i antypowinowactwa.

Etcd

Spójny i wysoce dostępny magazyn kluczowych wartości używany jako magazyn zapasowy Kubernetes dla wszystkich danych klastra. Jeśli Twój klaster Kubernetes używa etcd jako magazynu zapasowego, upewnij się, że masz plan tworzenia kopii zapasowych dla tych danych.

Cloud-controller-manager

Menedżer kontrolera chmury umożliwia połączenie klastra z interfejsem API dostawcy chmury i oddziela komponenty, które współdziałają z tą platformą chmury, od komponentów, które współdziałają tylko z twoim klastrem.
Uwaga: jeśli używasz Kubernetes we własnej siedzibie lub w środowisku edukacyjnym na własnym komputerze, klaster nie ma menedżera kontrolera chmury.

Następujące kontrolery mogą mieć zależności od dostawcy chmury:

  • Kontroler węzłów (Node controller) – do sprawdzania dostawcy chmury w celu ustalenia, czy węzeł został usunięty z chmury po tym, jak przestanie odpowiadać.
  • Kontroler tras (Route controller) – do konfigurowania tras w podstawowej infrastrukturze chmury.
  • Kontroler usług (Service controller) – do tworzenia, aktualizowania i usuwania systemów równoważenia obciążenia dostawcy chmury.

Cluster Nodes

Kubernetes Cluster Nodes

Węzły klastra to maszyny, które uruchamiają kontenery i są zarządzane przez węzły główne. Kubelet jest podstawowym i najważniejszym kontrolerem w Kubernetes. Odpowiada za sterowanie warstwą wykonania kontenera, zazwyczaj Docker.

Węzły klastra składają się z trzech głównych komponentów:

  • Kubelet
  • Kube-proxy
  • Container Runtime

Kubelet

Agent działający na każdym węźle (node) w klastrze. Zapewnia to, że kontenery działają w Pod.

Kubelet pobiera zestaw specyfikacji PodSpec, które są udostępniane za pomocą różnych mechanizmów, i zapewnia, że kontenery opisane w tych specyfikacjach PodSpecs działają i są w dobrej kondycji. Kubelet nie zarządza kontenerami, które nie zostały stworzone przez Kubernetes.

Kube-Proxy

Serwer proxy Kube to serwer proxy sieci, który działa na każdym węźle w klastrze, realizując część koncepcji usługi Kubernetes.

Kube-proxy utrzymuje reguły sieciowe na węzłach. Te reguły sieciowe umożliwiają komunikację sieciową z Twoimi Podami z sesji sieciowych w Twoim klastrze lub poza nim.

Kube-proxy używa warstwy filtrowania pakietów systemu operacyjnego, jeśli taka istnieje i jest dostępna. W przeciwnym razie kube-proxy przekazuje sam ruch.

Container Runtime

Środowisko uruchomieniowe kontenera to oprogramowanie odpowiedzialne za uruchamianie kontenerów.

Kubernetes obsługuje kilka środowisk wykonawczych kontenerów: Docker, containerd, CRI-O i dowolną implementację Kubernetes CRI (Container Runtime Interface).

Podsumowanie

Kubernetes jest bardzo ciekawym rozwiązaniem, które znacznie przyspiesza oraz ułatwia wdrożenie wysokowydajnej infrastruktury. Sama konfiguracja nie jest łatwa, jednak warto pocierpieć chwile, aby później mieć sprawne środowisko developerskie. Warto zajrzeć do dokumentacji Kubernetesa.


Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT