Co to jest Kubernetes? Twoja następna platforma aplikacji

Kubernetes to popularna platforma typu open source do orkiestracji kontenerów - to znaczy do zarządzania aplikacjami zbudowanymi z wielu, w dużej mierze samodzielnych środowisk wykonawczych zwanych kontenerami. Kontenery stają się coraz bardziej popularne od czasu uruchomienia projektu konteneryzacji Dockera w 2013 roku, ale koordynacja dużych, rozproszonych aplikacji kontenerowych może być coraz trudniejsza. Dzięki znacznemu ułatwieniu zarządzania aplikacjami kontenerowymi na dużą skalę Kubernetes stał się kluczową częścią rewolucji kontenerowej.

Co to jest orkiestracja kontenerów?

Kontenery obsługują rozdzielanie problemów podobne do maszyn wirtualnych, ale przy znacznie mniejszym nakładzie pracy i znacznie większej elastyczności. W rezultacie kontenery zmieniły sposób myślenia ludzi o tworzeniu, wdrażaniu i utrzymywaniu oprogramowania. W architekturze kontenerowej różne usługi, które składają się na aplikację, są umieszczane w oddzielnych kontenerach i wdrażane w klastrze maszyn fizycznych lub wirtualnych. Stwarza to jednak potrzebę orkiestracji kontenerów - narzędzia, które automatyzuje wdrażanie, zarządzanie, skalowanie, tworzenie sieci i dostępność aplikacji opartych na kontenerach.

Co to jest Kubernetes?

Kubernetes to projekt open source, który stał się jednym z najpopularniejszych narzędzi do orkiestracji kontenerów; umożliwia wdrażanie aplikacji wielokontenerowych i zarządzanie nimi na dużą skalę. Podczas gdy w praktyce Kubernetes jest najczęściej używany z Dockerem, najpopularniejszą platformą kontenerową, może również współpracować z dowolnym systemem kontenerowym, który jest zgodny ze standardami Open Container Initiative (OCI) dla formatów obrazów kontenerów i środowisk wykonawczych. A ponieważ Kubernetes jest oprogramowaniem typu open source, ze stosunkowo niewielkimi ograniczeniami dotyczącymi sposobu, w jaki może być używany, może być swobodnie używany przez każdego, kto chce uruchamiać kontenery, prawie wszędzie, gdzie chcą je uruchamiać - lokalnie, w chmurze publicznej lub jedno i drugie .

Google i Kubernetes

Kubernetes rozpoczął życie jako projekt w Google. Jest następcą - choć nie bezpośrednio potomkiem - Google Borg, wcześniejszego narzędzia do zarządzania kontenerami, z którego Google korzystało wewnętrznie. Google Open Source Kubernetes w 2014 roku, częściowo dlatego, że rozproszone architektury mikrousług, które obsługuje Kubernetes, ułatwiają uruchamianie aplikacji w chmurze. Google postrzega przyjęcie kontenerów, mikrousług i Kubernetes jako potencjalnie kierujących klientów do usług w chmurze (chociaż Kubernetes z pewnością współpracuje również z Azure i AWS). Kubernetes jest obecnie obsługiwany przez Cloud Native Computing Foundation, która sama jest pod parasolem Linux Foundation.

Kubernetes vs. Docker i Kubernetes vs. Docker Swarm

Kubernetes nie zastępuje Dockera, ale go ulepsza. Jednak Kubernetes ma zastąpić niektóre z wyższego poziomu technologii, które pojawiły się wokół Döcker.

Jedną z takich technologii jest Docker Swarm, orkiestrator dołączony do Dockera. Nadal można używać Docker Swarm zamiast Kubernetes, ale Docker Inc. zdecydował się uczynić Kubernetes częścią wersji Docker Community i Docker Enterprise w przyszłości.

Nie chodzi o to, że Kubernetes jest bezpośrednim zamiennikiem Docker Swarm. Kubernetes jest znacznie bardziej złożony niż Swarm i wymaga więcej pracy do wdrożenia. Ale znowu, praca ta ma przynieść duże korzyści w dłuższej perspektywie - łatwiejszą w zarządzaniu, odporną infrastrukturę aplikacji. W przypadku prac programistycznych i mniejszych klastrów kontenerów Docker Swarm przedstawia prostszy wybór. 

Kubernetes kontra Mesos

Innym projektem, o którym mogłeś słyszeć jako konkurent Kubernetes, jest Mesos. Mesos to projekt Apache, który pierwotnie pojawił się od programistów na Twitterze; faktycznie był postrzegany jako odpowiedź na projekt Google Borg.

W rzeczywistości Mesos oferuje usługi orkiestracji kontenerów, ale jego ambicje wykraczają daleko poza to: ma być rodzajem systemu operacyjnego w chmurze, który może koordynować zarówno elementy kontenerowe, jak i nieskonteneryzowane. W tym celu w Mesosie może działać wiele różnych platform - w tym sam Kubernetes.

Architektura Kubernetes: Jak działa Kubernetes

Architektura Kubernetes wykorzystuje różne koncepcje i abstrakcje. Niektóre z nich to wariacje na temat istniejących, znanych pojęć, ale inne są specyficzne dla Kubernetes.

Klastry Kubernetes

Najwyższy poziom abstrakcji Kubernetes, klaster , odnosi się do grupy maszyn, na których działa Kubernetes (sama w sobie jest aplikacją klastrową) i zarządzanych przez nią kontenerów. Klaster Kubernetes musi mieć moduł główny , system, który wydaje polecenia i kontroluje wszystkie inne maszyny Kubernetes w klastrze. Wysoce dostępny klaster Kubernetes replikuje obiekty mastera na wielu maszynach. Ale tylko jeden master na raz uruchamia program do planowania zadań i menedżera kontrolera.

Węzły i pody Kubernetes

Każdy klaster zawiera węzły Kubernetes . Węzły mogą być maszynami fizycznymi lub maszynami wirtualnymi. Ponownie, idea jest abstrakcyjna: niezależnie od tego, na czym działa aplikacja, Kubernetes obsługuje wdrażanie na tym podłożu. Kubernetes umożliwia nawet zapewnienie, że niektóre kontenery działają tylko na maszynach wirtualnych lub tylko na fizycznym komputerze.

Węzły uruchamiają pody , najbardziej podstawowe obiekty Kubernetes, które można tworzyć lub którymi można zarządzać. Każdy pod reprezentuje pojedyncze wystąpienie aplikacji lub działającego procesu w Kubernetes i składa się z co najmniej jednego kontenera. Kubernetes uruchamia, zatrzymuje i replikuje wszystkie kontenery w kapsule jako grupę. Pody skupiają uwagę użytkownika na aplikacji, a nie na samych kontenerach. Szczegółowe informacje o tym, jak należy skonfigurować Kubernetes, od stanu podów wzwyż, są przechowywane w Etcd , rozproszonym magazynie kluczy i wartości.

Pody są tworzone i niszczone w węzłach w razie potrzeby, aby były zgodne z żądanym stanem określonym przez użytkownika w definicji poda. Kubernetes zapewnia abstrakcję zwaną kontrolerem do obsługi logistyki sposobu obracania, rozwijania i obracania strąków. Kontrolery występują w kilku różnych smakach w zależności od rodzaju zarządzanej aplikacji. Na przykład niedawno wprowadzony kontroler „StatefulSet” jest używany do obsługi aplikacji wymagających trwałego stanu. Inny rodzaj kontrolera, wdrożenie , służy do skalowania aplikacji w górę lub w dół, aktualizowania aplikacji do nowej wersji lub przywracania aplikacji do znanej dobrej wersji, jeśli wystąpi problem.

Usługi Kubernetes

Ponieważ pody żyją i umierają w razie potrzeby, potrzebujemy innej abstrakcji do obsługi cyklu życia aplikacji. Aplikacja powinna być jednostką trwałą, nawet jeśli pody, w których działają kontenery, które zawierają aplikację, nie są trwałe. W tym celu Kubernetes zapewnia abstrakcję zwaną usługą.

Usługa w Kubernetes opisuje, w jaki sposób można uzyskać dostęp do danej grupy podów (lub innych obiektów Kubernetes) za pośrednictwem sieci. Jak podaje dokumentacja Kubernetes, pody, które stanowią zaplecze aplikacji, mogą ulec zmianie, ale front-end nie powinien o tym wiedzieć ani śledzić. Dzięki usługom jest to możliwe.

Kilka innych elementów wewnętrznych dla Kubernetes dopełnia obraz. W scheduler paczki spośród obciążeń do węzłów tak, że są one w równowadze całej zasobów i tak, że wdrożeń spełniających wymogi definicji aplikacji. W kierownik kontroler zapewnia, że stan systemu-aplikacji, obciążeń, itp-mecze pożądany stan zdefiniowane w ustawieniach konfiguracyjnych Etcd jest.

Należy pamiętać, że żaden z niskopoziomowych mechanizmów używanych przez kontenery, jak sam Docker, nie jest zastępowany przez Kubernetes. Zamiast tego Kubernetes zapewnia większy zestaw abstrakcji do używania tych mechanizmów w celu utrzymania aplikacji działających na dużą skalę.

Kubernetes Ingress

Uważa się, że usługi Kubernetes działają w klastrze. Ale będziesz chciał mieć dostęp do tych usług ze świata zewnętrznego. Kubernetes ma kilka składników, które ułatwiają to z różnym stopniem prostoty i niezawodności, w tym NodePort i LoadBalancer, ale najbardziej elastycznym składnikiem jest Ingress. Ingress to interfejs API zarządzający zewnętrznym dostępem do usług klastra, zwykle za pośrednictwem protokołu HTTP.

Ingress wymaga trochę konfiguracji, aby poprawnie skonfigurować - Matthew Palmer, który napisał książkę o rozwoju Kubernetes, przeprowadza Cię przez ten proces w swojej witrynie internetowej.

Panel Kubernetes

Jednym ze składników Kubernetes, który pomaga zachować kontrolę nad wszystkimi pozostałymi składnikami, jest Dashboard, internetowy interfejs użytkownika, za pomocą którego można wdrażać i rozwiązywać problemy z aplikacjami oraz zarządzać zasobami klastra. Pulpit nawigacyjny nie jest instalowany domyślnie, ale dodanie go nie jest zbyt trudne.

Powiązane wideo: Co to jest Kubernetes?

W tym 90-sekundowym filmie dowiesz się o Kubernetes, systemie open source do automatyzacji aplikacji kontenerowych, od jednego z wynalazców tej technologii, Joe Bedy, założyciela i dyrektora ds. Technologii w Heptio.

Zalety Kubernetes

Ponieważ Kubernetes wprowadza nowe abstrakcje i koncepcje, a krzywa uczenia się Kubernetes jest wysoka, normalne jest pytanie, jakie są długoterminowe korzyści z korzystania z Kubernetes. Oto podsumowanie niektórych konkretnych sposobów, w jakie uruchamianie aplikacji w Kubernetes staje się łatwiejsze.

Kubernetes zarządza stanem aplikacji, replikacją, równoważeniem obciążenia i alokacją zasobów sprzętowych

Jednym z najbardziej podstawowych obowiązków, które Kubernetes zdejmuje z rąk, jest praca polegająca na utrzymywaniu aplikacji, działającej i reagującej na potrzeby użytkowników. Aplikacje, które stają się „niezdrowe” lub nie odpowiadają opisanej im definicji zdrowia, mogą zostać automatycznie wyleczone.

Kolejną korzyścią, jaką zapewnia Kubernetes, jest maksymalizacja wykorzystania zasobów sprzętowych, w tym pamięci, pamięci masowej we / wy i przepustowości sieci. Aplikacje mogą mieć ustawione miękkie i twarde limity wykorzystania zasobów. Wiele aplikacji, które używają minimalnych zasobów, można spakować razem na tym samym sprzęcie; aplikacje, które muszą się rozciągnąć, można umieszczać w systemach, w których mają miejsce na rozwój. I znowu wdrażanie aktualizacji w klastrze lub wycofywanie aktualizacji w przypadku awarii aktualizacji można zautomatyzować.

Kubernetes ułatwia wdrażanie wstępnie skonfigurowanych aplikacji dzięki wykresom Helm

Menedżery pakietów, takie jak APT Debiana Linux i Pip w języku Python, oszczędzają użytkownikom kłopotów związanych z ręczną instalacją i konfiguracją aplikacji. Jest to szczególnie przydatne, gdy aplikacja ma wiele zależności zewnętrznych.

Helm jest zasadniczo menedżerem pakietów dla Kubernetes. Wiele popularnych aplikacji musi działać w Kubernetes jako grupa współzależnych kontenerów. Helm udostępnia mechanizm definicji, „wykres”, który opisuje, jak aplikacja lub usługa może być uruchamiana jako grupa kontenerów w Kubernetes.

Możesz tworzyć własne wykresy Helm od podstaw, co może być konieczne, jeśli tworzysz niestandardową aplikację do wdrożenia wewnętrznego. Ale jeśli używasz popularnej aplikacji, która ma wspólny wzorzec wdrażania, istnieje duża szansa, że ​​ktoś już skomponował dla niej wykres Helm i opublikował go w oficjalnym repozytorium wykresów Helm. Innym miejscem, w którym można szukać oficjalnych wykresów Helm, jest katalog Kubeapps.com.

Kubernetes upraszcza zarządzanie pamięcią masową, wpisami tajnymi i innymi zasobami związanymi z aplikacjami

Pojemniki mają być niezmienne; cokolwiek w nie włożysz, nie powinno się zmienić. Jednak aplikacje potrzebują stanu, co oznacza, że ​​potrzebują niezawodnego sposobu radzenia sobie z zewnętrznymi wolumenami pamięci. Jest to tym bardziej skomplikowane, że kontenery żyją, umierają i odradzają się przez cały okres użytkowania aplikacji.

Kubernetes zapewnia abstrakcje, aby umożliwić kontenerom i aplikacjom obsługę pamięci w taki sam sposób, jak inne zasoby. Dostęp do wielu popularnych rodzajów pamięci, od woluminów Amazon EBS po zwykłe stare udziały NFS, można uzyskać za pośrednictwem sterowników pamięci masowej Kubernetes, zwanych woluminami. Zwykle woluminy są przypisane do określonego kapsuły, ale podtyp wolumenu o nazwie „Trwały wolumin” może być używany do danych, które muszą istnieć niezależnie od dowolnego kapsuły.

Kontenery często muszą pracować z „sekretami” - danymi uwierzytelniającymi, takimi jak klucze API lub hasła usług, których nie chcesz zakodować na stałe w kontenerze lub ukryć otwarcie na woluminie dysku. Chociaż dostępne są do tego rozwiązania innych firm, takie jak sekrety Docker i HashiCorp Vault, Kubernetes ma własny mechanizm do natywnej obsługi tajemnic, chociaż musi być skonfigurowany ostrożnie. Na przykład Etcd musi być skonfigurowany do korzystania z SSL / TLS podczas wysyłania sekretów między węzłami, a nie w postaci zwykłego tekstu. 

Aplikacje Kubernetes mogą działać w środowiskach hybrydowych i wielochmurowych

Jednym z wieloletnich marzeń związanych z przetwarzaniem w chmurze jest możliwość uruchamiania dowolnej aplikacji w dowolnej chmurze lub w dowolnej kombinacji chmur publicznych lub prywatnych. Ma to na celu nie tylko uniknięcie uzależnienia od dostawcy, ale także wykorzystanie funkcji charakterystycznych dla poszczególnych chmur.

Kubernetes zapewnia zestaw prymitywów, zwanych łącznie federacją, do utrzymywania synchronizacji wielu klastrów w wielu regionach i chmurach. Na przykład dane wdrożenie aplikacji może być spójne między wieloma klastrami, a różne klastry mogą udostępniać wykrywanie usług, aby można było uzyskać dostęp do zasobu zaplecza z dowolnego klastra. Federacji można również używać do tworzenia wysoce dostępnych lub odpornych na błędy wdrożeń Kubernetes, niezależnie od tego, czy obejmujesz wiele środowisk chmurowych.

Federacja jest wciąż stosunkowo nowa w Kubernetes. Nie wszystkie zasoby interfejsu API są jeszcze obsługiwane w wystąpieniach federacyjnych, a aktualizacje nie mają jeszcze infrastruktury automatycznego testowania. Ale te niedociągnięcia mają zostać usunięte w przyszłych wersjach Kubernetes.

Skąd wziąć Kubernetes