Czym jest architektura Kubernetes? Znaczenie + najlepsze praktyki
Opublikowany: 2023-06-12Kubernetes odnotował ogromny wzrost popularności od 2014 roku. Zainspirowany wewnętrznym rozwiązaniem do zarządzania klastrami firmy Google, Borg, Kubernetes upraszcza wdrażanie aplikacji i administrowanie nimi. Podobnie jak wszystkie programy do orkiestracji kontenerów , Kubernetes staje się popularny wśród specjalistów IT, ponieważ jest bezpieczny i prosty. Jednak, jak w przypadku każdego narzędzia, rozpoznanie, w jaki sposób jego architektura pomaga efektywniej z niego korzystać.
Poznajmy podstawy architektury Kubernetes, zaczynając od tego, czym jest, co robi i dlaczego jest ważna.
Czym jest architektura Kubernetes?
Architektura Kubernetes lub Kubernetes to platforma typu open source do zarządzania i wdrażania kontenerów. Zapewnia wykrywanie usług, równoważenie obciążenia, mechanizmy regeneracji, orkiestrację kontenerów, środowisko wykonawcze kontenerów i orkiestrację infrastruktury skoncentrowaną na kontenerach.
Firma Google stworzyła adaptowalny system zarządzania kontenerami Kubernetes, który obsługuje konteneryzowane aplikacje w wielu ustawieniach. Pomaga zautomatyzować wdrażanie aplikacji kontenerowych, wprowadzać zmiany oraz skalować te aplikacje w górę iw dół.
Kubernetes to jednak nie tylko orkiestrator kontenerów . W ten sam sposób aplikacje komputerowe działają w systemach MacOS, Windows lub Linux; jest to system operacyjny dla aplikacji natywnych w chmurze, ponieważ służy jako platforma chmurowa dla tych programów.
Co to jest kontener?
Kontenery to standardowe podejście do pakowania aplikacji i ich zależności, dzięki czemu aplikacje mogą być łatwo uruchamiane w różnych środowiskach wykonawczych. Używając kontenerów, możesz podjąć podstawowe kroki w celu skrócenia czasu wdrożenia i zwiększenia niezawodności aplikacji poprzez spakowanie kodu aplikacji, zależności i konfiguracji w jeden, łatwy w użyciu blok konstrukcyjny.
Liczba kontenerów w aplikacjach korporacyjnych może stać się niemożliwa do zarządzania. Aby w pełni wykorzystać swoje kontenery, Kubernetes pomaga je zorganizować.
Do czego służy Kubernetes?
Kubernetes to niezwykle elastyczna i rozszerzalna platforma do obsługi obciążeń kontenerowych. Platforma Kubernetes nie tylko zapewnia środowisko do tworzenia aplikacji natywnych dla chmury, ale także pomaga zarządzać i automatyzować ich wdrożenia.
Ma na celu uwolnienie operatorów aplikacji i programistów od wysiłku związanego z koordynacją podstawowej infrastruktury obliczeniowej, sieciowej i pamięci masowej, umożliwiając im skupienie się wyłącznie na procesach skoncentrowanych na kontenerach w celu samoobsługi. Deweloperzy mogą również tworzyć wyspecjalizowane procedury wdrażania i zarządzania, a także wyższy poziom automatyzacji dla aplikacji składających się z kilku kontenerów.
Kubernetes może obsłużyć wszystkie istotne obciążenia zaplecza, w tym aplikacje monolityczne, programy bezstanowe lub stanowe, mikrousługi, usługi, zadania wsadowe i wszystko pomiędzy.
Kubernetes jest często wybierany ze względu na następujące korzyści.
- Infrastruktura Kubernetes przewyższa infrastrukturę wielu technologii DevOps.
- Kubernetes dzieli kontenery na mniejsze komponenty w celu precyzyjnego zarządzania.
- Kubernetes szybko i regularnie wdraża aktualizacje oprogramowania.
- Kubernetes zapewnia platformę do tworzenia aplikacji natywnych dla chmury.
Architektura i komponenty Kubernetes
Podstawowa architektura Kubernetes składa się z wielu komponentów, zwanych również komponentami K8s, więc zanim od razu przejdziemy do działania, ważne jest, aby zapamiętać następujące pojęcia.
- Podstawowa architektura Kubernetes składa się z płaszczyzny kontrolnej, która zarządza węzłami i węzłami roboczymi, które wykonują aplikacje kontenerowe.
- Podczas gdy płaszczyzna kontroli zarządza wykonywaniem i komunikacją, węzły robocze faktycznie uruchamiają te kontenery.
- Klaster Kubernetes to grupa węzłów, a każdy klaster ma co najmniej jeden węzeł procesu roboczego.
Schemat architektury Kubernetes
Płaszczyzna kontrolna Kubernetes
Płaszczyzna kontrolna to centralne centrum układu nerwowego projektu klastra Kubernetes, w którym znajdują się elementy sterujące klastra. Rejestruje również konfigurację i stan wszystkich obiektów Kubernetes w klastrze.
Płaszczyzna kontroli Kubernetes utrzymuje regularną komunikację z jednostkami obliczeniowymi, aby upewnić się, że klaster działa zgodnie z oczekiwaniami. Kontrolery nadzorują stany obiektów i w odpowiedzi na zmiany w klastrze dopasowują obiekty systemowe do stanu fizycznego, obserwowanego lub bieżącego, tak aby pasowały do pożądanego stanu lub specyfikacji.
Płaszczyzna sterowania składa się z kilku podstawowych elementów, w tym serwera interfejsu programowania aplikacji (API), harmonogramu, menedżera kontrolera itp. Te podstawowe komponenty Kubernetes gwarantują, że kontenery działają z odpowiednimi zasobami. Wszystkie te komponenty mogą działać w jednym głównym węźle, ale wiele firm powiela je w wielu węzłach w celu zapewnienia wysokiej dostępności.
1. Serwer API Kubernetes
Serwer API Kubernetes to fronton płaszczyzny kontrolnej Kubernetes. Ułatwia aktualizacje, skalowanie, konfigurowanie danych i inne rodzaje orkiestracji cyklu życia, oferując zarządzanie interfejsami API dla różnych aplikacji. Ponieważ serwer API jest bramą, użytkownicy muszą mieć do niego dostęp spoza klastra. W tym przypadku serwer API jest tunelem do zasobników, usług i węzłów. Użytkownicy uwierzytelniają się za pośrednictwem serwera API.
2. Harmonogram Kubernetes
Narzędzie kube-scheduler rejestruje statystyki wykorzystania zasobów dla każdego węzła obliczeniowego, ocenia, czy klaster jest zdrowy i decyduje, czy i gdzie należy wdrożyć nowe kontenery. Harmonogram ocenia ogólny stan klastra i wymagania dotyczące zasobów, takie jak jednostka centralna (CPU) lub pamięć. Następnie wybiera odpowiedni węzeł obliczeniowy i planuje zadanie, kapsułę lub usługę, biorąc pod uwagę ograniczenia zasobów lub gwarancje, lokalizację danych, wymagania dotyczące jakości usług, anty-powinowactwo lub standardy powinowactwa.
3. Menedżer kontrolera Kubernetes
W środowisku Kubernetes wiele kontrolerów zarządza stanami punktów końcowych (podów i usług), tokenów i kont usług (przestrzenie nazw), węzłów i replikacją (skalowanie automatyczne). Menedżer kube-controller, często nazywany menedżerem kontrolera chmury lub po prostu kontrolerem, to demon, który zarządza klastrem Kubernetes, wykonując różne obowiązki kontrolera.
Kontroler monitoruje obiekty w klastrze podczas uruchamiania podstawowych pętli kontrolnych Kubernetes. Monitoruje je pod kątem pożądanych i istniejących stanów za pośrednictwem serwera API. Jeśli obecny i zamierzony stan zarządzanych obiektów nie zgadzają się, kontroler podejmuje działania korygujące, aby zbliżyć stan obiektu do pożądanego stanu. Kontroler Kubernetes obsługuje również podstawowe zadania cyklu życia.
4. itd
etcd to rozproszona, odporna na błędy baza danych magazynu klucz-wartość, która przechowuje dane konfiguracyjne i informacje o stanie klastra. Chociaż etcd można skonfigurować niezależnie, często służy jako część płaszczyzny kontrolnej Kubernetes.
Algorytm konsensusu tratwy jest używany do utrzymywania stanu klastra w etcd. Pomaga to w radzeniu sobie z typowym problemem w kontekście replikowanych maszyn stanowych i wymaga uzgodnienia wartości przez wiele serwerów. Raft ustanawia trzy role: lidera, kandydata i naśladowcy oraz tworzy konsensus poprzez głosowanie na lidera.
W rezultacie etcd jest pojedynczym źródłem prawdy (SSOT) dla wszystkich komponentów klastra Kubernetes, odpowiadając na zapytania płaszczyzny kontrolnej i zbierając różne informacje o stanie kontenerów, węzłów i zasobników. etcd służy również do przechowywania informacji o konfiguracji, takich jak ConfigMaps, podsieci, klucze tajne i dane o stanie klastra.
Węzły robocze Kubernetes
Węzły procesu roboczego to systemy uruchamiające kontenery, którymi zarządza płaszczyzna kontroli. Kubelet – podstawowy kontroler Kubernetes – działa na każdym węźle jako agent do interakcji z płaszczyzną kontrolną. Ponadto każdy węzeł uruchamia silnik środowiska wykonawczego kontenera, taki jak Docker lub rkt. W węźle są również uruchamiane inne komponenty do monitorowania, rejestrowania, wykrywania usług i opcjonalnych dodatków.
Niektóre kluczowe komponenty architektury klastra Kubernetes są następujące.
węzły
Klaster Kubernetes musi mieć co najmniej jeden węzeł obliczeniowy, ale może mieć ich znacznie więcej w zależności od wymagań dotyczących pojemności. Ponieważ zasobniki są skoordynowane i zaplanowane do wykonania w węzłach, do zwiększenia pojemności klastra wymagane są dodatkowe węzły. Węzły wykonują pracę klastra Kubernetes. Łączą aplikacje, a także zasoby sieciowe, obliczeniowe i pamięci masowej.
Węzły w centrach danych mogą być maszynami wirtualnymi (VM) natywnymi dla chmury lub serwerami fizycznymi.
Silnik wykonawczy kontenera
Każdy węzeł obliczeniowy używa mechanizmu środowiska uruchomieniowego kontenera do obsługi cykli życia kontenera i zarządzania nim. Kubernetes obsługuje środowiska uruchomieniowe zgodne z inicjatywą otwartego kontenera, takie jak Docker, CRI-O i rkt.
Usługa Kubelet
Kubelet jest dołączany do każdego węzła obliczeniowego. Jest to agent, który komunikuje się z płaszczyzną kontrolną, aby zagwarantować, że kontenery w kapsule działają. Kiedy płaszczyzna kontrolna żąda wykonania określonej akcji w węźle, kubelet pobiera specyfikację zasobnika za pośrednictwem serwera API i działa. Następnie sprawdza, czy powiązane kontenery są w dobrym stanie.
Usługa Kube-proxy
Każdy węzeł obliczeniowy ma sieciowy serwer proxy znany jako kube-proxy, który wspomaga usługi sieciowe Kubernetes. Aby zarządzać połączeniami sieciowymi wewnątrz i na zewnątrz klastra, kube-proxy albo przekazuje ruch dalej, albo jest zależny od warstwy filtrowania pakietów systemu operacyjnego.
Proces kube-proxy działa na każdym węźle, aby zapewnić dostępność usług dla innych stron i poradzić sobie z określonym podziałem hostów na podsieci. Działa jako sieciowy serwer proxy i system równoważenia obciążenia usług w swoim węźle, obsługując routing sieciowy dla ruchu protokołu datagramów użytkownika (UDP) i protokołu kontroli transmisji (TCP). Kube-proxy w rzeczywistości kieruje ruchem do wszystkich punktów końcowych usługi.
Strąki
Do tej pory omówiliśmy pomysły wewnętrzne i związane z infrastrukturą. Pody są jednak kluczowe dla Kubernetes, ponieważ są głównym komponentem skierowanym na zewnątrz, z którym współpracują programiści.
Pod jest najprostszą jednostką w modelu kontenera Kubernetes, reprezentującą pojedynczą instancję aplikacji. Każda kapsuła składa się z pojemnika lub kilku ściśle powiązanych pojemników, które logicznie do siebie pasują i realizują zasady rządzące funkcją pojemnika.
Strąki mają ograniczoną żywotność i ostatecznie umierają po ulepszeniu lub zmniejszeniu skali. Chociaż są efemeryczne, wykonują aplikacje stanowe, łącząc się z pamięcią trwałą.
Pody mogą również skalować się w poziomie, co oznacza, że mogą zwiększać lub zmniejszać liczbę działających instancji. Są również w stanie przeprowadzać aktualizacje kroczące i wdrożenia kanarków.
Pody działają razem w węzłach, więc współdzielą zawartość i pamięć oraz mogą komunikować się z innymi podami za pośrednictwem hosta lokalnego. Kontenery mogą obejmować kilka komputerów, podobnie jak zasobniki. Pojedynczy węzeł może obsługiwać kilka zasobników, z których każdy gromadzi wiele pojemników.
Pod jest centralną jednostką zarządzania w ekosystemie Kubernetes, służącą jako logiczna granica dla kontenerów, które współdzielą zasoby i kontekst. Metoda grupowania podów, która umożliwia jednoczesne działanie kilku zależnych procesów, łagodzi różnice między wirtualizacją a konteneryzacją.
Rodzaje strąków
Kilka rodzajów podów odgrywa istotną rolę w modelu kontenera Kubernetes.
- Domyślny typ, ReplicaSet , gwarantuje, że podana liczba zasobników działa.
- Wdrożenie to deklaratywna metoda zarządzania zasobnikami opartymi na ReplicaSets. Obejmuje to mechanizmy wycofywania i aktualizacji kroczących.
- Daemonset zapewnia, że każdy węzeł uruchamia instancję kapsuły. Wykorzystywane są usługi klastrowe, takie jak monitorowanie kondycji i przekazywanie dzienników.
- StatefulSet jest przeznaczony do zarządzania zasobnikami, które muszą przetrwać lub zachować stan.
- Job i CronJob uruchamiają jednorazowe lub predefiniowane zaplanowane zadania.
Inne komponenty architektury Kubernetes
Kubernetes utrzymuje kontenery aplikacji, ale może również zarządzać powiązanymi danymi aplikacji w klastrze. Użytkownicy Kubernetes mogą żądać zasobów pamięci masowej bez zrozumienia podstawowej infrastruktury pamięci masowej.
Wolumin Kubernetes to katalog, w którym kapsuła może uzyskiwać dostęp do danych i je przechowywać. Typ woluminu określa zawartość woluminu, sposób jego powstania oraz obsługujący go nośnik. Woluminy trwałe (PV) to zasoby pamięci masowej specyficzne dla klastra, często udostępniane przez administratora. PV mogą również przetrwać daną kapsułę.
Kubernetes zależy od obrazów kontenerów , które są przechowywane w rejestrze kontenerów . Może to być rejestr zewnętrzny lub utworzony przez organizację.
Przestrzenie nazw to wirtualne klastry istniejące w klastrze fizycznym. Zostały zaprojektowane z myślą o tworzeniu niezależnych środowisk pracy dla wielu użytkowników i zespołów. Uniemożliwiają również zespołom wzajemne zakłócanie się, ograniczając obiekty Kubernetes, do których mają dostęp. Kontenery Kubernetes w podach mogą komunikować się z innymi podami za pośrednictwem hosta lokalnego i udostępniać adresy IP oraz sieciowe przestrzenie nazw.
Kubernetes kontra Docker Swarm
Zarówno Kubernetes, jak i Docker to platformy, które zapewniają zarządzanie kontenerami i skalowanie aplikacji. Kubernetes zapewnia skuteczne rozwiązanie do zarządzania kontenerami, idealne dla wymagających aplikacji ze skomplikowaną konfiguracją. W przeciwieństwie do tego, Docker Swarm jest zbudowany z myślą o prostocie, co czyni go doskonałym wyborem dla niezbędnych aplikacji, które można szybko wdrożyć i utrzymać.
- Docker Swarm jest łatwiejszy do wdrożenia i konfiguracji niż Kubernetes.
- Kubernetes zapewnia wszechstronną skalowalność opartą na ruchu, podczas gdy Docker Swarm nadaje priorytet szybkiemu skalowaniu.
- Automatyczne równoważenie obciążenia jest dostępne w Docker Swarm, ale nie w Kubernetes. Jednak rozwiązania innych firm mogą łączyć zewnętrzny system równoważenia obciążenia z Kubernetes.
Wymagania Twojej firmy określają właściwe narzędzie.
Rozwiązania do orkiestracji kontenerów
Systemy orkiestracji kontenerów umożliwiają programistom uruchamianie kilku kontenerów do wdrażania aplikacji. Menedżerowie IT mogą używać tych platform do automatyzacji administrowania instancjami, pozyskiwania hostów i łączenia kontenerów.
Poniżej przedstawiono niektóre z najlepszych narzędzi do orkiestracji kontenerów, które ułatwiają wdrażanie, identyfikują nieudane implementacje kontenerów i zarządzają konfiguracjami aplikacji.
5 najlepszych programów do orkiestracji kontenerów:
- Google Cloud Run
- Usługa elastycznego kontenera Amazon (Amazon ECS)
- Silnik Mirantis Kubernetes
- Silnik Google Kubernetes
- Usługa Amazon Elastic Kubernetes (Amazon EKS)
*Pięć wiodących rozwiązań orkiestracji kontenerów z raportu Grid firmy G2 z wiosny 2023 r.
Najlepsze praktyki i zasady projektowania architektury Kubernetes
Wdrożenie strategii platformy, która uwzględnia bezpieczeństwo, zarządzanie, monitorowanie, przechowywanie, pracę w sieci, zarządzanie cyklem życia kontenerów i orkiestrację, ma kluczowe znaczenie. Jednak wdrożenie i skalowanie Kubernetes jest bardzo trudne, zwłaszcza dla firm, które zarządzają zarówno infrastrukturą lokalną, jak i chmurą publiczną. Aby to uprościć, poniżej omówiono kilka najlepszych praktyk, które należy wziąć pod uwagę podczas projektowania klastrów Kubernetes.
- Upewnij się, że zawsze masz najnowszą wersję Kubernetes.
- Zainwestuj w szkolenia dla zespołów deweloperskich i operacyjnych.
- Ustanowienie ładu w całej firmie . Upewnij się, że Twoje narzędzia i dostawcy są zgodni z orkiestracją Kubernetes.
- Zwiększ bezpieczeństwo , włączając techniki skanowania obrazów do przepływu pracy ciągłej integracji i dostarczania (CI/CD). Kod typu open source pobrany z repozytorium GitHub należy zawsze traktować z ostrożnością.
- Zaimplementuj kontrolę dostępu opartą na rolach (RBAC) w całym klastrze. Modele oparte na najmniejszych uprawnieniach i zerowym zaufaniu powinny być normą.
- Korzystaj tylko z użytkowników innych niż root i ustawiaj system plików tylko do odczytu, aby dodatkowo chronić kontenery.
- Unikaj wartości domyślnych , ponieważ proste deklaracje są mniej podatne na błędy i lepiej komunikują cel.
- Podczas korzystania z podstawowych obrazów Docker Hub należy zachować ostrożność, ponieważ mogą one zawierać złośliwe oprogramowanie lub zawierać niepotrzebny kod. Zacznij od oszczędnego, czystego kodu i idź w górę. Mniejsze zdjęcia rosną szybciej, zajmują mniej miejsca w pamięci masowej i szybciej ściągają obrazy.
- Staraj się, aby pojemniki były jak najprostsze . Jeden proces na kontener umożliwia koordynatorowi raportowanie, czy ten proces jest w dobrej kondycji.
- Awaria w razie wątpliwości. Nie uruchamiaj ponownie w przypadku awarii, ponieważ Kubernetes uruchomi ponownie uszkodzony kontener.
- Bądź opisowy . Etykiety opisowe przynoszą korzyści obecnym i przyszłym programistom.
- Jeśli chodzi o mikroserwisy, nie bądź zbyt szczegółowy . Każda funkcja w komponencie kodu logicznego nie może być jego mikrousługą.
- Tam, gdzie to możliwe, zautomatyzuj . Możesz całkowicie pominąć ręczne wdrażanie Kubernetes, automatyzując przepływ pracy CI/CD.
- Użyj sond żywotności i gotowości, aby pomóc w zarządzaniu cyklami życia pod ; w przeciwnym razie strąki mogą zostać zakończone podczas inicjowania lub odbierania żądań użytkowników, zanim będą gotowe.
Wskazówka: zapoznaj się z rozwiązaniami do zarządzania kontenerami, aby uzyskać lepsze praktyki wdrażania.
Rozważ swoje pojemniki
Kubernetes, oprogramowanie do zarządzania skoncentrowane na kontenerach, stało się de facto standardem wdrażania i obsługi aplikacji kontenerowych ze względu na szerokie wykorzystanie kontenerów w firmach. Architektura Kubernetes jest prosta i intuicyjna. Chociaż daje menedżerom IT większą kontrolę nad ich infrastrukturą i wydajnością aplikacji, jest jeszcze wiele do nauczenia się, aby jak najlepiej wykorzystać tę technologię.
Chcesz dokładniej zgłębić temat? Dowiedz się o rosnącym znaczeniu konteneryzacji w przetwarzaniu w chmurze!