Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

Najlepšie praktiky Kubernetes. Vytvorenie malých kontajnerov
Najlepšie praktiky Kubernetes. Organizácia Kubernetes s menším priestorom
Najlepšie praktiky Kubernetes. Kontrola životaschopnosti Kubernetes pomocou Readiness a Liveness testov
Najlepšie praktiky Kubernetes. Nastavenie požiadaviek a limitov zdrojov

Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

Dôležitým aspektom fungovania distribuovaných systémov je spracovanie porúch. Kubernetes s tým pomáha pomocou ovládačov, ktoré sledujú stav vášho systému a reštartujú nepracujúce služby. Avšak Kubernetes môže nútene zastaviť fungovanie aplikácií, aby zabezpečil celkovú životaschopnosť systému. V tejto sérii sa pozrieme na to, ako môžete pomôcť Kubernetes vykonávať svoju prácu efektívnejšie a skrátiť čas výpadku aplikácií.

Predtým, než sa začalo používať kontajnerové technológie, väčšina aplikácií fungovala na virtuálnych alebo fyzických strojoch. Ak aplikácia zlyhala alebo zamrzla, trvalo veľa času, kým sa úloha zastavila a program znova načítal. V najhoršom prípade sa niekto musel s touto problémovou situáciou vysporiadať manuálne v noci, v úplne nevhodnom čase. Ak sa dôležitá úloha vykonávala iba na 1-2 pracovných strojoch, takéto zlyhanie bolo úplne neprijateľné.
Preto sa namiesto ručného reštartu začalo používať monitorovanie na úrovni procesov na automatické reštartovanie aplikácie v prípade jej havárie. Ak program zlyhá, monitorovací proces zachytí exit-kód a reštartuje server. S príchodom takých systémov, akým je Kubernetes, bol tento spôsob reakcie na poruchy jednoducho integrovaný do infraštruktúry.

Kubernetes využíva slučku udalostí "sledovanie – zaznamenávanie rozdielov – vykonanie akcie", aby sa ubezpečil, že zdroje zostávajú funkčné na ceste z kontajnerov k samotným uzlom.

Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

To znamená, že už nemusíte ručne spúšťať monitorovanie procesov. Ak zdroj neprejde testom zdravotnej kontroly Health Check, Kubernetes mu jednoducho automaticky poskytne náhradu. Pri tom Kubernetes robí oveľa viac, než len sleduje poruchy vašich aplikácií. Môže vytvárať viac kópií aplikácie pre viaceré stroje, aktualizovať aplikáciu alebo súčasne spúšťať viac verzií vašej aplikácie.
Existuje mnoho dôvodov, prečo môže Kubernetes prerušiť prácu úplne zdravého kontajnera. Napríklad, ak aktualizujete svoje nasadenie, Kubernetes pomaly zastaví staré pody a zároveň spúšťa nové. Ak odpojíte uzol, Kubernetes zastaví všetky pody na tomto uzle. Nakoniec, ak uzlu dôjdu zdroje, Kubernetes vypne všetky pody, aby uvoľnil tieto zdroje.

Je preto veľmi dôležité, aby vaša aplikácia prestala fungovať s minimálnym dopadom na koncového používateľa a minimálnym časom obnovy. To znamená, že pred odpojením by mala uložiť všetky údaje, ktoré je potrebné zachrániť, uzavrieť všetky sieťové pripojenia, dokončiť zvyšnú prácu a stihnúť vykonať ďalšie naliehavé úlohy.

V praxi to znamená, že vaša aplikácia by mala vedieť spracovať signál SIGTERM – signál na ukončenie procesu, ktorý je predvoleným signálom pre utilitu kill v operačných systémoch rodiny Unix. Po prijatí tohto signálu by sa aplikácia mala vypnúť.

Po tom, čo sa Kubernetes rozhodne ukončiť pod, sa odohrá séria udalostí. Poďme sa pozrieť na každý krok, ktorý Kubernetes vykonáva pri vypnutí kontajnera alebo podu.

Predpokladajme, že chceme ukončiť jeden z podov. V tomto momente prestane prijímať nový traffic – bežiace kontajnery v pode nebudú ovplyvnené, ale celý nový traffic bude zablokovaný.

Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

Pozrime sa na hook preStop – to je špeciálny príkaz alebo HTTP požiadavka, ktorá sa odosiela kontajnerom v pode. Ak sa vaša aplikácia pri prijatí SIGTERM nezavrie správne, môžete použiť preStop na správne ukončenie práci.

Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

Väčšina programov pri prijatí signálu SIGTERM správne ukončí svoju prácu, ale ak používate cudzí kód alebo nejaký systém, ktorý nemôžete úplne kontrolovať, hook preStop je skvelý spôsob, ako dosiahnuť elegantné vypnutie bez zmeny aplikácie.

Po vykonaní tohto hooku Kubernetes pošle kontajnerom v pode signál SIGTERM, ktorý im dá vedieť, že čoskoro budú vypnuté. Po prijatí tohto signálu sa váš kód presunie do procesu vypínania. Tento proces môže zahŕňať zastavenie akýchkoľvek dlhodobých spojení, ako je pripojenie k databáze alebo WebSocket prúd, uloženie aktuálneho stavu a podobne.

Aj keď používate hook preStop, je veľmi dôležité skontrolovať, čo sa s vašou aplikáciou deje, keď jej pošlete signál SIGTERM, ako sa správa, aby ste predišli neočakávaným udalostiam alebo zmenám v prevádzke systému spôsobeným vypnutím poda.

V tomto momente, predtým než podniknete ďalšie kroky, Kubernetes čaká počas stanoveného času, nazývaného terminationGracePeriodSecond, alebo obdobím pre riadne vypínanie po prijatí signálu SIGTERM.

Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

Predvolene je toto obdobie 30 sekúnd. Je dôležité poznamenať, že prebieha súčasne s preStop hook a signálom SIGTERM. Kubernetes nebude čakať, kým sa dokončí preStop hook a SIGTERM — ak vaša aplikácia ukončí prácu pred skončením obdobia TerminationGracePeriod, Kubernetes okamžite prejde na ďalší krok. Skontrolujte, aby hodnota tohto obdobia v sekundách nebola menšia než čas potrebný na riadne vypínanie poda, a ak presahuje 30 sekúnd, predĺžte obdobie na potrebnú hodnotu v YAML. V uvedenom príklade je to 60 sekúnd.

A nakoniec, posledný krok — ak kontajnery stále pracujú po uplynutí terminationGracePeriod, pošlú signál SIGKILL a budú nútene odstránené. V tomto momente Kubernetes tiež vyčistí všetky ostatné objekty poda.

Najlepšie praktiky Kubernetes. Správne vypínanie Terminate

Kubernetes ukončuje pod-y z mnohých dôvodov, a preto sa uistite, že vaša aplikácia bude vždy ukončená správne, aby sa zabezpečila stabilná prevádzka služby.

Najlepšie praktiky Kubernetes. Mapovanie vonkajších služieb

Prehrajte video

Trochu reklamy 🙂

Ďakujeme, že ostávate s nami. Páčia sa vám naše články? Chcete vidieť viac zaujímavých materiálov? Podporte nás, vytvorením objednávky alebo odporúčaním známym, cloud VPS pre vývojárov od 4,99 dolárov, unikátny ekvivalent entry-level serverov, ktorý sme pre vás vytvorili: Celá pravda o VPS (KVM) E5-2697 v3 (6 jadier) 10GB DDR4 480GB SSD 1Gbps od 19 dolárov alebo ako správne rozdeliť server? (k dispozícii varianty s RAID1 a RAID10, až 24 jadier a až 40GB DDR4).

Dell R730xd je dvakrát lacnejší v dátovom centre Equinix Tier IV v Amsterdame? Len u nás 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB od 199 dolárov v Holandsku! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — od 99 dolárov! Prečítajte si o tom Ako vybudovať infraštruktúru korporátneho typu s použitím serverov Dell R730xd E5-2650 v4 s cenou 9000 eur za zlomok ceny?

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