Kubernetes

menu icon

Kubernetes

Kubernetes jest platformą typu Open Source do orkiestracji kontenerów, która automatyzuje wdrażanie i skalowanie aplikacji oraz zarządzanie nimi. Dowiedz się, jak środowisko Kubernetes umożliwia programowanie z myślą o chmurze w przystępny cenowo sposób.

Czym jest platforma Kubernetes?

Kubernetes — także pod nazwą „k8s” lub „kube” — to platforma orkiestracji kontenerów, służąca do planowania i automatyzacji zadań towarzyszących wdrażaniu i skalowaniu skonteneryzowanych aplikacji, a także zarządzaniu nimi.

Kubernetes został opracowany przez inżynierów Google i udostępniony jako technologia Open Source w 2014 roku. Jej przodkiem był Borg, platforma orkiestracji kontenerów używana wewnętrznie w firmie Google. W języku greckim słowo „kubernetes” oznacza kapitana lub pilota, stąd ster w logo rozwiązania Kubernetes (odsyłacz prowadzi poza serwis IBM).

Dziś Kubernetes i kompleksowy ekosystem kontenerów stanowią platformę obliczeniową ogólnego przeznaczenia, która konkuruje z maszynami wirtualnymi (VM) o tytuł fundamentu nowoczesnej infrastruktury i aplikacji chmurowych. Ekosystem ten umożliwia organizacjom dostarczanie wysoce wydajnej platformy w modelu usługowym (PaaS), przeznaczonej do zadań związanych z infrastrukturą i operacjami oraz do rozwiązywania problemów dotyczących tworzenia oprogramowania od początku przeznaczonego dla chmury. Dzięki niemu zespoły programistów mogą skupić się tylko i wyłącznie na innowacjach i pisaniu kodu.      

W poniższym nagraniu Sai Vennam wyjaśnia podstawy platformy Kubernetes (10:59):

Czym są kontenery?

Zacznijmy od definicji: kontener jest wykonywalną jednostką oprogramowania, w której kod aplikacji — wraz z bibliotekami i zależnościami — jest spakowany tak, aby można było go wywołać w dowolnym miejscu lokalnie lub w chmurze.

Kontenery korzystają z formy systemu operacyjnego — wirtualizacji — który umożliwia aplikacjom współużytkowanie systemu operacyjnego przez izolowanie procesów i kontrolę ilości zasobów procesora, pamięci i dysków, do których te procesy mają dostęp.

Kontenery vs maszyny wirtualne vs tradycyjna infrastruktura

Łatwiej zrozumieć działanie kontenerów myśląc o nich jako o ostatnim punkcie na kontinuum automatyzacji i abstrakcji infrastruktury IT.

W infrastrukturze tradycyjnej aplikacje działają na serwerze fizycznym i wykorzystują wszystkie dostępne zasoby. Stawia to przed dylematem: pozwolić na działanie kilku aplikacji na jednym serwerze z nadzieją, że żadna z nich nie „zablokuje” zasobów kosztem pozostałych czy przeznaczyć po jednym serwerze dla każdej aplikacji, co nie jest skalowalne i zużywa więcej zasobów.

Maszyny wirtualne (VM) są serwerami niepołączonymi z fizycznym sprzętem komputerowym. Dzięki temu wiele maszyn wirtualnych może być uruchamianych na jednym serwerze fizycznym lub jedna maszyna może obejmować działaniem więcej niż jeden serwer fizyczny. Każda maszyna wirtualna posiada własną instancję systemu operacyjnego, a użytkownik może odizolować aplikacje w osobnej maszynie wirtualnej. Zmniejsza się tym samym prawdopodobieństwo, że aplikacje działające na tym samym sprzęcie fizycznym będą miały na siebie wpływ. Maszyny wirtualne pozwalają efektywniej wykorzystać zasoby i są o wiele łatwiejsze i bardziej opłacalne w porównaniu z tradycyjną infrastrukturą. Oprócz tego łatwo nimi zarządzać — gdy znika potrzeba działania danej aplikacji, można usunąć maszynę wirtualną.

Aby uzyskać więcej informacji na temat maszyn wirtualnych, przeczytaj podręcznik „Maszyny wirtualne: niezbędny podręcznik”.

Kontenery przenoszą ten system na wyższy poziom — oprócz współużytkowania zwirtualizowanego sprzętu dzielą one również jądro systemu operacyjnego. Kontenery oferują izolację, skalowalność i łatwość zarządzania maszyn wirtualnych, ale ponieważ nie posiadają własnej kopii systemu operacyjnego, są od nich lżejsze (zajmą mniej miejsca). Charakteryzuje je większa wydajność pod względem wykorzystania zasobów — pozwalają na uruchamianie większej ilości aplikacji na mniejszej liczbie maszyn (wirtualnych i fizycznych), przy mniejszej liczbie instancji systemu operacyjnego. Kontenery są też łatwiejsze w przenoszeniu w centrum przetwarzania danych, lokalnie i w chmurze. Doskonale sprawdzą się do sprawnego tworzenia i eksploatacji oprogramowania.

Kontenery: niezbędny podręcznik” szczegółowo wyjaśnia czym są kontenery i proces konteneryzacji. Różnice między kontenerami a maszynami wirtualnymi zostały przedstawione we wpisie na blogu pt. „Kontenery vs maszyny wirtualne: co za różnica?”.

Czym jest Docker?

Docker jest najbardziej popularnym narzędziem do tworzenia i uruchamiania kontenerów w systemie Linux®. Pierwsze kontenery pojawiły się dekady temu (z takimi technologiami jak FreeBSD Jails i AIX Workload Partitions). Zyskały na popularności dopiero w 2013 roku, gdy przyjazne dla programistów i chmury oprogramowanie Docker umożliwiło ich szersze wykorzystanie.

Docker powstał jako projekt typu Open Source. Dziś nazwa ta — Docker Inc. — odnosi się też do nazwy przedsiębiorstwa, które dostarcza to rozwiązanie. Docker jest zestawem narzędzi do zarządzania kontenerami, które opiera się na projekcie typu Open Source (i rozszerza go dzięki ciągłym ulepszeniom).

Docker został zbudowany w oparciu o tradycyjną technologię kontenerów Linux (LXC), ale umożliwia bardziej granularną wirtualizację procesów jądra systemu Linux i posiada więcej funkcji, dzięki którym ułatwia tworzenie, wdrażanie i zabezpieczanie kontenerów oraz zarządzanie nimi.

Dziś Docker nie jest jedyną platformą kontenerową (oprócz niej dostępne są np. Open Container Initiative (OCI), CoreOS i Canonical (Ubuntu) LXD), ale stanowi na tyle popularne rozwiązanie, że praktycznie jest synonimem kontenerów i czasami mylnie bierze się je za konkurenta takich technologii, jak Kubernetes (obejrzyj film „Kubernetes vs Docker: nie musisz wybierać”).

Orkiestracja kontenerów z Kubernetes

W miarę wzrostu popularności kontenerów — niektóre organizacje mają ich setki lub nawet tysiące — zespoły operacyjne muszą sprawniej planować i automatyzować wdrażanie, funkcje sieciowe, skalowalność i dostępność kontenerów. Tak narodziła się branża orkiestracji kontenerów.

Mimo że alternatywne rozwiązania do orkiestracji kontenerów — przede wszystkim Docker Swarm i Apache Mesos — z początku cieszyły się zainteresowaniem, Kubernetes szybko stał się najbardziej powszechną opcją (w pewnym momencie był najszybciej rozwijającym się projektem w historii oprogramowania typu Open Source).

Programiści wybierali (i nadal wybierają) Kubernetes ze względu na jego funkcjonalność, rozległy i rozwijający się ekosystem narzędzi uzupełniających typu Open Source, a także usługi wsparcia i przenośność (niektórzy dostawcy chmury oferują w pełni zarządzane usługi Kubernetes).

Dowiedz się więcej na temat orkiestracji kontenerów, oglądając film „Orkiestracja kontenerów w pigułce” (08:59):

Co robi Kubernetes?

Kubernetes planuje i automatyzuje te i inne zadania związane z kontenerami:

  • Wdrożenie: wdrażaj określoną liczbę kontenerów na określonym hoście i utrzymuj ich wykorzystanie na ustalonym poziomie.
  • Uruchamianie: nowe spojrzenie na wdrożenia. Kubernetes umożliwia inicjowanie, wstrzymywanie, wznawianie lub wycofywanie wdrożeń.
  • Wykrywanie usług: Kubernetes może automatycznie odsłonić kontener w Internecie lub przed kontenerami wykorzystującymi nazwę lub adres IP sieci DNS.
  • Udostępnianie pamięci masowej: ustaw Kubernetes tak, aby udostępniał zasoby pamięci — lokalne lub w chmurze — w odpowiedzi na Twoje potrzeby.
  • Równoważenie obciążeń i skalowanie: podczas ruchu danych między kontenerami Kubernetes może równoważyć obciążenia i skalować, aby podzielić ruch w sieci w celu utrzymania stabilności.
  • Samonaprawa dla wysokiej dostępności: jeśli w kontenerze wystąpi błąd, Kubernetes może go zresetować lub automatycznie zastąpić. Może również usuwać kontenery, które nie spełniają ustalonych wymagań.

Kubernetes kontra Docker

Z pewnością już rozumiesz, że choć Kubernetes jest alternatywą dla rozwiązania Docker Swarm, nie jest (wbrew powszechnej błędnej opinii) alternatywą, ani konkurencją dla Dockera.

Jeśli wykorzystujesz platformę Docker i tworzysz w jej oparciu wysoce skalowalne wdrożenia, orkiestracja z Kubernetes jest kolejnym krokiem ku skutecznemu zarządzaniu tymi obciążeniami. Aby dowiedzieć się więcej, obejrzyj film „Kubernetes vs Docker: Docker: nie musisz wybierać” (08:03):

Architektura Kubernetes

Głównymi komponentami architektury Kubernetes są:

Klastry i węzły (obliczenia)

Klastry to elementy architektury Kubernetes. Składają się z węzłów, z których każdy reprezentuje jednego hosta obliczeniowego (maszynę wirtualną lub fizyczną).

Każdy klaster składa się z wielu węzłów procesów roboczych, które wdrażają i uruchamiają skonteneryzowane aplikacje i zarządzają nimi oraz z jednego węzła głównego, który kontroluje i monitoruje węzły procesów roboczych.

Węzeł główny uruchamia usługę programu planującego, która automatyzuje wdrażanie kontenerów w oparciu o wymagania dotyczące wdrażania określone przez programistę i dostępną moc obliczeniową. Każdy węzeł procesów roboczych zawiera narzędzie używane do zarządzania kontenerami — na przykład Docker — i agenta oprogramowania o nazwie Kubelet, który odbiera i wykonuje komendy węzła głównego.

Aby dowiedzieć się więcej o klastrach Kubernetes, przeczytaj wpis na blogu: „Klastry Kubernetes: architektura dla szybkiego, kontrolowanego dostarczania aplikacji w chmurze”.

Pody i wdrożenia (oprogramowanie)

Pody to grupy kontenerów, które współużytkują zasoby obliczeniowe i sieć. Są również jednostką skalowalności Kubernetes: jeśli kontener w podzie jest zbyt obciążony, Kubernetes replikuje pod w innych węzłach klastra. Z tego powodu korzystne jest utrzymanie niewielkich podów, zawierających tylko te kontenery, które muszą współużytkować zasoby.

Wdrożenie kieruje tworzeniem i stanem skonteneryzowanej aplikacji i wywołuje jej działanie. Określa, ile kopii podów powinno działać w klastrze. Jeśli w podzie wystąpi błąd, wdrożenie utworzy nowy.

Dowiedz się więcej na temat wdrożeń Kubernetes, oglądając film „Wdrożenia Kubernetes: rozpocznij jak najszybciej” (03:54):

Zgłębiaj architekturę Kubernetes, biorąc udział w kursie online: „Kubernetes 101”.

Zapoznaj się też z wpisem na blogu „Architektura Kubernetes: cztery podejścia do rozwiązań kontenerowych”.

Istio service mesh

Kubernetes może wdrażać i skalować pody, ale nie potrafi automatyzować routingu i zarządzać nim. W dodatku nie udostępnia żadnych narzędzi do monitorowania, zabezpieczania ani debugowania tych połączeń. Ponieważ liczba kontenerów w klastrze rośnie, ilość możliwych połączeń między nimi wzrasta wykładniczo (np. dwa kontenery mają dwa połączenia, ale 10 podów — już 90), co może znacznie utrudniać konfigurację i zarządzanie.

Wykorzystaj potencjał Istio, rozwiązania Open Source typu service mesh dla klastrów Kubernetes. W każdym klastrze Kubernetes Istio umieszcza kontener „przyczepkę” — zasadniczo niewidoczny dla programistów i administratorów — który konfiguruje i monitoruje interakcje między innymi kontenerami i zarządza nimi.

Dzięki Istio możesz ustawić pojedynczą strategię, która konfiguruje połączenia między kontenerami, eliminując konieczność konfiguracji każdego połączenia z osobna. To sprawia, że łatwiej debugować połączenia między kontenerami.

Istio udostępnia również panel kontrolny dla administratorów i zespołów zajmujących się tworzeniem i eksploatacją oprogramowania, z którego mogą korzystać, aby monitorować opóźnienia, błędy i inne parametry połączeń między kontenerami. Jego kolejną zaletą jest bezpieczeństwo — na przykład funkcja zarządzania tożsamością zapobiega nieautoryzowanym wywołaniom usług w kontenerach. Mechanizmy uwierzytelniania, autoryzacji i kontroli umożliwiają specjalistom w dziedzinie bezpieczeństwa monitorowanie stanu klastra.

Dowiedz się więcej, czytając artykuł „Czym jest Istio?”, obejrzyj wideo i poznaj przykłady zastosowania.

Knative i przetwarzanie bezserwerowe

Knative (wymawiane „kej-nejtiw”) jest platformą typu Open Source, stanowiącą uzupełnienie Kubernetes. Z jej wykorzystaniem wiążą się dwie główne zalety:

Knative zapewnia łatwe wprowadzenie do przetwarzania bezserwerowego

Przetwarzanie bezserwerowe jest stosunkowo nowym sposobem wdrażania kodu, dzięki któremu aplikacje tworzone z myślą o chmurze są bardziej wydajne i opłacalne. Zamiast wdrażać bieżącą instancję kodu, która bezczynnie oczekuje na żądania, przetwarzanie bezserwerowe udostępnia kod w miarę potrzeb — skalując go w górę lub w dół w zależności od zapotrzebowania — po czym wyłącza go, gdy nie jest używany. Przetwarzanie bezserwerowe zapobiega marnowaniu mocy obliczeniowej i zmniejsza koszty — płacisz tylko za wywoływany kod, który w danej chwili jest wykonywany.

Knative umożliwia programistom zbudowanie kontenera raz i uruchamianie go jako usługi programowej lub jako funkcji bezserwerowej. Wszystko to w sposób przejrzysty dla programisty: Knative obsługuje szczegóły w tle, a programista może skupić się na kodzie.

Knative upraszcza tworzenie i orkiestrację kontenerów

Dla programistów konteneryzacja kodu wymaga wykonania dużej liczby powtarzalnych czynności, a orkiestracja kontenerów wiąże się z wieloma konfiguracjami i tworzeniem skryptów (np. tworzeniem plików konfiguracyjnych, instalowaniem zależności, zarządzaniem, rejestrowaniem i śledzeniem oraz pisaniem skryptów ciągłej integracji/ciągłego wdrażania (CI/CD).

Knative ułatwia wykonywanie tych zadań, automatyzując je przy pomocy trzech komponentów:

  • Tworzenie: ten wbudowany komponent automatycznie przekształca kod źródłowy w funkcję lub kontener od początku przeznaczony dla chmury. Pobiera on kod z repozytorium, instaluje wymagane zależności, tworzy obraz kontenera i umieszcza go w rejestrze kontenerów, do którego dostęp mają inni programiści. Do nich należy jedynie określenie lokalizacji tych komponentów tak, by Knative mógł je odszukać. Pozostałe czynności są zautomatyzowane.
  • Usługi: komponent ten umożliwia pracę kontenerów jako skalowalnych usług. Jest w stanie skalować w górę dotysiącainstancji kontenerów lub skalować w dół do zerowej wartości (nazywane skalowaniem do zera). Dodatkowo komponent ten posiada dwie przydatne funkcje:
    • Konfigurację, która zapisuje wersje kontenera (tak zwane obrazy stanu) za każdym razem, gdy jest on wykorzystywany i pozwala na jednoczesne uruchamianie współistniejących wersji.
    • Usługi routingu, które umożliwią zarządzanie ruchem w tych wersjach. Funkcje te mogą być wykorzystywane razem, aby stopniowo wdrażać kontener lub przeprowadzić test skonteneryzowanej aplikacji przed wprowadzeniem jej do produkcji na skalę światową.
  • Zdarzenia: komponent ten umożliwia wywoływanie usług lub funkcji opartych na kontenerach przez określone zdarzenia. Jest to jedna z kluczowych możliwości Knative; musi istnieć element, który powiadomi system o konieczności wywołania funkcji. Zdarzenie umożliwia zespołom wyrażenie „zainteresowania” typami zdarzeń. Automatycznie łączy się ze źródłem zdarzenia i przekierowuje je do kontenera, eliminując konieczność programowania tych połączeń.

Dowiedz się więcej o Knative, czytając „Knative: niezbędny podręcznik”.

Modyfikacje Kubernetes w serwisie GitHub i dowody jego rosnącej popularności

Kubernetes jest jednym z najszybciej rozwijających się projektów typu Open Source w historii, a tempo tego rozwoju stale rośnie. Programiści i przedsiębiorstwa, w których pracują coraz częściej decydują się na jego wykorzystanie. Oto kilka punktów wartych odnotowania:

  • W momencie publikacji niniejszego wpisu w repozytorium Kubernetes w serwisie GitHub (odsyłacz prowadzi poza serwis IBM) znajdowało się 86 200 modyfikacji — w tym blisko 6 000 opublikowanych w ciągu ostatnich czterech miesięcy. Sam projekt wspiera ponad 2 300 aktywnych kontrybutorów. Według Cloud Native Computing Foundation (odsyłacz prowadzi poza serwis IBM), we wszystkich repozytoriach Kubernetes wprowadzono ponad 148 000 modyfikacji (m.in. w Kubernetes Dashboard, Kubernetes MiniKube, itp.).
  • Ponad 1 500 firm korzysta z Kubernetes w swoich stosach oprogramowania. Należą do nich światowej sławy przedsiębiorstwa, takie jak: AirBnB, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder i oczywiście IBM. Zapoznaj się z tym i innymi opisami wdrożenia (odsyłacz prowadzi poza serwis IBM)
  • Według badań przeprowadzonych w lipcu 2019 roku, których wyniki cytowano na łamach magazynu Container Journal (odsyłacz prowadzi poza serwis IBM), w ciągu poprzednich sześciu miesięcy zanotowano wzrost w wykorzystaniu Kubernetes w wysokości 51%.
  • Rekordowa liczba ponad 12 000 osób wzięła udział w konferencji KubeCon + CloudNative Con North America 2019 (odsyłacz prowadzi poza serwis IBM). To o ponad 3 000 więcej, niż rok wcześniej.
  • Według ZypRecruiter (odsyłacz prowadzi poza serwis IBM), przeciętne roczne wynagrodzenie (w Ameryce Północnej) na stanowisku związanym z obsługą platformy Kubernetes wynosi 144 628 USD. W momencie publikacji niniejszego wpisu ponad 21 000 wakatów do pracy z Kubernetes czeka na kandydatów w portalu LinkedIn (odsyłacz prowadzi poza serwis IBM).

Kursy Kubernetes

Jeśli chcesz rozpocząć pracę z Kubernetes lub rozwinąć swoje umiejętności wykorzystania tego rozwiązania i towarzyszących mu narzędzi, weź udział w jednym z poniższych kursów:

Kubernetes i IBM Cloud

Zarządzane rozwiązanie do orkiestracji kontenerów — IBM Cloud Kubernetes Service — automatyzuje wdrażanie, działanie, skalowanie i monitorowanie skonteneryzowanych aplikacji w klastrze hostów obliczeniowych. Dodatkowo zapewnia dostęp do funkcji typowych dla rozwiązań IBM. Umożliwia szybkie dostarczanie aplikacji i może współpracować z zaawansowanymi usługami, takimi jak łańcuch bloków i Watson®.

Sprawdź, jak zarządzana platforma Kubernetes może pomóc Ci w migracji do chmury. Obejrzyj film „Korzyści użytkowania zarządzanej platformy Kubernetes” (3:14):

Red Hat® OpenShift® on IBM Cloud to kompleksowa usługa, która oferuje w pełni zarządzane klastry OpenShift na platformie IBM Cloud (OpenShift jest korporacyjną platformą Kubernetes działającą w systemie Red Hat Enterprise Linux).

Dowiedz się więcej o systemie OpenShift z nowego raportu Forrester Wave: Wielochmurowe platformy programowania kontenerów (PDF, 415 kB).

Aby rozpocząć, zarejestruj się, uzyskaj identyfikator IBM i załóż konto IBM Cloud.