Proč a jak začít s Kubernetes? Hlavní komponenty, koncepty …a důvody

Proč a jak začít s Kubernetes? | ORBIT

S širokým rozšířením kontejnerů v organizacích se Kubernetes stal de facto standardem pro nasazení a provoz kontejnerových aplikací. V článku si objasníme princip kontejnerové orchestrace, která je klíčem ke správě škálovatelných a odolných aplikací v cloudovém prostředí.

Roman Zubryckyj

Co znamená Kubernetes?

Kubernetes (také známý jako K8s nebo kube) je přenosná rozšiřitelná open source platforma pro správu kontejnerových úloh a služeb, která umožňuje deklarativní konfiguraci i automatizaci.

Kubernetes poskytuje platformově agnostický framework pro nasazování a správu kontejnerových aplikací v on-premise, v hybridním řešení nebo v cloudu. Jeho název pochází z řečtiny a znamená kormidelník nebo pilot (zkratka K8s pak vznikla spočítáním osmi písmen mezi písmeny Ks).

Historický vývoj Kubernetes | ORBIT

Kubernetes byl původně vyvinutý ve společnosti Google (interní systémem správy clusterů Borg). V roce 2014 byl uvolněn jako open source řešení a nyní jej spravuje nadace Cloud Native Computing Foudation (CNCF).

K čemu Kubernetes slouží?

Kontejnery jsou definovány jako softwarové jednotky, v nichž je zabalen kód aplikace se všemi knihovnami a závislostmi. Umožňují rychlý běh aplikací v jakémkoli prostředí – v lokálním, v soukromém datovém centru nebo ve veřejném cloudu.

V produkčním prostředí je však třeba spravovat stovky kontejnerů a zajistit, aby nedocházelo k výpadkům. A pokud k výpadku přece jen dojde, musí se spustit nový kontejner. Existuje způsob, jak takové situace řešit automaticky v rámci celého systému? Právě toto umožnuje Kubernetes, který poskytuje framework pro pružný provoz distribuovaných systémů. Stará se o škálování i o failover vašich aplikací (přepnutí na záložní systém).

To nedává úplně smysl. Co sdružuju? Mikroservices ve formě kontejnerů do aplikací? Aplikace do celých business systémů?
Tohle je klíčová informace a je odbytá.

Hlavní výhody Kubernetes

  • Automatizované operace, díky kterým můžeme efektivně spravovat aplikace.
  • Abstrakce infrastruktury, která umožňuje vývojářům soustředit se na aplikace namísto základního prostředí.
  • Monitoring stavu služeb a jejich restartování či zpřístupnění, až když jsou plně funkční.

Kubernetes není tradičním PaaS systémem, protože pracuje na úrovni kontejnerů a nabízí obecné funkce pro nasazení, škálování či vyrovnávání zátěže. Současně umožňuje uživatelům integrovat vlastní řešení pro protokolování a monitorování. Kubernetes nepředepisuje ani nesestavuje aplikace ze zdrojového kódu a neposkytuje konkrétní konfigurační jazyk.

Tento odstavec byl původně použitý jako úvodník. Pro něj se ale nehodí. Navrhuji využít podstatné věty v této části. Můžeme je zakomponovat do tří odstavců výše nebo zde uvést nějaký odrážkový seznam výhod. 

Komponenty Kubernetes

Když už jsme pochopili, k čemu Kubernetes slouží, můžeme se ponořit do jeho základních součástí. Tyto základní prvky spolupracují na automatizaci nasazení a správy kontejnerových aplikací.

Schéma komponent Kubernetes | ORBIT

Schéma komponent Kubernetes

Komponenty Control Plane

  • kube-apiserver zpřístupňuje rozhraní API Kubernetes. Server API je frontend pro řídicí rovinu Kubernetes.
  • etcd je konzistentní a vysoce dostupné úložiště hodnot klíčů používané jako záložní úložiště systému Kubernetes pro všechna data clusteru.
  • kube-scheduler identifikuje na základě kapacity nodů (CPU, úložiště, RAM), zásad, omezení a dalších filtrů správné nody, do kterých má být kontejner umístěn.
  • kube-controller-manager spouští procesy řadiče:
    • Node controller zodpovídá za notifikace při výpadku nodu.
    • Job controller sleduje objekty úloh, které představují jednorázové úkoly.
    • EndpointSlice controller zajišťuje spojení mezi službami (Service) a Pody.
    • ServiceAccount controller má na starost vytvoření výchozích servisních účtů (ServiceAccounts) pro nové Namespaces.
  • cloud-controller-manager umožňuje propojit váš cluster s rozhraním API poskytovatele cloudu a oddělit komponenty, které komunikují s touto cloudovou platformou, od komponent, které komunikují pouze s vaším clusterem.

Komponenty Nodu

  • kubelet je agent, který je spuštěn v každé nodu clusteru. Zajišťuje, že kontejnery běží v Podu.
  • kube-proxy je síťový proxy server, který běží na každém uzlu v clusteru a udržuje síťová pravidla v nodech.

runtime kontejneru umožňuje efektivní provoz kontejnerů Kubernetes. Komponenta je zodpovědná za správu spouštění a životního cyklu kontejnerů (containerd, CRI-O).

Základní koncepty Kubernetes

Nyní je čas prozkoumat základní koncepty, na kterých je založena interakce zmíněných komponent. Jejich pochopením se přiblížíme k efektivní práci s Kubernetes v reálných scénářích.

Mimochodem – nejlepším způsobem, jak s Kubernetes začít, je interakce se skutečným clusterem, a to prostřednictvím lokálního clusteru nebo playgroundu. 

  • Cluster je skupina nodů , na kterých běží kontejnerové aplikace. Pomocí systému Kubernetes spravujete cluster a vše, co obsahuje (hlavně aplikace).
  • Node je fyzický nebo virtuální stroj v clusteru. Tento „pracovní“ stroj má vše potřebné pro běh kontejnerů a dalších důležitých služeb.
  • Container je lehké, přenosné a izolované prostředí, které balí aplikaci i její závislosti a umožňuje konzistentní nasazení v různých prostředích. Mezi populární technologie kontejnerizace patří Dockercontainerd.
  • Pod je nejmenší jednotkou v systému Kubernetes. Pod představuje jeden nebo více kontejnerů, které jsou nasazeny společně na stejném hostiteli.
  • Deployment slouží ke správě životního cyklu nasazení aplikací. Definuje požadovaný stav aplikace, včetně počtu replik (podů), které mají být spuštěny, obrazu kontejneru, který má být použit, a strategie aktualizace. Zajišťuje udržování požadovaného stavu, automaticky zvyšuje nebo snižuje jeho úroveň v závislosti na změnách poptávky a zavádí aktualizace s minimálními prostoji.
  • Service je abstraktní způsob, jak vystavit aplikaci běžící na sadě podů jako síťovou službu. Umožňuje vyrovnávání zátěže (load balancing) a vyhledávání služeb v rámci clusteru. Poskytuje způsob, jak mohou aplikace komunikovat mezi sebou, a to jak interně, tak externě.
  • Namespace poskytují mechanismus pro izolaci skupin prostředků v rámci jednoho clusteru, typicky odpovídá jednomu aplikačnímu prostředí.
  • Secret je prostředek pro ukládání citlivých informací, například tokenu OAuth nebo klíče SSH tak, aby byly v případě potřeby přístupné podům v clusteru. Zároveň musí být citlivé informace chráněny před zbytečnou viditelností zvyšující bezpečnostní riziko.
  • Kubernetes API umožňuje dotazovat se na stav objektů API v systému Kubernetes a manipulovat s nimi pomocí nástroje rozhraní příkazového řádku kubectl nebo kubeadm, které zase využívají rozhraní API.

Tento odstavec byl původně použitý jako úvodník. Pro něj se ale nehodí. Navrhuji využít podstatné věty v této části. Můžeme je zakomponovat do tří odstavců výše nebo zde uvést nějaký odrážkový seznam výhod. 

Závěr úvodu

Máme za sebou stručný úvod do Kubernetes. V navazujícím článku se ponoříme do možností jeho nasazení (self-hosted, managed k8s), podíváme se na ceny (TCO), řízení životního cyklu nebo na zásady bezpečnosti

O autorovi
Roman Zubryckyj
Roman Zubryckyj

Cloud Consultant | LinkedIn

Roman je cloudový konzultant v oblasti Public Cloudu, primárně AWS. Specializuje se na návrh cloud native řešení, IaC, kontejenerizaci a automatizaci.