Orchestrování kontejnerů Node.js pomocí Kubernetes

Tento blogový příspěvek navazuje na Containerizing Node.js Applications with Docker, kde jsme se zabývali tím, co jsou kontejnery, proč je organizace považují za tak užitečné v moderním softwarovém ekosystému a osvědčenými postupy pro přeměnu aplikací Node.js na neměnné kontejnery pomocí Dockeru.

Konverzace nekončí vytvářením instancí kontejnerů. Pokud kontejnery umožňují například architekturu založenou na mikroslužbách, jak mezi sebou mikroslužby komunikují? Jak týmy DevOps implementují postupné zavádění, spravují procesy v kontejnerech a zvyšují a snižují, aby zůstaly v souladu s poptávkou?

Odpověď:kontejnerová orchestrační vrstva.

V tomto příspěvku se podíváme na:

  • Požadavky na uspořádání pro jednoduché a složité architektury kontejnerů.
  • Přehled orchestrace kontejnerů a Kubernetes.
  • Vytváření sítí v kontejnerovém prostředí.

Vrstva Orchestration

V kontejnerové architektuře dohlíží vrstva orchestrace na nasazení, škálování a správu kontejnerů. Orchestrační vrstva provádí:

  • Plánování kontejnerů na fyzické/virtuální stroje, někdy zahrnující tisíce vztahů kontejner-stroj.
  • Restartování kontejnerů, pokud se zastaví.
  • Povolení sítě kontejnerů.
  • Škálování kontejnerů a souvisejících zdrojů podle potřeby nahoru a dolů.
  • Zjištění služby.

V oblasti orchestrace kontejnerů došlo k velkému zájmu od řady poskytovatelů IaaP a IaaS. V závislosti na tom, jak je distribuovaná architektura kontejnerů vaší organizace, existuje několik možností orchestrace, které poskytují odpovídající komplexní (nebo jednoduché) možnosti.

Ovládání jednodušších architektur

Co je to jednoduchá architektura Node.js? Pokud je vaše aplikace podporována pouze několika procesy, jednou nebo dvěma databázemi, nástrojem pro vyrovnávání zatížení, klientem a existuje na jediném hostiteli – nebo něco srovnatelného s tímto měřítkem –, pak vaše požadavky na orchestraci s největší pravděpodobností uspokojí nástroje pro orchestraci společnosti Docker. .

Pokud je však vaše architektura kontejneru více v souladu s následujícím obrázkem, řešení orchestrace, jako je Amazon ECS, Nomad nebo Kubernetes, je vhodnější pro požadavky na produkci ve velkém měřítku. Tento příspěvek se zaměří na Kubernetes.

Ochrana kontejnerů s Kubernetes

Přehled Kubernetes

Kubernetes („K8s“) je systém s otevřeným zdrojovým kódem pro automatizaci a správu orchestrace kontejnerů, který vyrostl z Borg společnosti Google a nyní je spravován nadací Cloud Native Computing Foundation.

Díky hladkému uživatelskému zážitku zaměřenému na vývojáře a inženýry DevOps a působivé sadě funkcí pro orchestraci, včetně automatizovaného zavádění a vrácení zpět, zjišťování služeb, vyvažování zátěže a tajné a konfigurační správy, Kubernetes vygeneroval v krátké době spoustu podpory. Integrace se všemi hlavními poskytovateli cloudu zajišťuje přenositelnost Kubernetes do řady infrastruktur.

Architektura Kubernetes

Architektura Kubernetes založená na hlavním uzlu umožňuje rychlé horizontální škálování. Síťové funkce pomáhají usnadnit rychlou komunikaci mezi, do az různých prvků Kubernetes.

Zde jsou základní součásti architektury Kubernetes:

  • Pod: Nejmenší nasaditelná jednotka vytvořená a spravovaná Kubernetes, Pod je skupina jednoho nebo více kontejnerů. Kontejnery v podu sdílejí IP adresu a mohou k sobě přistupovat přes localhost a také využívat sdílený přístup ke svazkům.
  • Uzel: Pracovní stroj v Kubernetes. Může to být virtuální počítač nebo fyzický počítač a je dodáván se službami nezbytnými ke spuštění Pods .
  • Služba: Abstrakce, která definuje logickou sadu modulů a zásady pro přístup k nim. Přiřadí replikám modulů pevnou IP adresu a umožní ostatním modulům nebo službám s nimi komunikovat.
  • ReplicaSet: Zajišťuje, že v daný čas běží zadaný počet replik podů. K8 doporučují používat Deployments namísto přímé manipulace s objekty ReplicaSet, pokud nevyžadujete vlastní orchestraci aktualizací nebo nevyžadujete aktualizace vůbec.
  • Nasazení: Řadič, který poskytuje deklarativní aktualizace pro Pods a ReplicaSets.
  • Jmenný prostor: Virtuální cluster podporovaný stejným fyzickým clusterem. Způsob, jak rozdělit prostředky clusteru mezi více uživatelů, a mechanismus pro připojení oprávnění a zásad k podsekci daného clusteru.

Následující obrázek poskytuje vizuální rozvržení popisující různé rozsahy komponent Kubernetes:

Štítky a selektory

Kubernetes poskytl několik funkcí pro rozlišení mezi uživateli a objekty:

  • Štítky: Páry klíč/hodnota připojené k objektům (jako je pod) obsahující identifikující metadata, jako je čára vydání, prostředí a vrstva zásobníku.
  • Selektory: Základní seskupovací primitiv v Kubernetes. Selektory štítků umožňují seskupování nebo správu objektů prostřednictvím jejich štítků .

Štítky, selektory a jmenné prostory jsou zásadní pro to, aby byl Kubernetes tak flexibilní a dynamický ve svých konfiguračních možnostech. Mějte na paměti, že selektory štítků dvou ovladačů se nesmí v rámci jmenného prostoru překrývat, jinak dojde ke konfliktům.

Protože samotný Kubernetes je postaven na distribuované architektuře, vyniká při vytváření a správě mikroslužeb a dalších distribuovaných architektur. Zatímco hloubání do podrobností o různých službách, které pohánějí Kubernetes, je mimo rozsah tohoto článku, následující obrázek ukazuje vyšší úroveň interakcí mezi různými prvky Kubernetes Control Plane :

Mějte na paměti toky informací Control Plane, když se podíváme na to, jak Kubernetes zachází se sítí kontejnerů.

Síť kontejnerů

Síťování mezi kontejnery je jednou z nejnáročnějších softwarových výzev v orchestraci kontejnerů. V této části se podíváme na to, jak Docker zachází se sítí kontejnerů, jak tento přístup omezuje schopnosti Dockeru organizovat kontejnery ve velkém a jak díky přístupu Kubernetes k síťovým výzvám je orchestrace Kubernetes vhodnější pro elegantní a rychlé škálování.

Vytváření sítí způsobem Docker

Ve výchozím nastavení kontejnery Docker používají síť hostitel-soukromá. Za tímto účelem poskytuje Docker „virtuální most“ nazvaný docker0 ve výchozím nastavení na hostiteli s prostorem pro každý kontejner zřízený uvnitř mostu. Pro připojení k virtuálnímu mostu Docker přidělí každému kontejneru veth (virtuální ethernetové zařízení), které je poté namapováno tak, aby vypadalo jako eth0 v kontejneru prostřednictvím překladu síťových adres (NAT). NAT je metoda mapování jedné IP adresy na druhou úpravou informací o síťové adrese v IP hlavičkách paketů.

To představuje pro DevOps několik problémů:

Za prvé a to nejdůležitější, kontejnery Docker propojené sítí pomocí přemostění mohou komunikovat pouze s kontejnery na stejném počítači nebo virtuálním mostu. To je v pořádku pro projekty omezeného rozsahu s poměrně úzkými požadavky na síť, ale problematické, když je zapojeno mnoho hostitelů a strojů.
Za druhé, spoléhání se na NAT může vést k nezanedbatelnému zásahu do výkonu.

Vytváření sítí způsobem Kubernetes

Síť s Kubernetes má být výkonnější a škálovatelnější než s výchozím nástrojem Docker. Aby to bylo možné, musí síťové implementace Kubernetes splňovat následující požadavky:

  • Všechny kontejnery mohou komunikovat se všemi ostatními kontejnery bez NAT.
  • Všechny uzly mohou komunikovat se všemi kontejnery (a naopak) bez NAT.
  • Samotný odkaz na kontejner se stejnou adresou IP, jakou na něj odkazují jiné kontejnery.

Když jsou tyto podmínky splněny, je mnohem snazší koordinovat porty mezi více týmy a vývojáři. Software jako Flannel, WeaveNet a Calico poskytuje dobře podporované síťové implementace Kubernetes.

Přehled

Ve spojení s Dockerem představuje Kubernetes elegantní řešení pro automatizaci správy, nasazení a škálování kontejnerizovaných aplikací Node.js. Kubernetes, vysoce přenosný a podporovaný všemi hlavními poskytovateli cloudu, pomáhá podporovat architektury moderního softwaru založené na mikroslužbách.

I když má Kubernetes mnoho pohyblivých částí, vytváří silné body abstrakce, díky nimž jsou funkce, jako je automatické zavádění, vrácení zpět a vyvažování zátěže, stejně jako netriviální síťové požadavky, jako je zjišťování služeb a komunikace kontejner-kontejner, konfigurovatelné a předvídatelné.

Poslední věc

Pokud vás zajímá správa kontejnerů Node.js Docker, možná vás bude zajímat N|Solid. Pracujeme na tom, abychom zajistili, že Docker a Kubernetes jsou prvotřídní občané pro podnikové uživatele Node.js, kteří potřebují přehled a jistotu pro jejich nasazení Node.js.

Pokud se chcete naladit na svět Node.js, Docker, Kubernetes a rozsáhlé nasazení Node.js, nezapomeňte nás sledovat na @NodeSource na Twitteru.