Kubernetes

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání
Kubernetes
Logo
Kubernetes.png
VývojářGoogle
První vydání7. června 2014
Aktuální verze1.21.2 (17. června 2021)
Operační systémLinux
Microsoft Windows
macOS
Vyvíjeno vGo
Typ softwaruLinux Foundation Project a svobodný a otevřený software
LicenceApache License, Version 2.0
Webkubernetes.io
Některá data mohou pocházet z datové položky.

Kubernetes je svobodný systém pro orchestraci virtualizace na úrovni operačního systému. Původně jej vyvinula společnost Google a jako podřízené nástroje podporuje například Docker a rkt. Můžeme hovořit i o virtuální kontejnerizaci na úrovni OS.

Jméno je anglickým přepisem starořeckého slova κυβερνήτης (kybernétés), které znamená kormidelník. Kubernetes je vyvíjený v jazyce Go a uvolněný pod licencí Apache.

Koncepty[editovat | editovat zdroj]

Kubernetes definuje základní sadu stavebních bloků, které společně poskytují mechanismy pro nasazování, udržování a škálování aplikací na základě CPU, paměti nebo vlastních metrik. Jednotlivé bloky jsou volně spojené a rozšiřitelné, čímž mohou být upraveny pro různá aplikační vytížení. Tuto rozšiřitelnost ve velké části poskytuje rozhraní Kubernetes API, které používají interní komponenty i rozšíření a kontejnery běžící na Kubernetes. Chápáním výpočetních a úložných komponent jakožto objektů pak má platforma možnost je kontrolovat a ovládat.

Kubernetes vychází z Master/Slave architektury. Komponenty Kubernetes lze rozdělit na ty, které spravují jednotlivý uzel, a ty, které jsou součástí řídicí roviny.

Řídicí rovina[editovat | editovat zdroj]

Kubernetes Master je hlavní řídicí jednotkou clusteru, která spravuje vytížení komponent a řídí komunikaci napříč systémem. Řídicí rovina Kubernetes se skládá z různých komponent, z nichž každá má svůj vlastní proces, který může běžet jak na jednom hlavním uzlu, tak na více hlavních zařízeních podporujících clustery s vysokou dostupností. Jednotlivé součásti řídicí roviny Kubernetes jsou následující:

  • etcd: etcd je trvalé, lehké, distribuované úložiště klíčů a hodnot vyvinuté společností CoreOS, které spolehlivě ukládá konfigurační data clusterů, což představuje celkový stav klastru v daném okamžiku. Etcd je systém, který upřednostňuje konzistenci před dostupností v případě síťového oddílu. Tato konzistence je zásadní pro správné plánování a provoz služeb. Server Kubernetes API používá rozhraní API hodinek etcd ke sledování clusterů a zavádění důležitých změn konfigurace nebo jednoduše k obnovení jakýchkoli odchylek stavu clusteru zpět na to, co bylo deklarováno při jeho vytvoření. Například, je-li při vytvoření konkrétního uzlu stanoveno, že musí být spuštěny tři instance lusku, je tato skutečnost uložena v etcd. Pokud bude zjištěno, že etcd má uloženou konfiguraci uzlu se třemi běžícími instancemi a spuštěny jsou jen dvě, naplánuje platforma vytvoření dodatečné instance daného lusku.
  • Server API: Server API je klíčová součást a slouží rozhraní API Kubernetes pomocí JSON přes HTTP, který poskytuje Kubernetes interní i externí rozhraní. Server API zpracovává a ověřuje požadavky REST a aktualizuje stav objektů API v etcd, čímž umožňuje klientům konfigurovat úlohy a kontejnery napříč existujícími uzly.
  • Plánovač (anglicky Scheduler): Plánovač je přídavná komponenta, která na základě dostupnosti prostředků vybere, na kterém uzlu běží neplánovaný lusk. Plánovač sleduje využití prostředků v každém uzlu, aby zajistil, že pracovní zátěž nebude naplánována nad rámec dostupných zdrojů. Z tohoto důvodu musí plánovač znát požadavky na zdroje, dostupnost zdrojů a další omezení a směrnice poskytované uživateli, jako je kvalita služby, požadavky na podobnost či odlišnost, lokalita dat atd. Úlohou plánovače je v zásadě sladit „nabídku“ zdroje s „poptávkou“ pracovní zátěže.
  • Správce řadiče (anglicky Controller Manager): Řadič je slučovací smyčka, která řídí skutečný stav clusteru směrem k jeho požadovanému stavu a komunikuje se serverem API za účelem vytváření, aktualizace a mazání prostředků, které spravuje (lusky, koncové body služby atd.). Správce řadičů je proces, který spravuje sadu základních řadičů Kubernetes. Jedním druhem řadiče je řadič replikace, který zpracovává replikaci a změnu měřítka spuštěním zadaného počtu kopií modulu v clusteru. Zpracovává také vytváření náhradních lusků, pokud selže základní uzel. Mezi další řadiče, které jsou součástí základního systému Kubernetes, patří řadič DaemonSet pro spuštění přesně jednoho lusku na každém počítači (nebo nějaké podmnožině strojů) a řadič úloh pro spouštění lusků, které běží až do konce, např. jako součást dávkové úlohy. Sada lusků, které řadič spravuje, je určena selektory popisků, které jsou součástí definice řadiče.

Uzly[editovat | editovat zdroj]

Uzel (anglicky Node), známý také jako Worker nebo Minion, je stroj, kde jsou nasazeny kontejnery. Každý uzel v clusteru musí obsahovat prostředí pro běh kontejneru, například Docker, stejně tak i níže uvedené komponenty:

  • Kubelet: Kubelet je zodpovědný za provozní stav každého uzlu a zajišťuje, že všechny kontejnery v uzlu jsou v pořádku. Stará se o spouštění, zastavování a údržbu aplikačních kontejnerů uspořádaných do lusků podle pokynů v řídicí rovině. Kubelet monitoruje stav lusku a zjistí-li, že lusk není v požadovaném stavu, nasadí znovu lusk do stejného uzlu. Stav uzlu je kontrolován každých pár sekund prostřednictvím prezenčních zpráv do Masteru. Jakmile Master detekuje selhání uzlu, kontroluje replikační řadič tuto změnu stavu a spustí lusky na dalších zdravých uzlech.
  • Kube-proxy: Kube-proxy je implementace síťového proxy a nástroje pro vyrovnávání zatížení, a podporuje abstrakci služby spolu s dalšími síťovými operacemi. Je zodpovědný za směrování provozu do příslušného kontejneru na základě IP a čísla portu příchozího požadavku.
  • Runtime kontejneru: Kontejner je umístěn uvnitř lusku. Kontejner je nejnižší úroveň mikroslužby, která obsahuje běžící aplikaci, knihovny a jejich závislosti. Kontejnery mohou se světem komunikovat prostřednictvím externí adresy IP.

Lusky[editovat | editovat zdroj]

Základní plánovací jednotkou v Kubernetes je lusk (anglicky Pod). Lusk je seskupení kontejnerových komponent. Lusk se skládá z jednoho nebo více kontejnerů, u nichž je zaručeno společné umístění ve stejném uzlu.

Každému modulu v Kubernetes je v clusteru přiřazena jedinečná adresa IP, která aplikacím umožňuje používat porty bez rizika konfliktu. V rámci lusku se mohou všechny kontejnery navzájem odkazovat na localhost, ale kontejner v jednom lusku nemá způsob, jak přímo adresovat jiný kontejner v jiném lusku; k tomu musí použít IP adresu daného lusku. Vývojář aplikace by nikdy neměl používat IP adresu lusku k odkazování / vyvolání funkce v jiném lusku, protože jejich IP adresy jsou dynamické – konkrétnímu lusku, na který odkazují, může být při restartu přiřazena jiná IP adresa. Místo toho by měli použít odkaz na službu, která obsahuje odkaz na zvolený lusk.

Lusk může definovat svazek, například adresář místního disku nebo síťový disk, a vystavit jej kontejnerům uvnitř lusku. Lusky lze spravovat ručně prostřednictvím rozhraní Kubernetes API nebo jejich správu lze delegovat na řadič. Takové svazky jsou také základem pro funkce Kubernetes nástroje ConfigMaps (pro zajištění přístupu ke konfiguraci prostřednictvím souborového systému viditelného pro kontejner) a Secrets (pro poskytnutí přístupu k pověřením potřebným pro bezpečný přístup ke vzdáleným prostředkům).

Sady replik[editovat | editovat zdroj]

Účelem sady replik je udržovat stabilní sadu replik lusků spuštěných v daném okamžiku. Jako takový se často používá k zajištění dostupnosti určitého počtu identických lusků.

Sadu replik lze také označit za mechanismus seskupování, který umožňuje Kubernetes udržovat počet instancí deklarovaných pro daný lusk. Definice sady replik používá selektor, jehož vyhodnocení má za následek identifikaci všech lusků, které jsou k němu přidruženy.

Služby[editovat | editovat zdroj]

Služba je sada lusků, které fungují společně, například jako jedna úroveň vícevrstvé aplikace. Sada lusků, které tvoří službu, je definována selektorem štítků. Kubernetes poskytuje dva režimy zjišťování služeb, pomocí proměnných prostředí nebo pomocí Kubernetes DNS. Service discovery přiřadí službě stabilní IP adresu a název DNS, přičemž vyvažuje zatížení lusků round-robin způsobem. Ve výchozím nastavení je služba vystavena uvnitř clusteru (např. back-endové lusky mohou být seskupeny do služby, přičemž požadavky z front-endových lusků jsou mezi nimi vyváženy), ale služba může být vystavena i mimo cluster (např. aby se klienti dostali k front-end luskům).

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Kubernetes na anglické Wikipedii.


Externí odkazy[editovat | editovat zdroj]