Czym jest Kubernetes?
11 września 2023
Platforma open-source
Zarządzanie aplikacjami w kontenerach
Kubernetes to platforma open-source służąca do realizacji zarządzania kontenerami. Kubernetes pozwala na automatyzację wdrożenia, skalowanie oraz zarządzanie aplikacjami znajdującymi się w kontenerach.
Udostępnienie Borg przez Google
Początki Kubernetes sięgają rozwiązania do zarządzania kontenerami stosowanego przez Google, o nazwie Borg (technologia datowana na okres 2003-2004). Borg pozwalał na zarządzanie procesami wdrożeń tysięcy aplikacji wewnątrz Google.
W roku 2014 Google podjęło decyzję o udostępnieniu Borg na zasadach open-source.
k8s
W środowisku osób na co dzień pracujących z Kubernetes funkcjonuje określenie k8s. Nazwa k8s powstała jako skrót, w którym cyfra 8 związana jest z ośmioma literami pomiędzy literą k oraz s (“k-ubernete-s”).
Architektura Kubernetes
Cluster
Klaster Kubernetes to zestaw maszyn, które określamy mianem nodes (1 maszyna = 1 node). Nody używane są do uruchamiania skonteneryzowanych aplikacji.
Control Plane
Klaster Kubernetes zawiera w sobie dwa podstawowe składniki. Pierwszy składnik Kubernetes to Control Plane, który jest odpowiedzialny za zarządzanie stanem klastra.
W środowiskach produkcyjnych dany Control Plane jest uruchomiony na większej liczbie Nodów, które zlokalizowane mogą być w różnych centrach danych.
Worker Node
Drugi podstawowy składnik Kubernetes to Worker Nodes. Nody określane w ten sposób obciążone są pracą związaną z uruchomionymi aplikacjami w kontenerach.
Worker Node składa się z mniejszych jednostek, które określane są mianem Pod (Pod 1, Pod 2, itd). W danej jednostce Pod znajdują się kontenery (container 1, container 2, itd.). Pod to zatem najmniejsza jednostka możliwa do wdrożenia w Kubernetes.
Pod zawierać może jeden lub kilka kontenerów (containers) i zapewnia dla nich współdzieloną przestrzeń na storage oraz sieć.
Pod, będący podstawowym elementem budowy środowiska Kubernetes dla aplikacji, można stworzyć i zarządzać wykorzystując Kubernetes Control Plane.
Komponenty Control Plane
Podstawowe komponenty Control Plane to: API server, etcd, Scheduler, Controller Manager.
API Server to główny interface pomiędzy Control Plane oraz resztą klastra. API server wystawia RESTful API umożliwiające interakcję z Control Plane dla klientów oraz przesyłanie zapytań związanych z zarządzaniem klastrem.
Etcd służy do rozdystrybuowanego przechowywania wartości kluczy. Jednym z zadań Etcd jest przechowywanie trwałego stanu klastra. Etcd jest wykorzystywany przez API server oraz inne komponenty Control Plane do przechowywania oraz odzyskiwania informacji na temat klastra.
Scheduler jest odpowiedzialny za rozplanowanie jednostek Pod do odpowiednich Worker Node znajdujących się w klastrze. Scheduler korzysta z informacji o zasobach wymaganych przez Pody oraz o dostępnych zasobach znajdujących się w poszczególnych Worker Nodes i na tej podstawie podejmowane są decyzje o rozmieszczeniu jednostek Pod.
Controller Manager jest z kolei odpowiedzialny za uruchomienie kontrolerów zarządzających stanem klastra. Kontrolery realizują przykładowe zadania: replikacja (Replication Controller – zapewnia odpowiednią liczbę działających replik Podów), wdrożenie (Deployment Controller – zarządzanie aktualizacją ciągłą oraz wycofywaniem wdrożeń).
Z czego składa się Worker Node?
Głównym komponentem Kubernetes, który uruchomiony jest w ramach Worker Nod, jest: kubelet, container runtime oraz kube-proxy.
Kubelet to proces działający na każdym Worker Node, który odpowiada za komunikację z Control Plane. Kubelet otrzymuje instrukcje z Control Plane dotyczące określonych jednostek Pod do uruchomienia na danym node oraz zapewnia utrzymanie oczekiwanego stanu danych jednostek Pod.
Container runtime uruchamia kontenery na danych Worker Node, jak również jest odpowiedzialny za uzyskiwanie obrazów kontenerów z rejestru, uruchamianie oraz zatrzymywanie kontenerów oraz zarządzanie zasobami wykorzystywanymi przez kontenery.
Kube-proxy to proxy sieciowe uruchomione na każdym Worker Node, które odpowiada za kierowanie ruchem sieciowym do odpowiednich jednostek pod. Kube-proxy zapewnia również load-balancing (zarządzanie obciążeniem) dla jednostek Pod (tak by ruch był równomiernie rozłożony pomiędzy jednostkami Pod).
Zalety korzystania z Kubernetes
Kubernetes jest rozwiązaniem łatwo dostępnym oraz skalowalnym. Charakteryzuje się takimi cechami jak: możliwości poziomego skalowania, automatyczny rollback, self-healing.
Dzięki Kubernetes w łatwy sposób można skalować aplikacje w górę lub w dół, według potrzeb, umożliwiając dostosowywanie do potrzeb firmy w szybkim czasie.
Co ważne, Kubernetes jest mobilny, pomaga wdrażać i zarządzać aplikacjami w spójny i niezawodny sposób. Kubernetes działa na infrastrukturze on-premise, w publicznej chmurze lub w środowisku hybrydowym.
Podsumowując, Kubernetes zapewnia jednolity sposób pakowania, wdrażania oraz zarządzania aplikacjami.
Czy Kubernetes posiada wady?
Poziom skomplikowania
Jedną z potencjalnych wad Kubernetes jest poziom skomplikowania związany z architekturą rozwiązania. Generalnie można przyjąć, że Kubernetes wymaga złożonych działań w celu konfiguracji oraz uruchomienia.
Z tego powodu potrzebny jest dostęp do doświadczonych administratorów, którzy będą w stanie wesprzeć organizację w przygotowaniu środowiska. Zarządzanie środowiskiem produkcyjnym Kubernetes również warto powierzyć doświadczonym administratorom.
Wymagania dotyczące zasobów
Jednym z aspektów w kontekście potencjalnych wad rozwiązania jest temat kosztów.
Do uruchomienia Kubernetes potrzebny jest pewien minimalny zakres zasobów. Zatem dla niewielkich organizacji próg wejścia w obszarze zasobów do zapewnienia może być zbyt wysoki.
Amazon EKS, Google Kubernetes Engine, Azure Kubernetes Service
Popularnym rozwiązaniem jest zatem korzystanie z dostępności usługi zarządzania Control Plane w ramach oferty dużych dostawców rozwiązań chmurowych (Managed Kubernetes Services, np. Amazon EKS, Google Kubernetes Engine, Azure Kubernetes Service AKS).
Taka oferta pozwala na uruchomienie aplikacji w ramach Kubernetes bez konieczności zbytniego zagłębiania się w infrastrukturę.
Usługodawcy realizują wówczas zadania wymagające głębokiej wiedzy i dużego doświadczenia, np.: konfiguracja Control Plane, skalowanie klastra, zapewnianie bieżącego zarządzania oraz wsparcia.
Dla średniej wielkości organizacji jest to idealna propozycja w sytuacji konieczności przetestowania Kubernetes.