Jak fungují nasazení Kubernetes
Aplikace pro sledování dronů má několik komponent, které se nasazují odděleně od sebe. Je na vás, abyste pro tyto komponenty nakonfigurovali nasazení do clusteru. Tady se podíváte na některé z dostupných možností nasazení pro nasazení těchto komponent.
Možnosti nasazení podů
Existuje několik možností, jak spravovat nasazení podů v clusteru Kubernetes, když používáte kubectl
. Možnosti jsou následující:
- Šablony podů
- Kontrolery replikace
- Sady replik
- Nasazení
K nasazení podu nebo podů můžete použít kteroukoli z těchto čtyř definic typu objektu Kubernetes. Tyto soubory používají YAML k popisu zamýšleného stavu podů nebo podů, které se mají nasadit.
Co je šablona podu?
Šablona podu umožňuje definovat konfiguraci podu, který chcete nasadit. Šablona obsahuje informace, jako je název image kontejneru a registr kontejneru, který se má použít k načtení imagí. Šablona také obsahuje informace o konfiguraci modulu runtime, jako jsou porty, které se mají použít. Šablony se definují v jazyce YAML stejným způsobem, jako když vytváříte soubory Dockeru.
Pomocí šablon můžete pody nasadit ručně. Nezapomeňte ale, že ručně nasazený pod se v případě selhání, odstranění nebo ukončení znovu nespustí. Pokud chcete spravovat životní cyklus podu, musíte vytvořit objekt Kubernetes vyšší úrovně.
Co je kontroler replikace?
Kontroler replikace používá šablony podů a definuje konkrétní počet podů, které musí být spuštěné. Pomáhá spouštět několik instancí stejného podu a zajišťuje, že pody vždy běží na jednom nebo více uzlech v clusteru. Pokud pody spuštěné tímto způsobem selžou, odstraní se nebo se ukončí, kontroler je nahradí novými pody.
Předpokládejme například, že nasadíte front-endový web pro sledování dronů a uživatelé začnou k webu přistupovat. Pokud všechny pody z nějakého důvodu selžou, web nebude pro uživatele dostupný, dokud nespustíte nové pody. Kontroler replikace pomáhá zajistit, aby web byl pořád k dispozici.
Co je sada replik?
Sada replik nahrazuje kontroler replikace jako upřednostňovaný způsob, jak nasazovat repliky. Sada replik zahrnuje stejné funkce jako řadič replikace, ale má další možnost konfigurace, která zahrnuje hodnotu selektoru.
Selektor umožňuje sadě replik identifikovat všechny pody, které jsou v ní spuštěné. Pomocí této funkce můžete spravovat pody, které jsou popsané stejnou hodnotou, jakou má selektor, ale které se nevytvořily pomocí replikované sady.
Co je nasazení?
Nasazení vytvoří objekt správy o jednu úroveň vyšší než sada replik a umožňuje nasadit a spravovat aktualizace podů v clusteru.
Předpokládejme, že v clusteru máte nasazených pět instancí aplikace. Existuje pět podů, ve kterých běží verze 1.0.0 vaší aplikace.
Pokud se rozhodnete aplikaci aktualizovat ručně, můžete odebrat všechny pody a pak spustit nové pody se spuštěnou verzí 2.0.0 vaší aplikace. V této strategii dochází k výpadkům aplikace.
Místo toho chcete spustit kumulativní aktualizaci, ve které spouštíte pody s novou verzí aplikace, než odeberete pody se starší verzí aplikace. Kumulativní aktualizace se spouští postupně po jednom podu místo toho, aby se všechny starší pody spouštěly najednou. Nasazení dodržují počet replik nakonfigurovaných v části, která popisuje informace o sadách replik. Udržuje počet podů zadaných v sadě replik, protože nahrazuje staré pody novými pody.
Standardně nasazení nabízejí strategii aktualizace se zajištěním provozu. Můžete se rozhodnout také pro strategii opětovného vytvoření. Tato strategie ukončí pody před spuštěním nových podů.
Nasazení nabízejí i strategii vrácení zpět, kterou můžete spustit pomocí kubectl
.
Nasazení používají definiční soubory založené na jazyku YAML a usnadňují správu nasazení. Nezapomeňte, že nasazení umožňují provádět jakékoliv změny v clusteru. Můžete třeba nasazovat nové verze aplikace, aktualizovat popisky a spouštět jiné repliky podů.
Když k nasazení podu použijete příkaz kubectl
, kubectl run
nabízí pohodlnou syntaxi pro automatické vytvoření nasazení. Tento příkaz vytvoří nasazení s požadovanými pody a sadou replik. Nevytvoří ale definiční soubor. Osvědčeným postupem je spravovat všechna nasazení pomocí definičních souborů nasazení a sledovat změny pomocí systému správy verzí.
Aspekty nasazení
Kubernetes má specifické požadavky na konfiguraci sítě a úložiště pro cluster. Způsob, jak tyto dva aspekty nakonfigurujete, bude mít vliv na rozhodování, jak zveřejnit aplikace v síti s clustery a ukládat data.
Například každá služba v aplikaci pro sledování dronů má specifické požadavky na přístup uživatelů, přístup k síti mezi procesy a úložiště dat. Teď se podíváme na tyto aspekty clusteru Kubernetes a na to, jak ovlivňují nasazení aplikací.
Práce v síti s Kubernetes
Předpokládejme, že máte cluster s jednou řídicí rovinou a dvěma uzly. Když do Kubernetes přidáte uzly, k jednotlivým uzlům se automaticky přiřadí IP adresa z interního rozsahu privátní sítě. Předpokládejme například, že rozsah místní sítě je 192.168.1.0/24.
Každému podu, který nasadíte, se přiřadí IP adresa z fondu IP adres. Předpokládejme například, že vaše konfigurace používá rozsah sítě 10.32.0.0/12, jak ukazuje následující obrázek.
Ve výchozím nastavení spolu pody a uzly nemůžou pomocí rozdílných rozsahů IP adres komunikovat.
Aby to bylo ještě složitější, připomeňme si, že pody jsou přechodné. IP adresa podu je dočasná a nedá se pomocí ní znovu připojit k nově vytvořenému podu. Tato konfigurace má vliv na to, jak aplikace komunikuje s interními komponentami a jak s ní interagujete externě vy a služby.
Aby se komunikace zjednodušila, Kubernetes očekává, že síť nakonfigurujete tak, že:
- Pody spolu budou moct komunikovat prostřednictvím uzlů bez překladu adres (NAT).
- Uzly budou moct komunikovat se všemi pody, a naopak bez překladu adres (NAT).
- Agenti na uzlu budou moct komunikovat se všemi uzly a pody.
Kubernetes nabízí několik možností pro práci v síti, které můžete nainstalovat a pomocí kterých můžete síť nakonfigurovat. Patří mezi ně třeba Antrea, Cisco Application Centric Infrastructure (ACI), Cilium, Flannel, Kubenet, VMware NSX-T a Weave Net.
Poskytovatelé cloudu navíc nabízejí vlastní síťová řešení. Například služba Azure Kubernetes Service (AKS) podporuje rozhraní CNI (Container Network Interface) služby Azure Virtual Network, Kubenet, Flannel, Cilium a Antrea.
Služby Kubernetes
Služba Kubernetes je objekt Kubernetes, který zajišťuje stabilní síť pro pody. Služba Kubernetes umožňuje komunikaci mezi uzly, pody a uživateli vaší aplikace (interní i externí) do clusteru.
Kubernetes přiřazuje vytvářené službě IP adresu, stejně jako uzlu nebo podu. Tyto adresy se přiřazují z rozsahu IP adres clusteru služby; Například 10.96.0.0/12. Službě se rovněž přiřadí název DNS, založený na názvu služby, a port IP.
V aplikaci pro sledování dronů je síťová komunikace následující:
Web a rozhraní RESTful API jsou k dispozici uživatelům mimo cluster.
Služby mezipaměti v paměti a fronty zpráv jsou k dispozici front-endovému rozhraní API a rozhraní RESTful API, ale ne externím uživatelům.
Fronta zpráv potřebuje přístup ke službě pro zpracování dat, ale ne k externím uživatelům.
Databáze NoSQL je k dispozici mezipaměti v paměti a službě pro zpracování dat, ale ne externím uživatelům.
Pokud chcete tyto scénáře podporovat, můžete nakonfigurovat tři typy služeb, pomocí kterých se komponenty aplikace zpřístupní.
Služba | Popis |
---|---|
ClusterIP | Adresa přiřazená ke službě, která službu zpřístupňuje určité sadě služeb v clusteru. Například komunikaci mezi front-endovými a back-endovými komponentami vaší aplikace. |
NodePort | Port uzlu mezi 30000 a 32767, který řídicí rovina Kubernetes přiřadí službě; Například 192.169.1.11 v clusters01. Pak službě nakonfigurujete cílový port na podu, který chcete zpřístupnit. Nakonfigurujte například port 80 na podu, ve kterém je spuštěný jeden z front-endů. Teď budete mít přístup k front-endu prostřednictvím IP adresy a adresy portu uzlu. |
LoadBalancer | Nástroj pro vyrovnávání zatížení, který umožňuje distribuovat zatížení mezi uzly, na kterých běží vaše aplikace a které zpřístupňují pod veřejné síti. Nástroje pro vyrovnávání zatížení se obvykle konfigurují v případě, že používáte poskytovatele cloudu. V takovém případě se provoz z externího nástroje pro vyrovnávání zatížení směruje na pody, ve kterých běží vaše aplikace. |
V aplikaci pro sledování dronů se můžete rozhodnout zveřejnit sledovací web a rozhraní RESTful API pomocí LoadBalanceru a služby pro zpracování dat pomocí ClusterIP.
Jak seskupit pody
Správa podů podle IP adres není praktická. IP adresy podů se mění s tím, jak je kontrolery znovu vytvářejí, a navíc můžete mít spuštěný libovolný počet podů.
Objekt služby umožňuje cílit na konkrétní pody v clusteru a spravovat je pomocí popisků selektoru. Popisek selektoru se nastavuje v definici služby tak, aby odpovídal popisku podu definovanému v definičním souboru podu.
Předpokládejme například, že máte spoustu spuštěných podů. Jen některé z těchto podů jsou na front-endu a vy chcete nastavit službu LoadBalancer, která bude cílit pouze na ně. Pomocí služby můžete tyto pody zpřístupnit tak, že v definičním souboru služby budete odkazovat na popisek podu jako na hodnotu selektoru. Služba seskupí jenom pody, které odpovídají popisku. Pokud se pod odebere nebo znovu vytvoří, nový pod se automaticky přidá do skupiny služby prostřednictvím svého odpovídajícího popisku.
Úložiště Kubernetes
Kubernetes využívá stejný koncept svazku úložiště, který najdete i v Dockeru. Svazky Dockeru jsou méně spravované než svazky Kubernetes, protože životnost svazků Dockeru se nespravují. Životnost svazku Kubernetes je explicitní životnost, která odpovídá životnosti podu. Shoda životností znamená, že svazek přetrvá kontejnery spuštěné v podu. Pokud se ale pod odebere, odebere se i svazek.
Kubernetes nabízí možnost, jak zřídit trvalé úložiště pomocí PersistentVolumes. Navíc můžete také pro pody požádat o konkrétní úložiště pomocí PersistentVolumeClaims.
Mějte obě tyto možnosti na paměti při nasazování komponent aplikace, které vyžadují trvalé úložiště, třeba front zpráv a databází.
Aspekty integrace cloudu
Kubernetes neurčuje konkrétní technologie, které byste ve své nativní aplikaci pro cloud měli použít. V cloudovém prostředí, jako je Azure, můžete používat několik služeb, které nejsou součástí clusteru Kubernetes.
Připomeňte si, že Kubernetes neposkytuje žádnou z následujících služeb:
- Middleware
- Architektury pro zpracování dat
- Databáze
- Mezipaměti
- Systémy úložiště clusteru
V tomto řešení pro sledování dronů existují tři služby, které poskytují funkce middlewaru: databázi NoSQL, službu mezipaměti v paměti a frontu zpráv. Můžete vybrat MongoDB Atlas pro řešení NoSQL, Redis ke správě mezipaměti v paměti, RabbitMQ nebo Kafka v závislosti na potřebách fronty zpráv.
V cloudovém prostředí jako Azure se doporučuje využívat služby mimo cluster Kubernetes. Toto rozhodnutí může zjednodušit konfiguraci a správu clusteru. Například Azure Cache for Redis můžete využít pro služby ukládání do mezipaměti v paměti, zasílání zpráv Azure Service Bus zajistí frontu zpráv a Azure Cosmos DB nabídne databázi NoSQL.