Proč a jak začít s Kubernetes? Hlavní komponenty, koncepty …a důvody
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 K a s).
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
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ří Docker a containerd.
- 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