Kubernetes: open source proti proprietary

Ahoj, volám sa Dmitrij Krasnov. Už viac ako päť rokov sa zaoberám administráciou Kubernetes klastrov a budovaním zložitých mikroservisných architektúr. Na začiatku tohto roka sme spustili službu na správu Kubernetes klastrov založenú na Containerum. Pri tejto príležitosti poviem, čo vlastne Kubernetes predstavuje a aký je rozdiel medzi integráciou s dodávateľom a open source.

Najprv, čo je to Kubernetes. Je to systém na správu kontajnerov na veľkom počte hostiteľov. Z gréčtiny sa prekladá ako „pilot“ alebo „kormidelník“. Pôvodne ho vyvinul Google, a potom ho ako technologický príspevok odovzdal Cloud Native Computing Foundation, medzinárodnej neziskovej organizácii, ktorá spája popredných svetových vývojárov, koncových používateľov a dodávateľov kontajnerových technológií.

Kubernetes: open source proti proprietary

Riadiť veľké množstvo kontajnerov

Teraz sa pozrime na to, čo sú to vlastne kontajnery. Je to aplikácia so všetkým svojím okolím – prevažne knižnicami, od ktorých závisí funkcia programu. To všetko je zabalené do archívov a prezentované vo forme obrazu, ktorý je možné spúšťať nezávisle od operačného systému, testovať a nielen to. Ale existuje problém – riadiť kontajnery na veľkom počte hostiteľov je veľmi zložité. Preto bol vytvorený Kubernetes.

Obraz kontajnera predstavuje aplikáciu plus jej závislosti. Aplikácia, jej závislosti a obraz súborového systému OS sú umiestnené v rôznych častiach obrazu, takzvaných vrstvách. Vrstvy sa môžu opätovne používať pre rôzne kontajnery. Napríklad, pre všetky aplikácie v spoločnosti môže byť použitá základná vrstva Ubuntu. Pri spúšťaní kontajnerov nie je potrebné uchovávať na hostiteľovi množstvo kópií jednej základnej vrstvy. To umožňuje optimalizovať spracovanie a dodanie obrazov.

Keď chceme spustiť aplikáciu z kontajnera, potrebné vrstvy sa navzájom ukladajú a vytvára sa prekrývací súborový systém. Zhora sa pridáva vrstva na zápis, ktorá sa pri zastavení kontajnera odstráni. To zaručuje, že pri spustení kontajnera má aplikácia vždy rovnaké prostredie, ktoré nemožno zmeniť. To zaručuje reprodukovateľnosť prostredia na rôznych hosťujúcich operačných systémoch. Nech je to Ubuntu alebo CentOS, – prostredie bude vždy rovnaké. Okrem toho je kontajner izolovaný od hostiteľa pomocou mechanizmov zabudovaných v jadre Linuxu. Aplikácie v kontajneri nevidia súbory, procesy hostiteľa a susedných kontajnerov. Takáto izolácia aplikácií od hostiteľského operačného systému poskytuje dodatočnú vrstvu zabezpečenia.

Na správu kontajnerov na hostiteľovi existuje množstvo nástrojov. Najpopulárnejší z nich je Docker. Umožňuje zabezpečiť celý životný cyklus práce kontajnerov. Avšak funguje iba na jednom hostiteľovi. Pri potrebe správy kontajnerov na viacerých hostiteľoch môže Docker obrátiť život inžinierov na peklo. Preto bol vytvorený Kubernetes.

Dopyt po Kubernetes je práve určený možnosťou riadiť skupiny kontajnerov na viacerých hostiteľoch ako nejaké jednotné entity. Popularita systému zabezpečuje možnosť vytvoriť DevOps alebo Development Operations, v ktorých sa Kubernetes používa na spúšťanie procesov tohto DevOps.

Kubernetes: open source proti proprietary

Obrázok 1. Schématické zobrazenie princípu fungovania Kubernetes

Úplná automatizácia

DevOps predstavuje v podstate automatizáciu procesu vývoja. Jednoducho povedané, vývojári píšu kód, ktorý sa nahráva do repozitára. Následne sa tento kód môže automaticky zostaviť priamo do kontajnera so všetkými knižnicami, testovať a „vydávať“ na ďalšiu etapu – Staging a potom rovno na Production.

Spolu s Kubernetes DevOps umožňuje automatizovať tento proces, aby prebiehal prakticky bez účasti samotných vývojárov. Vďaka tomu sa výrazne zrýchľuje zostavovanie, pretože vývojár sa nemusí zaoberať touto úlohou na svojom počítači — jednoducho napíše kus kódu, nahrá kód do repozitára a spustí sa pipeline, ktorá môže zahŕňať proces zostavovania, testovania a nasadzovania. A to sa deje pri každom commite, preto testovanie prebieha nepretržite.

Navyše použitie kontajnera umožňuje mať istotu, že celé prostredie tejto aplikácie pôjde do produkcie presne v takej podobe, v akej bolo testované. Teda nevzniknú žiadne problémy typu „na teste boli iné verzie, v produkcii – iné, a keď sme ich nasadili – všetko spadlo“. A keďže dnes máme trend na mikroslužbovú architektúru, pri ktorej namiesto jedného obrovského aplikačného celku existujú stovky malých, na to, aby sme ich spravovali ručne, by sme potrebovali obrovský počet zamestnancov. Preto používame Kubernetes.

Výhody, výhody, výhody


Ak hovoríme o prednostiach Kubernetes ako platformy, má významné výhody z hľadiska správy mikroslužbovej architektúry.

  • Správa mnohých replik. Najdôležitejšie je spravovať kontajnery na viacerých hostiteľoch. A čo je dôležitejšie — správa množstva replik aplikácií v kontajneroch ako jednej entity. Vďaka tomu sa inžinierom nemusí starať o každý jednotlivý kontajner. Ak jeden z kontajnerov spadne, Kubernetes to zistí a znovu ho spustí.
  • Klastrová sieť. Kubernetes má tiež takzvanú klastrovú sieť s vlastným adresným priestorom. Vďaka tomu má každý pod svoju adresu. Podom sa rozumie minimálna štrukturálna jednotka klastra, v ktorej sa priamo spúšťajú kontajnery. Navyše Kubernetes má funkciu, ktorá kombinuje load balancer a Service Discovery. To umožňuje zbaviť sa ručného riadenia IP adresami a preniesť túto úlohu na Kubernetes. A automatické health checky pomôžu odhaliť problémy a presmerovať prevádzku na fungujúce pody.
  • Správa konfigurácií. Správa veľkého počtu aplikácií komplikuje riadenie konfigurácie aplikácií. Na tento účel má Kubernetes špeciálne prostriedky ConfigMap. Tieto prostriedky umožňujú centralizované uchovávanie konfigurácií a ich vkladanie do podov pri spúšťaní aplikácií. Takýto mechanizmus zaručuje konzistentnosť konfigurácie, či už je v desiatich alebo stovkách replikácií aplikácií.
  • Trvalé objemy. Kontajnery sú vo svojej podstate nemenné a pri zastavení kontajnera budú všetky dáta zapísané do súborového systému zničené. Avšak niektoré aplikácie uchovávajú dáta priamo na disku. Na riešenie tohto problému má Kubernetes funkciu správy diskového úložiska – trvalé objemy. Tento mechanizmus využíva externé úložisko pre dáta a môže prenášať trvalé úložisko, blokové alebo súborové, do kontajnerov. Toto riešenie umožňuje uchovávať dáta oddelene od pracovníkov, čo ich chráni v prípade poruchy týchto pracovníkov.
  • Vyrovnávač záťaže. Napriek tomu, že v Kubernetes riadime abstraktné entity ako Deployment, StatefulSet a pod., v konečnom dôsledku sú kontajnery spúšťané na obyčajných virtuálnych strojoch alebo fyzických serveroch. Nie sú dokonalé a môžu sa kedykoľvek zrútiť. Kubernetes to zaznamená a presmeruje vnútorný prenos na iné repliky. Ale čo robiť s prenosom, ktorý prichádza zvonku? Ak by sme jednoducho presmerovali prenos na jedného z pracovníkov, čo sa stane, ak sa zrúti, služba sa stane nedostupnou. Na riešenie tohto problému má Kubernetes služby typu Load Balancer. Tieto služby sú určené na automatickú konfiguráciu vonkajšieho cloudového vyrovnávača zaťaženia pre všetkých pracovníkov v klastri. Tento vonkajší vyrovnávač prenáša vonkajší prenos na pracovníkov a sám sleduje ich stav. Ak sa jeden alebo viac pracovníkov stanú nedostupnými, prenáša sa prenos na iné. To umožňuje vytvárať vysoko dostupné služby pomocou Kubernetes.

Kubernetes najlepšie preukazuje svoju hodnotu práve pri spúšťaní mikroslužbovej architektúry. Zavedenie systému do klasickej architektúry je možné, ale nezmyselné. Ak aplikácia nemôže fungovať v niekoľkých replikách, aký je rozdiel, či už ide o Kubernetes, alebo nie?

Open source Kubernetes


Open source Kubernetes – skvelá vec: nainštalujete a funguje. Môžete ho nasadiť na vlastné servery, na svojej infraštruktúre, nainštalovať mastera a workery, na ktorých budú spustené všetky aplikácie. A najdôležitejšie – to všetko je zadarmo. Avšak sú tu nuansy.

  • Prvý – požiadavky na vedomosti a skúsenosti administrátorov a inžinierov, ktorí to všetko budú rozvíjať a udržiavať. Keďže klient dostáva plnú slobodu v klastre, zodpovednosť za jeho funkčnosť nesie sám. A je veľmi jednoduché všetko pokaziť.
  • Druhý – nedostatok integrácií. Ak spustíte Kubernetes bez nejakej populárnej virtualizačnej platformy, nezískate všetky výhody programu. Ako napríklad využívanie Persistent Volumes a Load balancer služieb.

Kubernetes: open source proti proprietary

Obrázok 2. Architektúra k8s

Kubernetes od dodávateľa


Integrácia s cloudovým poskytovateľom ponúka dve možnosti:

  • Po prvé, človek môže jednoducho stlačiť tlačidlo „vytvoriť klaster“ a získať už nastavený a pripravený klaster.
  • Po druhé, dodávateľ sám nainštaluje klaster a nastaví integráciu s cloudom.

Ako to funguje u nás. Inžinier, ktorý spúšťa klaster, uvádza, koľko potrebuje workerov a s akými parametrami (napríklad 5 workerov, každý s 10 CPU, 16 GB RAM a povedzme 100 GB disku). Potom získa prístup do už vytvoreného klastru. Pri tom workery, na ktorých sa spúšťa záťaž, sú plne odovzdané klientovi, ale celá správa zostáva v zóne zodpovednosti dodávateľa (v prípade, že služba sa poskytuje podľa modelu spravovaných služieb).

Avšak tento model má svoje nevýhody. Pretože správa zostáva u dodávateľa, nedáva dodávateľ klientovi plný prístup, čo znižuje flexibilitu pri práci s Kubernetes. Niekedy sa stáva, že klient chce pripojiť k Kubernetes nejakú špecifickú funkcionalitu, napríklad autentifikáciu cez LDAP, ale konfigurácia manažmentu to neumožňuje.

Kubernetes: open source proti proprietary

Obrázok 3. Príklad Kubernetes klastra od cloudového poskytovateľa

Čo si vybrať: open source alebo poskytovateľský


Takže, open source Kubernetes alebo vendorový? Ak zoberieme open source Kubernetes, používateľ môže robiť, čo chce. Ale je tu veľká šanca, že si sám vystrelí do nohy. S vendorovým je to zložitejšie, pretože všetko je premyslené a nastavené. Najväčším nedostatkom open source Kubernetes je požiadavka na odborníkov. S vendorovým je spoločnosť zbavená tejto bolesti hlavy, ale musí sa rozhodnúť: platiť svojim odborníkom alebo vendorovi.

Kubernetes: open source proti proprietary

Kubernetes: open source proti proprietary

Nuž, klady sú zrejmé, zápory tiež známe. Nezmenné je jedno: Kubernetes rieši množstvo problémov, automatizuje správu mnohých kontajnerov. A ktorý si vybrať, open source alebo vendorový, si každý rozhoduje sám.

Článok pripravil Dmitrij Krasnov, vedúci architekt služby Containerum poskytovateľa #CloudMTS.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster