Pojmy kontajner a kontajnerizácia sú prevzaté z lodného priemyslu. Zatiaľ čo v lodnom priemysle sa kontajnery používajú na fyzické oddelenie rôznych nákladov, v IT svete virtuálne kontajnery balia program, konfiguračné súbory, knižnice a závislosti, ktoré aplikácia potrebuje na spustenie. Ide o spôsob, ako zabaliť aplikáciu tak, aby sa dala prepraviť na rôzne systémy, lokálne alebo v sieti. Kontajner je ďalšou formou virtualizácie, ako sú virtuálne stroje, a Docker a Kubernetes sú najobľúbenejšie nástroje na kontajnerizáciu a orchestráciu kontajnerov. Kubernetes spravuje kontajnerizované aplikácie, zatiaľ čo Docker sa používa na vytváranie, prevádzku a správu kontajnerov.

Čo je kontajner?

Kontajner je samostatný balík softvéru, ktorý obsahuje všetko potrebné na vytvorenie, spustenie a chod aplikácie. Kontajnery sú izolované a abstrahované z operačného systému a zo servera tak, aby bola aplikácia schopná bežať nezávisle od prostredia, v ktorom bola vytvorená. Cieľom je oddeliť aplikáciu a všetky jej závislosti od operačného systému a jeho prostredia tak, aby sa dala následne jednoducho, rýchlo a spoľahlivo spustiť v akomkoľvek inom prostredí. Medzi závislosti patria program, runtime, systémové nástroje a knižnice a nastavenia. Ako prostredie môže byť použité čokoľvek, či už ide o pracovnú stanicu vývojára, testovacie prostredie na serveri alebo produkčnú verziu umiestnenú na cloude.

Kontajnery nie sú také náročné na zdroje ako plnohodnotné virtuálne stroje, ktoré virtualizujú celé prostredie operačného systému a umožňujú používateľom spúšťať všetky kompatibilné softvérové programy.

Aký je rozdiel medzi kontajnerom a virtuálnym strojom?

Virtuálny stroj (angl. Virtual Machine, VM) je obraz, ktorý sa správa ako reálny počítač. Je vytvorený na hostiteľskom operačnom systéme a správa sa ako akýkoľvek iný program. V jeho vnútri je nainštalovaný osobitný operačný systém a celý stroj sa správa ako sandbox, čo znamená, že je oddelený od hostiteľského systému a softvér v jeho vnútri nemôže ovplyvniť hlavný systém. To nám dáva ideálne testovacie prostredie na prístup k aplikáciám, ktoré neboli upravené pre hostiteľský operačný systém. Na jednom hostiteľskom stroji môžu bežať viaceré VM, o ktoré sa stará takzvaný Hypervisor. Ten má na starosti ich chod a priradenie virtuálneho hardvéru. VM fungujú tak, že každý si vyhradí virtuálny hardvér, ako sú centrálny procesor, pamäť, úložisko a sieťové rozhrania, ktoré sú následne priradené na reálny hardvér.

Teraz sa dostávame k prvému problému VM oproti kontajnerom. Každý potrebuje vlastný operačný systém, ktorý však zaberá oveľa viac miesta – zväčša ide o jednotky až desiatky gigabajtov namiesto niekoľkých megabajtov, ako je to v prípade kontajnerov. Tak isto to znamená menej vyžadovaného procesorového výkonu a pamäte, čo nám dovoľuje mať na jednom serveri viac kontajnerov ako VM. Pri VM sa spúšťa jadro a viacero systémových služieb, zatiaľ čo v kontajneri sa zväčša spúšťa iba samotná aplikácia.

Ďalším problémom je čas potrebný na inicializáciu jedného VM. Ak daný VM zaberá niekoľko gigabajtov a potrebuje si aj vyhradiť vlastný hardvér, jeho inicializácia trvá dlhšie, ako by trvala inicializácia jedného kontajnera. Alternatívou by mohla byť predinicializácia VM. Takéto VM by boli zapnuté a nečinné, čo by znamenalo zbytočné mrhanie hardvérovými zdrojmi. Kontajnery sa na rozdiel od VM dokážu inicializovať v priebehu niekoľkých sekúnd alebo milisekúnd, čo je preferovanejšie oproti VM. Hlavne pri použití mikroslužieb, ktoré prijímajú veľké množstvo požiadaviek za krátky čas.

Čo sú kontajnerové mikroslužby?

Kontajnerové mikroslužby zvyčajne bežia vnútri kontajnera, ale môžu byť nasadené, aktualizované a ukončené nezávisle. Ide o prístup k softvérovej architektúre, ktorý spočíva v rozdelení veľkého riešenia na menšie časti, aby sa ďalej zvýšila produktivita a efektivita.

Čo je to kontajnerová organizácia?

Organizovanie kontajnerov spočíva v automatizácii väčšiny činností potrebných na spustenie kontajnerových pracovných zaťažení a služieb. Vo veľkých systémoch je ťažké manuálne spravovať kontajnerové aplikácie, pretože zvyčajne obsahujú stovky alebo dokonca tisíce kontajnerov. Preto je orchestrácia kontajnerov nevyhnutná na zníženie prevádzkovej zložitosti. Orchestrácia kontajnerov ponúka rôzne výhody, ako je zníženie prevádzkovej náročnosti pri správe kontajnerov, zlepšenie bezpečnosti znížením možnosti ľudských chýb vďaka automatizácii, umožnenie automatického škálovania a reštartovanie kontajnerov a klastrov.

Kontajnery a priemyselná automatizácia

Kontajnery ponúkajú niekoľko dôležitých výhod, vďaka ktorým môžu byť systémy priemyselnej automatizácie jednoduchšie a hodnotnejšie pre ich koncových používateľov aj dodávateľov v porovnaní s technológiami zabudovaných systémov používaných v súčasnej priemyselnej automatizácii. Kontajnery sa na rozdiel od strojov zameriavajú na aplikácie. Efektívnym spôsobom oddeľujú vývoj aplikácií od správy výpočtových, úložných a sieťových systémov, kde sú aplikácie. To poskytuje cenný priestor pre vývojárov aplikácií a špecialistov systémovej podpory pracovať oddelene a s oveľa menšou interakciou.

Vytváranie a správa knižnice obrázkov kontajnerov predstavuje riešenie zložitosti, ktorú prinášajú variácie hardvéru, architektúry procesora, operačného systému a podporných softvérových závislostí pre distribuované systémy. Vlastnosť „vrstvenia“ súborov obrázkov kontajnera umožňuje dodávateľom a koncovým používateľom efektívne vytvárať a opakovane vylepšovať úložisko. Napríklad niektoré aspekty obrazu kontajnera (nižšia vrstva) sa budú používať dlho v mnohých aplikáciách, zatiaľ čo iné aspekty (vyššia vrstva) alebo špecifická aplikácia môžu podliehať častému vývoju alebo zmenám.

Vývojári môžu vytvárať prostredia na vývoj a nasadenie kontajnerov, ktoré vyžadujú špecifické pracovné a testovacie procesy pred nasadením aplikácie do produkčného prostredia.

Kubernetes

Kubernetes, tiež známy ako K8s, je platforma s otvoreným zdrojom, ktorá pomáha pri orchestrácii kontajnerov. Kubernetes sa používa na automatizáciu nasadenia, škálovanie a správu kontajnerových aplikácií. Toto riešenie sa využíva na správu kontajnerov na verejných, súkromných a hybridných cloudových platformách. Je prenosné, rozšíriteľné a pomáha spravovať kontajnerové pracovné zaťaženie a služby. Tiež uľahčuje deklaratívnu konfiguráciu a automatizáciu. To znamená, že používateľ môže určiť množstvo požadovaných inštancií alebo zdrojov požadovaných pre jeho aplikáciu, Kubernetes skontroluje aktuálny stav aplikácie a automaticky upgraduje alebo odstráni zdroje, aby ju dostal do požadovaného stavu.

Architektúra Kubernetes pozostáva z troch hlavných komponentov: riadiacej roviny, uzlov a modulov. Riadiaca rovina je orchestrátor. Viaceré komponenty v riadiacej rovine uľahčujú orchestráciu. Uzly tvoria výpočtový výkon pre klaster Kubernetes, zatiaľ čo jeden alebo viac kontajnerov tvorí pod. Moduly bežia na uzloch a životný cyklus modulov riadi riadiaca rovina.

Základné vlastnosti Kubernetes

Kubernetes umožňuje používateľom vybrať, nakonfigurovať a neustále monitorovať stav kontajnera. To zahŕňa vytváranie nových inštancií kontajnerov, migráciu existujúcich kontajnerov a odstraňovanie starých kontajnerov. Kontajnery obsahujú vrstvu inteligencie, ktorá poskytuje rôzne funkcie. Funkcia optimalizácie zdrojov napríklad zvýrazňuje dostupné uzly, identifikuje zdroje potrebné na prevádzku kontajnerov a automaticky tieto uzly a kontajnery spája. Kubernetes je vysoko dostupný a pomáha chrániť aplikácie pred akýmkoľvek zlyhaním. S Kubernetes môžete vytvoriť viacero uzlov riadiacej roviny, čo znamená, že ak niektorý z hlavných uzlov zlyhá, ostatné udržia klaster v prevádzke.

Docker

Docker je platforma kontajnerizácie s otvoreným zdrojom, ktorá pomáha s vytváraním, nasadzovaním a správou kontajnerov. S Dockerom môžu vývojári baliť a spúšťať aplikácie spolu so závislosťami potrebnými na ich spustenie vo voľne izolovaných prostrediach nazývaných kontajnery. Docker zjednodušuje vývojový proces softvéru využívaním už opísaných praktík kontajnerizácie a mikroslužieb.

Docker Engine je runtime, ktorý umožňuje vývojárom zostavovať a spúšťať kontajnery Docker. Takýto kontajner môžete vytvoriť tak, že ho zadefinujete v súbore Dockerfile. Dockerfile je súbor, v ktorom definujete všetko, čo potrebujete na spustenie obrazu, vrátane špecifikácií siete OS a umiestnenia súborov. Docker prichádza aj s nástrojmi ako Docker Compose a Docker Swarm. Docker Compose je nástroj, ktorý môžete použiť na definovanie a spúšťanie aplikácií Docker s viacerými kontajnermi. Docker Swarm je nástroj na orchestráciu kontajnerov, ktorý umožňuje používateľovi spravovať rôzne kontajnery nasadené na viacerých hostiteľských počítačoch.

Základné vlastnosti Docker

Docker umožňuje používateľom integrovať viacero procesov do jedného kontajnera. To umožňuje vytvárať aplikácie, ktoré možno prevádzkovať aj počas opravy alebo aktualizácie niektorých komponentov.

Okrem Linuxu je kontajnerizácia Docker kompatibilná s populárnymi operačnými systémami, ako sú Windows a macOS. Používatelia môžu tiež nasadiť kontajnery Docker na popredných cloudových platformách, ako sú Azure, AWS a IBM Cloud. Títo poskytovatelia cloudu ponúkajú špecializované služby, ktoré možno použiť na vytváranie, nasadzovanie a prevádzkovanie aplikácií, ktoré boli kontajnerizované pomocou Dockera.

Docker podporuje používanie existujúcich kontajnerov ako základných obrázkov. Tie slúžia ako šablóny na vytváranie nových kontajnerov. Docker môže použiť zdrojový kód aplikácie na automatické nastavenie kontajnerov. Používatelia môžu pristupovať k tisícom kontajnerov vytvorených a zdieľaných ostatnými prostredníctvom registra s otvoreným zdrojovým kódom.

Môžete použiť Docker bez Kubernetes?

Pri vytváraní a správe obrazov kontajnerov a uvádzaní kontajnerov do prevádzky na úrovni runtime je odpoveď áno. Napríklad pomocou Dockera môžete vytvárať obrázky kontajnerov a organizovať ich v registri. Môžete spúšťať kontajnery a komunikovať s nimi a tiež môžete kontajnery poskladať do aplikácie s viacerými kontajnermi pomocou Docker Compose. Môžete teda vidieť, že Docker nepotrebuje Kubernetes, pretože väčšinu vecí dokáže robiť nezávisle. Kubernetes však môže nasadiť kontajnery Docker automaticky v IT prostredí, aby sa zabezpečila vysoká dostupnosť. Okrem bežiacich kontajnerov dokáže zabezpečiť aj samoopravu s automatickým spustením.

Môžete použiť Kubernetes bez Dockera?

Pomocou Kubernetes nemôžete vytvárať ani spravovať obrázky kontajnerov. Kubernetes je kontajnerový orchestrátor, a preto potrebuje na orchestráciu kontajnerový runtime. Docker má kontajnerový runtime známy ako Docker Engine. Tiež je bežnou praxou používať Kubernetes spolu s Dockerom. To však neznamená, že Kubernetes je úplne závislý od Dockera. Kubernetes môžete použiť s inými modulmi runtime kontajnerov, ako sú runc, CRI-O, Containerd a ďalšie. Je teda zrejmé, že môžete použiť Kubernetes bez Dockera, ale na organizáciu by ste potrebovali obrázky kontajnerov.

Je Kubernetes lepší, keď sa používa spolu s Dockerom?

Vytváranie kontajnerov v Dockeri je do značnej miery priemyselným štandardom. Ich správa v Kubernetes sa stáva priemyselným štandardom. Kubernetes funguje dobre s Dockerom a veľká časť dokumentácie Kubernetes je napísaná s ohľadom na Docker. Kubernetes má nástroje zamerané na Docker, napr. konvertovanie príkazov a nastavení Docker Compose tak, aby ich Kubernetes mohol používať.

Docker pomôže pri balení a distribúcii kontajnerových aplikácií, zatiaľ čo Kubernetes umožňuje organizáciu a správu kontajnerových zdrojov z jednej riadiacej roviny. Používanie Kubernetes pomáha zlepšiť škálovateľnosť a dostupnosť aplikácie. Okrem toho to pomôže zvýšiť výkon aplikácie. Pomocou Kubernetes aj Dockera možno spravovať kontajnerové aplikácie vo veľkom rozsahu.

Ako kontajnery podporili víziu IoT spoločnosti Lindsay Corporation?

Lindsay Corporation poskytuje bezpečné a udržateľné riešenia pre pokročilé zavlažovanie, infraštruktúru a priemyselné technológie. Spoločnosť mala problémy so staršími aplikáciami a infraštruktúrou, najmä so staršími servermi Windows, pretože nedokázali podporovať jej víziu internetu vecí.

S prijatím Docker Enterprise, Azure,. NET Core, UI a edge computingu spoločnosť migrovala staršie aplikácie a servery do cloudového prostredia. Docker Enterprise umožnil organizácii pripojiť 450 000 otočných zavlažovacích systémov FieldNET s podporou IoT, ktoré sú rozmiestnené po celom svete, a ušetrilo sa tak viac ako 700 miliárd galónov vody.

Efektívne spracovanie petabajtov údajov s Kubernetes

CERN, európska organizácia pre jadrový výskum, analyzuje petabajty údajov ročne vrátane údajov z experimentov na najväčšom urýchľovači častíc na svete. V časticových urýchľovačoch sa urýchľujú protóny na veľmi vysokú energiu, blízku rýchlosti svetla a spôsobuje sa zrážka dvoch lúčov protónov. Konečným výsledkom je množstvo údajov, ktoré musia spracovať.

CERN v súčasnosti uchováva vo svojich dátových centrách 330 petabajtov údajov a modernizácia jeho urýchľovačov, ktorá sa očakáva v najbližších rokoch, zvýši toto číslo desaťnásobne. Okrem toho organizácia zažíva nápor vo svojom pracovnom zaťažení pred veľkými konferenciami a potrebuje tomu prispôsobiť svoju infraštruktúru. Na lepšie zvládanie takýchto situácií potrebujú hybridnejšiu infraštruktúru v kombinácii s verejným cloudom práve v období vyššieho zaťaženia.

CERN prijal kontajnerizáciu a natívne cloudové postupy, pričom na orchestráciu zvolil Kubernetes, na nasadenie Helm, na monitorovanie Prometheus a na rozlíšenie DNS vnútri klastrov CoreDNS. Kubernetes umožnil organizácii spúšťať niektoré produkčné úlohy v rámci podniku aj vo verejných cloudoch.

Riešenie umožňuje plne automatizované aplikácie, ich monitorovanie a protokolovanie. Čas na nasadenie nového klastra pre komplexný distribuovaný úložný systém sa skrátil z viac ako troch hodín na menej ako 15 minút. Pridávanie nových uzlov do klastra trvalo viac ako hodinu, teraz to trvá menej ako 2 minúty. Čas potrebný na automatické škálovanie kópií systémových komponentov sa skrátil z viac ako hodiny na menej ako 2 minúty.

Kontajnerizácia je riešenie

Docker aj Kubernetes vznikli, aby reagovali na potreby vývoja mikroslužieb. Kontajnery predstavujú ľahký a škálovateľný spôsob poskytovania týchto aplikácií, ale ich správa vo veľkom rozsahu značí aj isté výzvy. Hoci tieto nástroje vyžadujú hlbšiu analýzu s cieľom lepšie ich pochopiť a kvalifikovane používať, sú to bezpochyby nástroje, ktoré pripravia pôdu pre škálovateľnú budúcnosť správy kontajnerov.

Zdroje

[1] Bernát, I.: Docker a jeho použitie pri kontajnerizácii. Magazín KPI. [online]. Publikované 15. 2. 2019. Citované 12. 8. 2022. 

[2] Containers, containerization systems and orchestrators. Stackscale. [online]. Publikované 9. 12. 2021. Citované 12. 8. 2022. 

[3] Mudrakola, S.: Docker vs. Kubernetes: A Brief Containerization Comparison Guide. TechGenix. [online]. Publikované 21. 4. 2022. Citované 12. 8. 2022. 

[4] Kubernetes vs. Docker: Why Not Both? IBM. [online]. Publikované 13. 06. 2022. Citované 12. 08. 2022. 

[5] Dhaduk, H.: 14 Containerization Use Cases: Hit a Home Run with Containers. SIMFORM. [online]. Publikované 26. 5. 2022. Citované 12. 8. 2022. 

[6] CERN: Porcessing Petabytes of Data More Efficiently with Kubernetes. Kubernetes. [online]. Citované 16. 8. 2022. 

[7] The End of Industrial Automation (As We Know It). ARC Advisory Group. [online]. Publikované 21. 12. 2018. Citované 16. 8. 2022.