Kubernetes (K8s) jako dojrzały orkiestrator kontenerów

16-09-2021

 – Kubernetes, znany również jako K8s, to system typu open source do automatyzacji wdrażania, skalowania i zarządzania aplikacjami kontenerowymi – skromna definicja Kubernetesa z serwisu kubernetes.io nie oddaje jego dzisiejszej, faktycznej roli w obszarze zarządzania kontenerami. Co legło u podstaw jego stworzenia? Jaka rolę spełnia dzisiaj w obszarze IT, a zwłaszcza w DevOps? 

Początki najpopularniejszego “dyrygenta” kontenerów

Zanim zaczniemy przygodę z Kubernetesem, zastanówmy się w jakim celu powstał i co to oznacza, że jest orkiestratorem kontenerów.

Orkiestrator 

Niczym dyrygent orkiestry symfonicznej – decyduje o tym kiedy – w tym przypadku kontener – zostanie uruchomiony, oraz w którym momencie zakończy swoją pracę. 

Kubernetes (K8s)
Kubernetes (K8s) jest obecnie najpopularniejszym orkiestratorem kontenerów.

Opakowywanie aplikacji w kontenery staje się bardzo modne, a zarazem bardzo wygodne. Koncepcja mikroserwisów czyli aplikacji niezależnych od siebie, sprzyja rozwojowi podejścia ciągłego dostarczania. To także sytuacja idealna. Wyobraźmy sobie jednak, że mamy jedną maszynę, na której zainstalowane jest środowisko uruchomieniowe pod kontenery – powiedzmy Docker – i chcemy właśnie dostawić kolejną, ponieważ brakuje nam zasobów. Pamiętamy też o tym, że ową maszynę usuniemy gdy tylko obciążenie zmaleje. 

Przed chwilą wdrożona została właśnie aplikacja. Nie włącza się poprawnie, a użytkownicy chcą bez przeszkód korzystać z systemu. Powstaje downtime. Przestój, który burzy komfort użytkownika. 

Zarządzanie kontenerami przy zmieniającym się środowisku jest bardzo trudne bez systemu, który będzie pilnował wszelkich operacji tak, aby końcowy użytkownik nie odczuł niedostępności usług. 

Te, i kolejne problemy zauważyli u siebie inżynierowie Googla. Dlatego właśnie opracowali systemy orkiestracyjne Borg, a później – nieudany – Omega. W 2014 roku ich wiedza pozwoliła jednak wypuścić rewolucyjne rozwiązanie typu open source o nazwie Kubernetes. 

Kubernetes – trochę historii

6 czerwca minęło siedem lat od udostępnienia Kubernetesa. Inżynierowie Google – Craig McLuckie oraz Joe Bed uznali, że ich firma, która  już wcześniej używała kontenerów do dostarczania aplikacji, marząc o upowszechnieniu wśród programistów tego rozwiązania potrzebuje mniej złożonego narzędzia do orkiestracji niż opracowany przez nią Borg.  Idea była prosta – udostępnić technologię i stworzyć wokół niej społeczność, która będzie miała wpływ na jej rozwój. I tak w sześć lat – już pod auspicjami Cloud Native Computing Foundation – narodził się standard orkiestracji kontenerów – Kubernetes.

Stale rosnąca potęga Kubernetesa

Kubernetes zyskał na popularności dzięki swojej elastyczności i skalowalności w zadaniach związanych z zarządzaniem kontenerami. Współpracuje z praktycznie każdym typem środowiska uruchamiającego kontenery oraz rodzajem podstawowej infrastruktury — czy to chmury publicznej, prywatnej, czy serwerów lokalnych. 

Kubernetes został sprawdzony w długoletnim boju i opiera się na  solidnej architekturze. W Google zarządza ponad 2 miliardami kontenerów tygodniowo – najprawdopodobniej największą tego typu platformą na świecie.

Jest też coś co buduje jego istotna przewagę nad pozostałymi systemami tego typu – wspiera ją społeczność i oczywiście biznes. Szacuje się, że prawie 78 proc. firm wybrało Kubernetesa do orkiestracji swojej architektury.

Architektura

W gruncie rzeczy Kubernetes to zbiór kontenerów, działających na danym środowisku (np. Docker, rkt).

Klaster – maszyny z rolą zarządczą (master nodes) i wykonawczą (worker nodes).

Klaster składa się z maszyn, które pełnią rolę zarządczą (master nodes), jak i wykonawczą (worker nodes).

  • API Server – serwer REST API służący do komunikacji użytkownika, jak i innych komponentów systemowych z klastrem.
  • Kubelet – komunikuje się z API Serwerem i jest odpowiedzialny za zarządzanie kontenerami na danym nodzie.
  • Controller Manager – jest odpowiedzialny za wykonywanie kluczowych operacji na klastrze.
  • Scheduler – przypisuje obiekty – aplikacje – do odpowiednich nodów.
  • Kube-proxy – jest odpowiedzialny za komunikację sieciową z podami.
  • Etcd – rozproszona baza klucz-wartość do przetrzymywania stanu klastra.

Zalety wdrożenia K8s:

  • Efektywne wdrażanie aplikacji na środowiska;
  • Automatyczne ponawianie aplikacji w przypadku awarii;
  • Skalowalność rozwiązania;
  • Zestaw wszelakich mechanizmów zapewniających wysoką dostępność aplikacji podczas awarii i wdrożenia;
  • Duża społeczność jak i dostępność rozwiązania u większości dostawców Cloud.

Wady:

  • Wymagana wiedza na początku przygody z K8s, ze względu na dużą ilość obiektów.

Instalacja k8s lokalnie:

https://minikube.sigs.k8s.io/docs/start/

Instalacja na bare metal (on premise):

https://github.com/kubernetes-sigs/kubespray

Cloud: 

  • GCP:
https://cloud.google.com/kubernetes-engine
  • AWS:
https://aws.amazon.com/eks/
  • AZURE:
https://azure.microsoft.com/en-us/services/kubernetes-service/