Principy správy stavů v Kubernetes

Dokončeno

Při obecném mluvení o aplikacích můžete často slyšet o stavu aplikace. V této lekci si projdeme definici stavu a různé typy stavů, abyste mohli lépe připravit aplikaci na jejich zpracování.

Stát

Stav aplikace je všechno, co je uložené v paměti v době, kdy je aplikace spuštěná. Stav může zahrnovat různé věci, ale většinou se zaměřujeme na uživatelská data.

Pokud chcete uvést příklad stavu aplikace, představte si, že máte otevřený hudební přehrávač. Tato aplikace má stav. Ví, kdo jste, co chcete slyšet a jakou hudbu jste stáhli. Všechny tyto informace jsou součástí stavu aplikace.

Stav v paměti je informace, které aplikace nemusí hledat kdekoli jinde. Stav disku obsahuje informace, které aplikace nemá v ruce, takže ji musí načíst z jiného zdroje dat.

Druhy stavů

Existují dva typy stavů aplikace. Prvním typem je dočasný stav, který není trvalý a zmizí ihned po zavření aplikace.

Kontejnery mají dočasný stav. Všechna data uložená v nich se okamžitě ztratí při odstranění kontejneru. Některé aplikace můžou pracovat s tímto samostatně, protože můžou znovu vygenerovat stav z jiných zdrojů a nepotřebují, aby se stav ukládaly místně. Tyto aplikace se nazývají stateless aplikace.

Veškerý zbývající stav, který není dočasný, se nazývá trvalý stav. Trvalý stav přetrvává i po životním cyklu kontejneru. Většina kontejnerových technologií, které používáme, má princip svazku, což je umístění na disku, kde se uchovává stav. I když kontejner odeberete a znovu ho zapnete, zůstane stav uložený v bezpečném umístění a můžete ho znovu použít.

Aplikace, které spoléhají na načtení externího stavu, se nazývají stateful aplikace.

Stavy a Kubernetes

Kubernetes dokáže zpracovávat bezstavové i stavové aplikace. Bezstavové aplikace jsou jednodušší, protože se můžeme soustředit jenom na samotnou aplikaci, a ne na její stav (protože neexistuje).

U většiny bezstavových aplikací stačí jednoduchá úloha nasazení s podem, abyste měli plně funkční systém a maximálně využili váš cluster.

Práce se stavovými aplikacemi je přesným opakem. V těchto případech je potřeba zvážit aplikaci a její stav, kde je stav uložený a jak můžete stav bezpečně a spolehlivě uložit.

Proto má Kubernetes také koncept PersistentVolumes (PVs) a PersistentVolumeClaims (PVCs).

Spropitné

Tento modul se podrobněji nezabírá koncepty úložiště, ale v souhrnu se můžete podívat na prostředky služby Azure Kubernetes Service, kde najdete další informace.

PersistentVolumes jsou disky přidělené v uzlech pro ukládání stavů z kontejneru podu. Vzhledem k tomu, že Kubernetes je nejvhodnější pro distribuované aplikace, všechny vytvořené svazky se nacházejí ve fondu dostupných svazků. Kontejnery si pak tento prostor přivlastní pro sebe. Pomocí PersistentVolumeClaims můžete svázat PersistentVolume s podem a použít jeho prostor k uložení potřebných dat.

Všechny poskytovatele databází jsou stavové aplikace. Pokud nasazujete zprostředkovatele databáze ve vašem clusteru, potřebujete PV a PVC k uložení dat databáze na bezpečné místo a umožnit poskytovateli načíst tato data i v případě, že byly jeho kontejnery odstraněny.

Osvědčené postupy pro zpracování stavu

Stav je k dispozici ve většině aplikací. Osvědčeným postupem pro zpracování stavu je ale to, že se s ním vůbec nezachází.

Navrhujete jakoukoli efektivní aplikaci s cílem, aby byla vysoce dostupná a škálovatelná. Stát jde opačným směrem. Navzdory možnostem poskytovaným poskytovateli úložišť a snadnosti nasazení a použití se stav neškáluje snadno. Není ani vysoce dostupná.

Stav s vysokou dostupností

Aby byla aplikace vysoce dostupná, musí být vždy online. To se provádí prostřednictvím replikace zón a oblastí. Kubernetes je si u většiny svých úloh vědom zón. To znamená, že můžete mít několik instancí aplikace, které jsou nasazené v různých zónách. Disky ale nejsou povědomé o zónách.

Když nasadíte nový objekt PersistentVolume v Kubernetes, je vázaný na disk na uzlu. Tento disk je také vázán na konkrétní zónu v konkrétní oblasti. Použití replikace zóny nebo oblasti s virtuálními počítači je složité a vyžaduje spoustu údržby, a to jak k replikaci, tak k synchronizaci dat.

Vysoce škálovatelný stav

Aby byla aplikace vysoce škálovatelná, měla by zvýšit propustnost společně s počtem uživatelů, kteří jsou k ní připojení. Správa stavů je složitá, protože jakýkoli externí stav je v podstatě disk a disk má omezenou vstupní a výstupní rychlost. Správa propustnosti pomáhá tento problém vyřešit.

Databázová řešení přišla s myšlenkou ReplicaSets, která replikují celou databázi do více instancí. Replikace zvyšuje počet disků a a vstupně-výstupních operací pro daný stav.

Při každé změně databáze je potřeba synchronizovat stav tak, aby všechny disky obsahovaly stejná data. Tato synchronizace je také složitá.

Externalizace stavu

Azure má řešení typu Platforma jako služba (PaaS), jako je Azure Cosmos DB, která jsou vysoce dostupná a škálovatelná a řeší většinu problémů se správou stavu za vás.

Uložení stavu externě a odebrání potřeby údržby vám může pomoct soustředit se na aplikaci a snížit režii související s integritou dat ve vaší infrastruktuře.

Kontrola znalostí

1.

Jaký je trvalý stav aplikace?

2.

Jak Kubernetes zpracovává stavy?

3.

Jaký je osvědčený postup pro zpracování stavu v aplikacích Kubernetes?