Programovanie

Zhlukovanie pomocou Docker Swarm

Tento výukový program predstavuje vývojárov jazyka Java pre Docker Swarm. Dozviete sa, prečo toľko podnikových obchodov prijalo vývoj riadený kontajnermi prostredníctvom Dockeru a prečo je vytváranie klastrov dôležitou technikou pre prácu s kontajnermi Dockeru. Dozviete sa tiež, ako sa porovnávajú dve populárne klastrové technológie Docker - Amazon ECS a Docker Swarm, a získate rýchleho sprievodcu výberom správneho riešenia pre váš obchod alebo projekt. Tutoriál je zakončený praktickou ukážkou použitia Docker Swarm na vývoj a správu dvojuzlového podnikového klastra.

Čítajte teraz: Vývoj riadený kontajnermi pomocou Dockeru

Pred ponorením do programu Docker Swarm je dobré poznať vývoj riadený kontajnermi a základy Dockeru. Nižšie uvádzam prehľad, ale pre podrobnejšiu diskusiu si pozrite môj úvod do Dockeru. Vývojári oboznámení s týmito základmi by mali prejsť na ďalšiu časť.

Aká je dohoda s Dockerom?

Docker je otvorená platforma pre vytváranie, prepravu a spustenie distribuovaných aplikácií. Dockerizované aplikácie môžu bežať lokálne na stroji vývojára a môžu byť nasadené do výroby v rámci cloudovej infraštruktúry. Docker je vhodný na rýchly vývoj a umožňuje nepretržitú integráciu a nasadenie ako takmer žiadna iná technológia. Kvôli týmto funkciám je to platforma, ktorú by mal vedieť používať každý vývojár.

Je nevyhnutné si uvedomiť, že Docker je kontajnerizácia technológia, nie a virtualizácia technológie. Zatiaľ čo virtuálny stroj obsahuje kompletný operačný systém a je riadený procesom veľkej váhy nazývaným hypervisor, kontajner je navrhnutý tak, aby bol veľmi ľahký a samostatný. Každý server spustí proces démona, ktorý sa nazýva Docker engine, ktorý spúšťa kontajnery a prevádza hovory operačného systému v kontajneri na natívne hovory v hostiteľskom operačnom systéme. Kontajner, ktorý je obdobou virtuálneho stroja, je iba o dosť menší a je hostiteľom vašej aplikácie, runtime prostredia a operačného systému barebone. Kontajnery zvyčajne bežia na virtuálnych strojoch. Zatiaľ čo spustenie virtuálneho stroja môže trvať minúty, kontajner to zvládne za pár sekúnd.

Obrázok 1 zobrazuje rozdiel medzi kontajnerom a virtuálnym strojom.

Kontajnery Docker sú samostatné, čo znamená, že obsahujú všetko, čo potrebujú na spustenie vašej aplikácie. Napríklad pre webovú aplikáciu spustenú v Tomcate by kontajner obsahoval:

  • Súbor WAR
  • Tomcat
  • JVM
  • Základný operačný systém

Obrázok 2 zobrazuje architektúru webovej aplikácie vo vnútri kontajnera Docker.

V prípade Dockeru každý virtuálny stroj spustí proces démona s názvom Dockerov motor. Vytvoríte svoju aplikáciu, napríklad svoj súbor WAR, a potom vytvoríte zodpovedajúcu aplikáciu Dockerfile. Dockerfile je textový súbor, ktorý popisuje, ako vytvoriť súbor Dockerov obraz, čo je binárny súbor obsahujúci všetko potrebné na spustenie aplikácie. Napríklad môžete zostaviť súbor Docker zo základného obrázka Tomcat obsahujúceho základný OS Linux, runtime Java a Tomcat. Po pokyne spoločnosti Docker, aby skopírovala súbor WAR do adresára webcaps spoločnosti Tomcat, by sa súbor Dockerfile skompiloval do obrazu Dockeru pozostávajúceho zo základného OS, JVM, Tomcat a vášho súboru WAR. Obrázok Dockera môžete spustiť lokálne, ale nakoniec ho zverejníte v a Úložisko Docker, ako DockerHub.

Zatiaľ čo Docker Image je binárna verzia vášho kontajnera, runtime inštancia Docker Image sa nazýva a Kontajner Docker. Kontajnery Docker prevádzkuje váš server Dockerov motor. Stroj, ktorý spúšťa váš motor Docker, sa nazýva Hostiteľ Docker; môže to byť váš miestny prenosný počítač alebo cloudová platforma, v závislosti od rozsahu vašej aplikácie.

Základné informácie v tejto časti poskytujú základ pre pochopenie toho, prečo je klastrovanie dôležitým doplnkom vašej sady nástrojov Docker. Viac sa dozviete v mojom úvode k Dockeru.

Zhlukovanie Docker

Väčšina vývojárov, ktorí začínajú s programom Docker, zostaví súbor Dockerfile a spustí ho lokálne v prenosnom počítači. Vývoj spravovaného kontajnermi však spočíva v tom, že je potrebné lokálne spúšťať jednotlivé kontajnery Docker. Dockerova superveľmoc je schopnosť dynamicky škálovať nádoby hore alebo dole. Vo výrobe to znamená spustenie Dockeru v klastri na celej rade strojov alebo virtuálnych strojov.

K dispozícii sú rôzne klastrové technológie Docker, ale dve najobľúbenejšie sú Amazon EC2 Container Service (ECS) a Docker Swarm.

Amazon ECS

Klastrová technológia Docker od spoločnosti Amazon využíva službu Amazon Web Services (AWS) na vytvorenie klastra virtuálnych strojov, ktoré môžu spúšťať Dockerove kontajnery. Klaster ECS pozostáva zo spravovaných Inštancie ECS, ktoré sú inštanciami EC2 s Dockerovým motorom a agentom ECS. ECS používa skupinu automatického škálovania na rozšírenie a kontrakciu počtu inštancií na základe zásad CloudWatch. Napríklad keď je priemerné využitie procesora inštancií ECS príliš vysoké, môžete požiadať ECS, aby spustilo viac inštancií, a to až do maximálneho počtu inštancií definovaných v skupine automatického škálovania.

Kontajnery Docker sú spravované serverom Služba ECS a nakonfigurovaný podľa množstva výpočtovej kapacity (CPU) a RAM, ktoré musí kontajner bežať. Služba ECS má priradený Elastic Load Balancer (ELB). Keď spúšťa a zastavuje kontajnery Docker, služba ECS tieto kontajnery zaregistruje a odhlási z ELB. Keď nastavíte pravidlá pre svoj klaster, Amazon ECS zabezpečí, že máte spustený požadovaný počet kontajnerov a všetky tieto kontajnery budú prístupné prostredníctvom ELB. Obrázok 3 zobrazuje pohľad na vysokoúrovňový systém Amazon ECS.

Je dôležité rozlišovať medzi ECS inštancie a úlohy. Klaster ECS spravuje vaše inštancie ECS, čo sú špeciálne inštancie EC2, ktoré bežia v skupine automatického škálovania. Služba ECS spravuje úlohy, ktoré môžu obsahovať jeden alebo viac kontajnerov Docker a ktoré bežia v klastri. ELB sedí pred inštanciami ECS, ktoré prevádzkujú vaše Dockerove kontajnery a distribuujú záťaž do vašich Dockerových kontajnerov. Vzťah medzi úlohami ECS a kontajnermi Docker je ten, že definícia úlohy hovorí službe ECS, ktoré kontajnery Docker majú bežať, a konfigurácii týchto kontajnerov. Služba ECS spustí úlohu, ktorá spustí Dockerove kontajnery.

Prečítajte si moje predstavenie služby Amazon ECS na stránke VMTurbo.com.

Docker Swarm

Dockerova natívna technológia klastrovania, Docker Swarm, vám umožňuje prevádzkovať viac kontajnerov Docker v klastri virtuálnych strojov. Docker Swarm definuje a manažér kontajner, ktorý beží na virtuálnom stroji, ktorý spravuje prostredie, nasadzuje kontajnery k rôznym agentom a hlási stav kontajnera a informácie o nasadení pre klaster.

Pri spustení Docker Swarm je správca primárnym rozhraním pre Docker. Agenti sú „docker machines“ bežiace na virtuálnych strojoch, ktoré sa zaregistrujú u správcu a spúšťajú Dockerove kontajnery. Keď klient pošle manažérovi žiadosť o spustenie kontajnera, manažér nájde dostupného agenta na jeho spustenie. Používa najmenej využívaný algoritmus na zabezpečenie toho, aby agent prevádzkujúci najmenší počet kontajnerov spustil novo požadovaný kontajner. Obrázok 4 zobrazuje ukážku konfigurácie Docker Swarm, ktorú rozvinieme v nasledujúcej časti.

Proces manažéra vie o všetkých aktívnych agentoch a kontajneroch bežiacich na týchto agentoch. Po spustení virtuálnych strojov agenta sa zaregistrujú u správcu a potom sú k dispozícii na spustenie kontajnerov Docker. Príklad na obrázku 4 má dvoch agentov (Agent1 a Agent2), ktorí sú zaregistrovaní u správcu. Každý agent má spustené dva kontajnery Nginx.

Docker Swarm vs Amazon ECS

Tento článok obsahuje Docker Swarm, ale je užitočné porovnávať technológie kontajnerov. Zatiaľ čo Amazon ECS ponúka dobre vyvinuté riešenie na kľúč, Docker Swarm vám dáva slobodu konfigurovať viac svojej vlastnej infraštruktúry. Napríklad Amazon ECS spravuje kontajnery aj vyrovnávače záťaže, zatiaľ čo v Docker Swarm by ste nakonfigurovali riešenie na vyvažovanie záťaže, ako je Cisco LocalDirector, F5 BigIp alebo softvérový proces Apache či Nginx.

Ak už svoju aplikáciu spúšťate v AWS, ECS uľahčuje spustenie a správu kontajnerov Docker oveľa ľahšie, ako by to robilo externé riešenie. Ako vývojár AWS pravdepodobne už využívate skupiny automatického škálovania, ELB, virtuálne privátne cloudy (VPC), role a politiky správy identít a prístupu (IAM) atď. ECS sa dobre integruje so všetkými z nich, takže je to správna cesta. Ak ale nepoužívate AWS, potom je vďaka úzkej integrácii Docker Swarm s nástrojmi Docker skvelou voľbou.

AWS a Docker Swarm v hybridnom oblaku

Webové služby Amazon je možné nakonfigurovať na veľmi vysokú dostupnosť, škálovateľnosť a výkon, čo je pravdepodobne dôvod, prečo obsluhuje 25% všetkého internetového prenosu vrátane rozsiahlej infraštruktúry služieb Netflix. V poslednej dobe sa však začal tlačiť smerom k prostrediu hybridných cloudov. A hybridný cloud je cloud, v ktorom časť aplikácie alebo niekedy jej úplná kópia beží vo verejnom cloude ako AWS a časť v súkromnom cloude. Populárnou možnosťou v tomto prípade je spustenie OpenStack v súkromnom dátovom centre.

Hybridný cloud je bezpečná stratégia pre spoločnosť, ktorá presúva niektoré alebo všetky operácie do cloudu, ale musí ísť pomaly a získať dôveru vo verejné cloudy. Keď si vyberiete možnosť hybridného cloudu, musíte vytvoriť vrstvu abstrakcie nad základnými cloudovými technológiami, čo znamená, že môžete rovnako ľahko nasadiť na Docker Swarm bežiaci na OpenStack vo vašom vlastnom dátovom centre, ako aj na ECS bežiaci na AWS . Nástroje ako Chef and Puppet vám môžu pomôcť tým, že vám umožnia abstraktne definovať vaše prostredia a delegovať ich tak, aby zvládli množstvo rozdielov medzi rôznymi prostrediami.

Začíname s Docker Swarm

V predchádzajúcej časti ste videli ukážkovú architektúru pre dvojuzlový klaster Docker Swarm. Teraz tento klaster vyviniete pomocou dvoch inštancií kontajnera Nginx Docker. Nginx je populárny webový server, ktorý je verejne dostupný ako obraz Dockeru na DockerHub. Pretože sa tento článok zameriava na Docker Swarm, chcel som použiť kontajner Docker, ktorého spustenie je rýchle a ľahké a ktoré je možné priamo otestovať. Môžete ľubovoľne použiť ľubovoľný kontajner Docker, ale pre ilustráciu som si pre tento príklad vybral Nginx.

Môj úvod do Dockeru obsahuje sprievodcu nastavením Dockeru vo vašom vývojovom prostredí. Ak ste si nainštalovali a nastavili Docker Toolbox, obsahuje všetko, čo potrebujete na spustenie Docker Swarm. Ďalšie pokyny na nastavenie nájdete v oficiálnej dokumentácii Dockeru.

Docker Swarm na príkazovom riadku

Ak ste predtým používali Docker, potom ste oboznámení s používaním docker príkazového riadku na spustenie a zastavenie kontajnerov. Pri použití Docker Swarm budete obchodovať docker pre dokovací stroj. Docker Machine je v dokumentácii Docker definovaný takto:

Docker Machine je nástroj, ktorý vám umožňuje inštalovať Docker Engine na virtuálnych hostiteľov a spravovať hostiteľov pomocou príkazov docker-machine. Môžete použiť Machine na vytvorenie hostiteľov Dockeru na vašom lokálnom počítači Mac alebo Windows, vo vašej firemnej sieti, vo vašom dátovom centre alebo na poskytovateľoch cloudu ako AWS alebo Digital Ocean. Pomocou príkazov docker-machine môžete spustiť, skontrolovať, zastaviť a reštartovať spravovaného hostiteľa, upgradovať klienta Docker a démona a nakonfigurovať klienta Docker tak, aby hovoril s vaším hostiteľom.

Ak ste si nainštalovali Docker, vaša inštalácia už obsahuje Docker Machine. Ak chcete začať používať program Docker Swarm, spustite program Docker a otvorte terminál v počítači. Vykonajte nasledujúce docker-machine ls príkaz na výpis všetkých virtuálnych počítačov na vašom lokálnom počítači:

 $ docker-machine ls NÁZOV AKTÍVNY ŠTÁT ŠTÁTU URL SWARM predvolené * virtualbox Spustený tcp: //192.168.99.100: 2376 

Ak ste Docker spustili iba z miestneho počítača, mali by ste mať spustený predvolený virtuálny počítač Docker s adresou IP 192.168.99.100. Ak chcete šetriť zdroje na vašom lokálnom počítači, môžete tento virtuálny počítač zastaviť vykonaním: predvolené zastavenie dokovacieho zariadenia.

Vytvorte roj

Roj Dockera sa skladá z dvoch alebo virtuálnych strojov, na ktorých sú spustené inštancie Dockera. V tejto ukážke vytvoríme tri nové virtuálne stroje: manager, agent1 a agent2. Vytvorte si svoje virtuálne stroje pomocou dokovací stroj-stroj príkaz:

$ Docker-Machine Create -D Virtualbox Manager $ Docker-Machine Create -D Virtualbox Agent1 $ Docker-Machine Create -d Virtualbox Agent2 

The dokovací stroj-stroj príkaz vytvorí nový "stroj". Odovzdávam to -d Argument umožňuje určiť ovládač, ktorý sa použije na vytvorenie stroja. Bežiace lokálne, to by malo byť virtualbox. Prvý vytvorený stroj je manažér, ktorý bude hostiť manažérsky proces. Posledné dva stroje, agent1 a agent2, sú stroje agentov, ktoré budú hostiť procesy agentov.

V tomto okamihu ste vytvorili virtuálne stroje, ale nevytvorili ste skutočného manažéra alebo agentov Swarm. Ak chcete zobraziť virtuálne stroje a ich stav, vykonajte príkaz docker-machine ls príkaz:

 $ docker-machine ls NÁZOV AKTÍVNEHO ŠTÁTU ŠTÁTU URL CHYBA SWARM DOCKERA agent1 - virtualbox beží tcp: //192.168.99.101: 2376 v1.11.1 agent2 - virtualbox beží tcp: //192.168.99.102: 2376 v1.11.1 predvolene - virtualbox zastavený neznámy manager * virtualbox Beží tcp: //192.168.99.100: 2376 v1.11.1 
$config[zx-auto] not found$config[zx-overlay] not found