Kubernetes - skrotenie cloudu

Ak chcete na poskytovanie služieb podnikom používať systém Linux, musia byť tieto služby zabezpečené, odolné a škálovateľné. Pekné slová, ale čo nimi rozumieme?

„Zabezpečený“ znamená, že používatelia majú prístup k údajom, ktoré požadujú, a to buď iba na čítanie, alebo na zápis. Zároveň nie sú vystavené žiadne údaje žiadnej strane, ktorá nemá oprávnenie ich zobraziť. Bezpečnosť je klamná: môžete si myslieť, že máte všetko chránené, až potom zistíte, že existujú diery. Navrhovanie v oblasti zabezpečenia od začiatku projektu je oveľa jednoduchšie, ako sa neskôr pokúsiť o jeho dodatočné vybavenie.

„Odolný“ znamená, že vaše služby tolerujú zlyhania v rámci infraštruktúry. Zlyhaním môže byť radič serverového disku, ktorý už nemôže pristupovať k žiadnym diskom, čím sa údaje stanú nedostupnými. Prípadnou chybou môže byť sieťový prepínač, ktorý už neumožňuje komunikáciu dvoch alebo viacerých systémov. V tejto súvislosti je „jediný bod zlyhania“ alebo SPOF porucha, ktorá nepriaznivo ovplyvňuje dostupnosť služby. Odolná infraštruktúra je infraštruktúra bez SPOF.

„Škálovateľný“ popisuje schopnosť systémov elegantne zvládať hroty dopytu. Tiež určuje, ako ľahko je možné vykonať zmeny v systémoch. Napríklad pridanie nového používateľa, zvýšenie úložnej kapacity alebo presunutie infraštruktúry z Amazon Web Services do Google Cloud - alebo dokonca jej presunutie interne.

Hneď ako sa vaša infraštruktúra rozšíri nad jeden server, existuje veľa možností na zvýšenie bezpečnosti, odolnosti a škálovateľnosti. Pozrime sa na to, ako sa tieto problémy tradične riešili a aké nové technológie sú k dispozícii, čo mení tvár veľkých aplikácií.

Získajte viac Linuxu!

Baví vás to, čo čítate? Chcete viac Linuxu a otvoreného zdroja? Môžeme dodať, doslova! Predplaťte si Linux Format ešte dnes za výhodnú cenu. Môžete dostávať problémy s tlačou, digitálne vydania alebo prečo nie obidve? Dodávame k vašim dverám po celom svete za jednoduchý ročný poplatok. Takže si vylepšite a uľahčite život, prihláste sa teraz!

Aby sme pochopili, čo je dnes možné, je užitočné pozrieť sa na to, ako sa technologické projekty tradične implementujú. Za dávnych čias - teda pred viac ako 10 rokmi - si podniky kupovali alebo prenajímali hardvér na prevádzkovanie všetkých súčastí ich aplikácií. Aj pomerne jednoduché aplikácie, ako napríklad webová stránka WordPress, obsahujú viac komponentov. V prípade WordPress je potrebná databáza MySQL, webový server, napríklad Apache, a spôsob zaobchádzania s kódom PHP. Takže by vytvorili server, nastavili Apache, PHP a MySQL, nainštalovali WordPress a mohli by ísť.

Celkovo to fungovalo. Fungovalo to dosť dobre, že dnes stále existuje obrovské množstvo serverov nakonfigurovaných presne týmto spôsobom. Ale nebolo to dokonalé a dva z väčších problémov boli odolnosť a škálovateľnosť.

Nedostatočná odolnosť znamenala, že akýkoľvek závažný problém na serveri by mal za následok stratu služby. Je zrejmé, že katastrofická porucha by neznamenala žiadny web, ale taktiež nebol priestor na vykonanie plánovanej údržby bez toho, aby to malo dopad na web. Aj inštalácia a aktivácia bežnej aktualizácie zabezpečenia pre Apache by si vyžadovala niekoľkosekundový výpadok webu.

Problém odolnosti sa do značnej miery vyriešil vybudovaním „klastrov vysokej dostupnosti“. Zásadou bolo mať dva servery, ktoré prevádzkujú web, nakonfigurovaný tak, aby zlyhanie jedného z nich nemalo za následok nefunkčnosť webu. Poskytovaná služba bola odolná, aj keď jednotlivé servery neboli.

Abstraktné mraky

Súčasťou sily Kubernetes je abstrakcia, ktorú ponúka. Z pohľadu vývojára vyvíjajú aplikáciu na spustenie v kontajneri Docker. Dockera nezaujíma, či je spustený v systéme Windows, Linux alebo inom operačnom systéme. Ten istý kontajner Dockeru je možné prevziať z vývojárskeho MacBooku a spustiť ho pod Kubernetes bez akýchkoľvek úprav.

Samotná inštalácia Kubernetes môže byť jeden stroj. Mnoho výhod Kubernetes samozrejme nebude k dispozícii: nebude existovať žiadne automatické škálovanie; existuje zrejmý jediný bod zlyhania atď. Ako dôkaz koncepcie v testovacom prostredí však funguje.

Keď ste pripravení na výrobu, môžete ich prevádzkovať doma alebo u poskytovateľa cloudových služieb, ako sú AWS alebo Google Cloud. Poskytovatelia cloudových služieb majú niektoré zabudované služby, ktoré pomáhajú pri spustení Kubernetes, ale žiadna z nich nie je náročná. Ak sa chcete pohybovať medzi Google, Amazonom a vlastnou infraštruktúrou, nastavíte Kubernetes a budete sa pohybovať naprieč. Žiadna z vašich aplikácií sa nemusí nijako meniť.

A kde je Linux? Kubernetes beží na Linuxe, ale operačný systém je pre aplikácie neviditeľný. Toto je významný krok vo vyspelosti a použiteľnosti IT infraštruktúr.

Efekt Slashdot

Problém so škálovateľnosťou je o niečo zložitejší. Povedzme, že váš web WordPress získa 1 000 návštevníkov mesačne. Jedného dňa sa o vašom podnikaní zmieni v rádiu 4 alebo v raňajkovej televízii. Zrazu získate návštevníkov za viac ako mesiac za 20 minút. Všetci sme už počuli príbehy „zhadzovaných“ webov, a to je zvyčajne dôvod: nedostatočná škálovateľnosť.

Dva servery, ktoré pomohli s odolnosťou, dokázali zvládnuť vyššie pracovné zaťaženie, ako by dokázal jeden server sám, ale to je stále obmedzené. Za dva servery by ste platili stopercentne a väčšinou fungovali perfektne. Je pravdepodobné, že váš web môže prevádzkovať iba jeden. Potom John Humphrys zmieni vaše podnikanie v Today a na zvládnutie záťaže by ste potrebovali 10 serverov - ale iba na pár hodín.

Lepším riešením problému odolnosti aj škálovateľnosti bol cloud computing. Nastavte inštanciu servera alebo dva servery - malé servery, ktoré spúšťajú vaše aplikácie - na webových službách Amazon (AWS) alebo Google Cloud. Ak by niektorá z inštancií z nejakého dôvodu zlyhala, automaticky by sa reštartovala. Nastavte správne automatické škálovanie a keď pán Humphrys spôsobí rýchle zvýšenie záťaže na inštanciách vášho webového servera, automaticky sa začnú zdieľať ďalšie inštancie servera. Neskôr, keď úroky utíchnu, tieto ďalšie prípady sa zastavia a platíte iba za to, čo použijete. Perfektné … alebo je to tak?

Aj keď je cloudové riešenie oveľa flexibilnejšie ako tradičný samostatný server, stále existujú problémy. Aktualizácia všetkých spustených inštancií cloudu nie je jednoduchá. Vývoj pre cloud má tiež výzvy: laptop, ktorý používajú vaši vývojári, môže byť podobný inštancii v cloude, ale nie je to to isté. Ak sa zaviažete k AWS, migrácia na Google Cloud je zložitá záležitosť. A predpokladajme, že z akýchkoľvek dôvodov jednoducho nechcete odovzdať svoje výpočty Amazonu, Google alebo Microsoftu?

Kontajnery sa vyvinuli ako prostriedok na zabalenie aplikácií so všetkými ich závislosťami do jedného balíka, ktorý je možné spustiť kdekoľvek. Kontajnery, ako napríklad Docker, môžu bežať na prenosných počítačoch vašich vývojárov rovnakým spôsobom, ako bežia na vašich cloudových inštanciách, ale správa flotily kontajnerov je čoraz náročnejšia s rastúcim počtom kontajnerov.

Odpoveďou je orchestrácia kontajnera. Ide o výrazný posun zamerania. Predtým sme sa ubezpečili, že máme dostatok serverov, či už fyzických alebo virtuálnych, na zabezpečenie toho, aby sme mohli obsluhovať pracovné zaťaženie. Používanie automatického škálovania poskytovateľov cloudu pomohlo, stále sme však riešili prípady. Museli sme nakonfigurovať vyvažovače zaťaženia, brány firewall, ukladanie údajov a ďalšie manuálne. Vďaka orchestrácii kontajnerov je o to všetko (a oveľa viac) postarané. Zadáme požadované výsledky a naše nástroje na orchestráciu kontajnerov splnia naše požiadavky. Namiesto toho, ako to chceme urobiť, určíme, čo chceme urobiť.

Nepretržitá integrácia a nepretržité nasadenie môžu s Kubernetes fungovať dobre. Tu je prehľad toho, ako sa Jenkins používa na zostavenie a nasadenie aplikácie Java

Staňte sa Kubernete

Kubernetes (ku-ber-net-eez) je dnes popredný nástroj na orchestráciu kontajnerov a pochádza od spoločnosti Google. Ak niekto vie, ako prevádzkovať rozsiahle IT infraštruktúry, robí to Google. Pôvodom spoločnosti Kubernetes je Borg, interný projekt spoločnosti Google, ktorý sa stále používa na spustenie väčšiny aplikácií spoločnosti Google vrátane jeho vyhľadávacieho nástroja, služby Gmail, máp Google a ďalších. Borg bol tajným tajomstvom, kým o ňom spoločnosť Google v roku 2015 nezverejnila príspevok, ktorý však ukázal, že Borg bol hlavnou inšpiráciou pre Kubernetesa.

Borg je systém, ktorý spravuje výpočtové zdroje v dátových centrách spoločnosti Google a udržiava aplikácie spoločnosti Google, produkčné aj iné, v prevádzke aj napriek zlyhaniu hardvéru, vyčerpaniu zdrojov alebo iným problémom, ktoré by inak mohli spôsobiť výpadok. Robí to starostlivým sledovaním tisícov uzlov, ktoré tvoria borgskú „bunku“ a na nich bežiacich kontajnerov, a spúšťaním alebo zastavovaním kontajnerov podľa potreby v reakcii na problémy alebo kolísanie zaťaženia.

Samotný Kubernetes sa zrodil z iniciatívy Google GIFEE („Google Infrastructure For Everyone Else“) a bol navrhnutý tak, aby bol priateľskejšou verziou Borgu, ktorá by mohla byť užitočná aj mimo Google. Bol venovaný nadácii Linux Foundation v roku 2015 prostredníctvom založenia Cloud Native Computing Foundation (CNCF).

Kubernetes poskytuje systém, pomocou ktorého „deklarujete“ svoje kontajnerizované aplikácie a služby, a zaisťuje, aby vaše aplikácie bežali podľa týchto vyhlásení. Ak vaše programy vyžadujú externé zdroje, napríklad úložisko alebo vyrovnávače zaťaženia, Kubernetes ich môže zabezpečiť automaticky. Môže škálovať vaše aplikácie hore alebo dole, aby držali krok so zmenami v načítaní, a v prípade potreby môže dokonca škálovať celý váš klaster. Komponenty vášho programu ani nemusia vedieť, kde sú spustené: Kubernetes poskytuje interné služby pomenovania aplikácií, aby sa mohli pripojiť k adrese „wp_mysql“ a boli automaticky pripojení k správnemu prostriedku. “

Konečným výsledkom je platforma, ktorú je možné použiť na spustenie vašich aplikácií na akejkoľvek infraštruktúre, od jediného stroja cez lokálny rack systémov až po cloudové flotily virtuálnych strojov bežiace na ktoromkoľvek významnom poskytovateľovi cloudu, pričom všetky používajú rovnaké kontajnery. a konfigurácia. Kubernetes je poskytovateľ-agnostik: prevádzkujte ho kdekoľvek chcete.

Kubernetes je mocný nástroj, ktorý je nevyhnutne zložitý. Predtým, ako sa dostaneme k prehľadu, je potrebné predstaviť niektoré pojmy používané v rámci Kubernetes. Kontajnery spúšťajú jednotlivé aplikácie, ako je uvedené vyššie, a sú zoskupené do podov. Pod je skupina úzko prepojených kontajnerov, ktoré sú nasadené spoločne na rovnakom hostiteľovi a zdieľajú niektoré zdroje. Kontajnery v podu fungujú ako tím: budú vykonávať súvisiace funkcie, ako napríklad kontajner aplikácie a kontajner protokolovania so špecifickými nastaveniami aplikácie.

Prehľad Kubernetes znázorňujúci pána, ktorý prevádzkuje kľúčové komponenty a dva uzly. Pamätajte, že v praxi môžu byť hlavné komponenty rozdelené do viacerých systémov

Štyri kľúčové komponenty Kubernetes sú API Server, Scheduler, Controller Manager a distribuovaná konfiguračná databáza s názvom etcd. Server API je jadrom spoločnosti Kubernetes a slúži ako primárny koncový bod pre všetky požiadavky na správu. Môžu byť generované rôznymi zdrojmi vrátane ďalších komponentov Kubernetes, ako je plánovač, správcovia prostredníctvom príkazového riadku alebo webových dashboardov a samotné aplikácie v kontajneroch. Overuje požiadavky a aktualizuje údaje uložené v atď.

Plánovač určuje, na ktorých uzloch budú rôzne pody bežať, a to s prihliadnutím na obmedzenia, ako sú napríklad požiadavky na zdroje, akékoľvek hardvérové ​​alebo softvérové ​​obmedzenia, pracovné vyťaženie, termíny a ďalšie.

Správca radiča monitoruje stav klastra a pokúsi sa nevyhnutne spustiť alebo zastaviť pody prostredníctvom servera API, aby sa klaster dostal do požadovaného stavu. Spravuje tiež niektoré interné pripojenia a bezpečnostné prvky.

Každý uzol spúšťa proces Kubelet, ktorý komunikuje so serverom API a spravuje kontajnery - zvyčajne pomocou Dockeru - a Kube-Proxy, ktorý v rámci klastra spracováva sieťové proxy a vyvažovanie záťaže.

Distribuovaný databázový systém etcd odvodzuje svoj názov od /atď priečinok v systémoch Linux, ktorý sa používa na uchovávanie informácií o konfigurácii systému plus prípona „d“, ktorá sa často používa na označenie procesu démona. Cieľom etcd je ukladať dáta kľúč - hodnota distribuovaným, konzistentným a tolerantným voči chybám.

Server API uchováva všetky svoje údaje o stave v etcd a môže súčasne spúšťať veľa inštancií. Plánovač a správca radiča môžu mať iba jednu aktívnu inštanciu, ale na zistenie, ktorá bežiaca inštancia je hlavná, použije systém nájmu. To všetko znamená, že Kubernetes môže bežať ako vysoko dostupný systém bez jediného bodu zlyhania.

Dávať to všetko dokopy

Ako teda tieto komponenty v praxi využiť? Nasleduje príklad nastavenia webu WordPress pomocou Kubernetes. Ak by ste to chceli urobiť skutočne, pravdepodobne by ste použili preddefinovaný recept s názvom Helmova tabuľka. Sú k dispozícii pre množstvo bežných aplikácií, ale tu sa pozrieme na niektoré kroky potrebné na uvedenie stránky WordPress do prevádzky na Kubernetes.

Prvou úlohou je definovať heslo pre MySQL:

 kubectl vytvoriť tajné generické mysql-pass --from-literal = heslo = VAŠE HESLO 

kubectl bude hovoriť s API Serverom, ktorý potvrdí príkaz a potom uloží heslo do etcd. Naše služby sú definované v súboroch YAML a teraz potrebujeme trvalé úložisko pre databázu MySQL.

 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi 

Špecifikácia by mala byť väčšinou vysvetľujúca. Polia názvu a štítkov sa používajú na označenie tohto úložiska z iných častí Kubernetes, v tomto prípade nášho kontajnera WordPress.

Po definovaní úložiska môžeme definovať inštanciu MySQL a nasmerovať ju na preddefinované úložisko. Potom nasleduje definícia samotnej databázy. Dali sme tejto databáze názov a označenie pre ľahkú orientáciu v rámci Kubernetes.

Teraz potrebujeme ďalší kontajner na spustenie WordPress. Súčasťou špecifikácie nasadenia kontajnera je:

 druh: metadáta nasadenia: názov: štítky wordpressu: aplikácia: špecifikácia wordpress: stratégia: typ: znovu vytvoriť 

Typ stratégie „Obnoviť“ znamená, že ak sa zmení ktorýkoľvek z kódov obsahujúcich aplikáciu, potom sa bežiace inštancie odstránia a znova vytvoria. Medzi ďalšie možnosti patrí možnosť cyklovať nové inštancie a odstraňovať existujúce inštancie jeden po druhom, čo umožňuje pokračovanie služby počas nasadenia aktualizácie. Na záver deklarujeme službu pre samotný WordPress, ktorá obsahuje kód PHP a Apache. Časť súboru YAML, ktorá to vyhlasuje, je:

 metadáta: názov: štítky wordpressu: aplikácia: špecifikácia wordpressu: porty: - port: 80 selektor: aplikácia: vrstva wordpress: typ rozhrania: LoadBalancer 

Všimnite si posledný riadok, ktorý definuje typ služby ako LoadBalancer. To dáva spoločnosti Kubernetes pokyn, aby sprístupnila službu mimo lokality Kubernetes. Bez tohto riadku by to bola iba interná služba „Iba Kubernetes“. A to je všetko. Kubernetes teraz použije tieto súbory YAML ako deklaráciu toho, čo sa vyžaduje, a podľa potreby nastaví pody, pripojenia, úložisko atď., Aby sa klaster dostal do „požadovaného“ stavu.

Použite zobrazenie palubnej dosky na získanie súhrnného prehľadu Kubernetes v akcii

Toto musel byť nevyhnutne iba prehľad Kubernetes na vysokej úrovni a veľa podrobností a funkcií systému bolo vynechaných. Vysvetlili sme si automatické škálovanie (oba pody a uzly, ktoré tvoria klaster), úlohy cron (spúšťanie kontajnerov podľa harmonogramu), vstup (vyrovnávanie zaťaženia HTTP, prepisovanie a znižovanie zaťaženia SSL), RBAC (riadenie prístupu na základe rolí) , zásady siete (firewall) a oveľa viac. Kubernetes je mimoriadne flexibilný a mimoriadne výkonný: pre každú novú IT infraštruktúru musí byť serióznym uchádzačom.

Zdroje

Ak nepoznáte Docker, začnite tu: https://docs.docker.com/get-started.

Tu je interaktívny návod na nasadenie a zmenu mierky aplikácie: https://kubernetes.io/docs/tutorials/kubernetes-basics.

Informácie o tom, ako vytvoriť klaster, nájdete na stránke https://kubernetes.io/docs/setup/scratch.

Môžete hrať s bezplatným klastrom Kubernetes na https://tryk8s.com.

Nakoniec tu môžete prečítať dlhý technický dokument s vynikajúcim prehľadom o tom, ako Google používa Borg a ako to ovplyvnilo dizajn Kubernetes tu: https://storage.googleapis.com/pub-tools-public-publication-data/ pdf / 43438.pdf.

Zistite viac o Tiger Computing.

  • Najlepšie cloudové úložisko roku 2022-2023 online: bezplatné, platené a obchodné možnosti
Získajte viac Linuxu!

Baví vás to, čo čítate? Chcete viac Linuxu a otvoreného zdroja? Môžeme dodať, doslova! Predplaťte si Linux Format ešte dnes za výhodnú cenu. Môžete dostávať problémy s tlačou, digitálne vydania alebo prečo nie obidve? Dodávame k vašim dverám po celom svete za jednoduchý ročný poplatok. Takže si vylepšite a uľahčite život, prihláste sa teraz!

Zaujímavé články...