Principy správy stavu v Kubernetes
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í.
State
Stav aplikace je všechno, co je uloženo v paměti v době běhu aplikace. Stav může zahrnovat různé věci, ale většinou se zaměřujeme na uživatelská data.
Abychom uvedli příklad stavu aplikace, představte si, že máte otevřený přehrávač hudby. Tato aplikace má stav. Ví, kdo jste, co chcete slyšet a jakou hudbu jste si stáhli. Všechny tyto informace jsou součástí stavu aplikace.
Stav v paměti je informace, že aplikace nemusí hledat nikde jinde. Stav disku obsahuje informace, které aplikace nemá po ruce, takže je musí načíst z jiného zdroje dat.
Typy stavů
Existují dva typy stavů aplikace. Prvním typem je dočasný stav, který není trvalý a zmizí hned 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 mohou takto pracovat, protože umí regenerovat stav z jiných zdrojů a nepotřebují, aby byl stav uložený místně. Tyto aplikace se nazývají bezstavové (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 technologií kontejnerů, které používáme, má koncept svazku, umístění na disku, ve kterém existuje 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 spoléhající na načtení externího stavu se nazývají stavové (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čí k tomu, abyste měli plně funkční systém a maximálně využili cluster, jednoduchá úloha nasazení s podem.
Práce se stavovými aplikacemi představuje opak. 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.
To je důvod, proč má Kubernetes také koncept PersistentVolumes (PV) a PersistentVolumeClaims (PVC).
Tip
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, které jsou v uzlech přidělené pro ukládání stavů z kontejneru podu. Vzhledem k tomu, že platforma Kubernetes je určená pro distribuované aplikace, jsou všechny vytvořené svazky ve fondu dostupných svazků. Kontejnery pak tento prostor deklarují pro sebe. Pomocí PersistentVolumeClaims
můžete svázat PersistentVolume
s podem a použít jeho prostor pro uložení potřebných dat.
Všichni poskytovatelé 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 práci se stavy
Stav je k dispozici ve většině aplikací. Osvědčeným postupem pro práci se stavem je ale si ho vůbec nevšímat.
Navrhnete jakoukoli efektivní aplikaci s cílem zajištění její vysoké dostupnosti a škálovatelnosti. Stav jde ale opačným směrem. Bez ohledu na možnosti poskytované poskytovateli úložiště a snadné nasazení a použití se stav snadno škáluje. Není ani vysoce dostupný.
Vysoce dostupný stav
Aby byla aplikace vysoce dostupná, musí být vždy online. To se provádí pomocí replikace zóny a oblasti. Kubernetes ve většině úloh zóny podporuje. To znamená, že můžete mít několik instancí aplikace, které jsou nasazeny v různých zónách. Disky ale zóny nepodporují.
Když nasadíte nový PersistentVolume
objekt v Kubernetes, je vázán na disk na uzlu. Tento disk je také svázán s konkrétní zónou 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í. To je v rámci správy stavů komplikované, protože každý 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 vstupně-výstupní operace pro stav.
Při každé změně databáze je potřeba stav synchronizovat, 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.
Externí ukládání stavu a odpadající nutnost správy vám může pomoct soustředit se na aplikaci a snížit náklady na řešení celistvosti dat ve vaší infrastruktuře.