Dacă v-ați containerizat fluxul de lucru de dezvoltare, veți fi de acord că Docker este una dintre cele mai bune alegeri pentru controlul versiunilor. Cu toate acestea, Docker Swarm este una dintre caracteristicile lui Docker folosite pentru a orchestra aplicații complexe.

Mecanismul de lucru Docker Swarm poate fi greu de spart la început. Dar nu vă faceți griji, o vom detalia în acest articol. Deci, ce este Docker Swarm? De ce să-l folosești? Și cum funcționează?

Ce este Docker Swarm și cum funcționează?

Docker Swarm se referă la un grup de gazde Docker (calculatoare) conectate în rețea ca un cluster pentru a furniza sarcini specificate. Fiecare gazdă Docker din acest cluster este un nod, numit și nod de lucru.

Pentru a asigura distribuirea eficientă a sarcinilor, aveți nevoie de un nod manager. În mod ideal, o inițializare în modul Docker Swarm începe cu nodul manager, iar nodurile ulterioare devin lucrători.

În calitate de operator, trebuie doar să interacționați cu nodul manager, care transmite instrucțiuni lucrătorilor. Invariabil, nodurile de lucru primesc alocarea sarcinilor de la nodul manager și le execută în consecință.

instagram viewer

Cu toate acestea, nodul manager poate participa și la execuția sarcinii (în calitate de lucrător) sau poate face față managementului direct. Puteți împiedica programarea sarcinilor pe manager schimbând starea acestuia de la activ la scurgere. Dar decizia ta de a atribui această funcție duală poate depinde de mai mulți factori. În esență, doriți să vă asigurați că are suficiente resurse pentru a gestiona mai multe roluri înainte de a face acest lucru.

Nodurile eșuează. Deci, nodul manager monitorizează în mod activ starea fiecărui nod de lucru și activează un mecanism tolerant la eșec pentru a reprograma sarcina de la un nod eșuat la altul.

Dar ce se întâmplă dacă și nodul manager se blochează? Interesant este că roiul continuă să alerge. Singura capcană este că nu veți mai putea comunica cu nodul manager pentru a controla clusterul.

Abordarea comună de siguranță pentru a preveni acest lucru este de a atribui rolul de manager mai multor noduri (Docker recomandă maximum șapte per cluster). Puteți selecta apoi nodul de manager principal dintre ele. Când managerul principal se prăbușește, unul dintre managerii de așteptare preia rolul.

Cu toate acestea, nu trebuie să vă faceți griji cu privire la schimbarea rolurilor între noduri sau întreținerea stării într-un cluster. Algoritmul de consens de plută (o metodă tolerantă la erori) încorporat în Docker SwarmKit se ocupă de acest lucru.

De ce să folosiți Docker Swarm?

Docker Swarm este util pentru implementarea de aplicații complexe cu perspective de scalabilitate ridicate. Unul dintre cazurile sale principale de utilizare este descentralizarea microserviciilor. Fiecare microserviciu partajează apoi un container similar cu cei de pe alte noduri de lucru.

Un alt motiv pentru a utiliza Docker Swarm este că mai multe gazde execută sarcini simultan într-un cluster. Acest lucru este în contrast cu Docker Compose, care vă permite doar să rulați mai multe containere pe un singur motor Docker.

Acest atribut scalabil al Docker Swarm permite aplicațiilor să fie disponibile în mod constant cu latență zero. Este chiar unul dintre motivele pentru care vrei alegeți Docker față de alte instrumente de virtualizare.

Și ce mai e? Spre deosebire de containerele Docker unice, unde un container se oprește atunci când eșuează, Docker Swarm redistribuie automat sarcinile între nodurile de lucru disponibile ori de câte ori unul eșuează.

Docker Swarm păstrează, de asemenea, o copie de rezervă a fiecărei stări. Așadar, puteți reveni oricând la noile configurații de roi la starea uneia anterioare. Să spunem că nodul manager dintr-un roi anterior eșuează; puteți porni un nou cluster cu mai multe noduri de manager și îl puteți reveni pentru a adapta configurația celui precedent.

De asemenea, este important de menționat că interacțiunea dintre nodul manager și nodurile lucrător este sigură.

Docker are multe alternative, iar unul dintre cele mai apropiate este Kubernetes. Cu toate acestea, Docker Swarm este ușor de utilizat și mai automatizat. De exemplu, deși poate fi necesar să echilibrați sarcina manual în alte instrumente de orchestrare, cum ar fi Kubernetes, Docker Swarm oferă echilibrare automată a sarcinii, ceea ce face viața mai ușoară pentru DevOps.

Arhitectura Docker Swarm

Arhitectura Docker Swarm se învârte în jurul serviciilor, nodurilor și sarcinilor. Cu toate acestea, fiecare are un rol de jucat în rularea cu succes a stivei.

Servicii

Serviciul Docker Swarm detaliază configurația imaginii Docker care rulează toate containerele dintr-un roi. Include informații despre sarcinile dintr-un cluster. De exemplu, un serviciu ar putea descrie un Configurare server SQL dockerizat.

Când rulați un serviciu, acesta obligă nodul manager să se sincronizeze cu configurațiile sale. Nodul manager rulează apoi restul nodurilor de lucru pe baza setărilor specificate în serviciu.

Serviciile din Docker Swarm pot fi globale sau replicate.

Diferența dintre ele este că, în timp ce serviciile globale definesc o singură sarcină pentru toate nodurile dintr-un cluster, serviciile replicate specifică numărul de sarcini per nod.

Noduri

Un nod în Docker Swarm este o instanță a întregului timp de rulare Docker, cunoscut și sub numele de motor Docker. Nodurile roi pot fi mașini fizice sau virtuale. Gândiți-vă la aceasta ca la o rețea de computere care rulează procese similare (containere).

De obicei, totuși, nodurile se întind pe mai multe computere și servere care rulează motorul Docker în aplicații din viața reală. Și, după cum am menționat mai devreme, un nod poate fi fie un nod manager, fie un nod lucrător, în funcție de rol.

Nodul manager ascultă bătăile inimii roiului și controlează nodurile lucrătoare, care execută sarcinile atribuite lor de nodul manager. După cum sa menționat mai devreme, puteți avea mai mult de un nod manager într-un roi. Dar, în mod ideal, încercați să limitați numărul la sub șapte, deoarece adăugarea prea multor noduri de manager ar putea reduce performanța roiului.

Sarcini

O sarcină definește munca atribuită fiecărui nod dintr-un Docker Swarm. În fundal, programarea sarcinilor în Docker Swarm începe atunci când un orchestrator creează sarcini și le transmite unui planificator, care instanțează un container pentru fiecare sarcină.

Nodul manager utilizează apoi planificatorul pentru a atribui și reatribui sarcini nodurilor așa cum este necesar și specificat în serviciul Docker.

Docker Swarm vs. Docker Compose: Care sunt diferențele?

Oamenii folosesc adesea Docker Compose și Docker Swarm în mod interschimbabil. Deși ambele implică rularea mai multor containere, sunt diferite.

În timp ce Docker Compose vă permite să rulați mai multe containere pe o singură gazdă, Docker Swarm le distribuie pe mai multe motoare Docker într-un cluster.

Utilizați Docker Compose atunci când trebuie să rotiți containere separate pentru fiecare serviciu din aplicația dvs. Astfel, atunci când o componentă se blochează, nu interferează cu celelalte. Cu toate acestea, atunci când mașina gazdă eșuează, întreaga aplicație se blochează.

Docker Swarm, totuși, vă ajută să rulați multe containere pe noduri grupate. Deci, fiecare componentă a aplicației dvs. se află pe mai multe noduri. Și când un nod care gestionează o componentă a aplicației se blochează, roiul își alocă sarcina unui alt nod din cluster și reprogramează sarcinile de rulare, prevenind timpul de nefuncționare.

Prin urmare, deși este posibil să aveți timpi de nefuncționare pe Docker Compose, Docker Swarm se asigură că aplicația dvs. continuă să ruleze cu ajutorul serverelor de rezervă (noduri de lucru). Cu toate acestea, Docker 1.13 acceptă implementarea Docker Compose în modul Swarm folosind implementarea stivei docker comanda.

Docker Swarm vă ajută să implementați aplicații complexe

Containerizarea a depășit mașinile virtuale în proiectarea software-ului de integrare continuă și livrare continuă (CI/CD). Prin urmare, înțelegerea esențială a mecanismului Docker Swarm este o abilitate în plus dacă doriți să deveniți un expert DevOps neprețuit.

Probabil știți cum să învârtiți un container Docker sau chiar să rulați un Docker Compose pentru mai multe containere într-o singură gazdă. Dar Docker Swarm este mai util pentru implementarea aplicațiilor cu arhitectură complexă. Împarte procesele în unități, îmbunătățește accesul la timpul de execuție și reduce sau chiar elimină șansele de nefuncționare.