Docker Swarm Para sa Pagkamit ng Mataas na kakayahang magamit



Ang blog na ito sa Docker Swarm, ay nagpapaliwanag ng lakas ng pag-set up ng isang kumpol ng mga Docker engine sa pamamagitan ng naka-configure na Docker Swarm para sa pagkamit para sa Mataas na Pagiging Magagamit.

Ano ang pinakamahalagang tampok ng anumang application na nakabatay sa web? Maraming, ngunit para sa akin mataas na kakayahang magamit ang pinakamahalaga. Iyon ang tutulong sa atin ng Docker Swarm na makamit! Nakatutulong ito sa application na magiging lubos na magagamit.

Sa aking nakaraang blog , Ipinaliwanag ko kung paano gumagana ang Docker Compose. Ang blog na ito sa Docker Swarm ay isang pagpapatuloy sa una at narito ang mga benepisyo ng paggamit ng Docker Swarm para sa paglalagay ng container sa anumang application na multi-container ay ipinaliwanag.





Sa kaso ng blog na ito, ito ay isang application na Angular lamang na magiging Docker Swarm'ed.
Tandaan : Ang pamamaraan upang i-containerize ang MEAN Stack app ay pareho.

Kaya, Ano ang Docker Swarm?

Docker Swarm ay isang pamamaraan upang lumikha at mapanatili ang isang kumpol ng Mga Engine ng Docker . Ang Docker engine ay maaaring ma-host sa iba't ibang mga node, at ang mga node na ito na nasa malalayong lokasyon ay bumubuo ng a Kumpol kapag nakakonekta sa mode na Swarm.



Bakit Gumagamit ng Docker Swarm?

Para sa mga kadahilanang nabanggit na! Nakakamit mataas na kakayahang magamit nang walang anumang downtime ay isang priyoridad para sa bawat service provider doon. Mapabilib ba ng mataas na kakayahang magamit ang iyong mga kliyente? Sa gayon, hindi sila mapahanga kung nahaharap sila sa downtime. Iyon ay isang walang utak.

Iba Pang Mga Pakinabang Ng Docker Swarm

Tulad ng maraming iba pang mga serbisyo, ang Docker Swarm ay awtomatiko load-balancing para sa atin. Samakatuwid, hindi na kailangan para sa mga inhinyero ng DevOps na i-ruta ang mga kahilingan sa pagpoproseso sa iba pang mga node kapag nabigo ang isa. Awtomatikong isasagawa ng manager ng cluster ang pagbabalanse ng load para sa amin.

Desentralisadong pag-access ay isa pang pakinabang. Anong ibig sabihin niyan? Nangangahulugan ito na ang lahat ng mga node ay maaaring ma-access nang madali mula sa manager. Susubukan din ng manager ang mga node nang regular, at panatilihin ang isang track ng kalusugan / katayuan nito upang makayanan ang downtime. Gayunpaman, hindi ma-access o subaybayan ng mga node ang mga serbisyong tumatakbo sa iba pang mga node / manager.



Maaari mong suriin ang hindi. ng mga lalagyan na tumatakbo sa isang node, palakihin ang hindi. ng mga lalagyan o scale-down ang hindi. batay sa aming kinakailangan, sa pamamagitan lamang ng pagpapatupad ng isang solong utos.

Kahit na matapos na ma-deploy ang isang application, maaari kaming mag-isyu paglulunsad ng mga update at tiyakin na nakakamit ang CI (Patuloy na Pagsasama). Ang mga pag-update ng pagulong ay ibinibigay sa isang node pagkatapos ng isa pa kung gayon tinitiyak na walang downtime at ang pagkarga ay ipinamamahagi sa pagitan ng iba pang mga node sa kumpol.

Kaya, ano ang susunod? Upang gawin ang halata. Magsimula sa Docker Swarm kung nagtrabaho ka na sa Docker o kung nais ng iyong samahan na maglagay ng container ng isang maaasahang serbisyo sa web.

Tandaan : Ang mga engine ng docker ay naka-install sa mga independiyenteng host / server o sa maraming VM sa isang host.

Pagsisimula Sa Swarm Mode

Ang Docker Swarm ay pinasimulan ng manager, o hayaan mo akong ilagay ito sa ganitong paraan, ang halimbawa na nagsisimula ang Swarm cluster ay naging manager. Ang utos na simulan ang kumpol ay:

$ docker swarm init --advertise-addr ip-address

Dito, ginagamit ang watawat na ‘–advertise-addr’ para sa advertising mismo sa iba pang mga node na nais sumali sa kumpol. Ang IP address ng manager ay kailangang tukuyin kasama ang watawat. Nasa ibaba ang sample na screenshot.

utos ng docker init - docker swarm - edureka

Kapag sinimulan ang kumpol ng Swarm, isang token ang nabuo sa dulo ng manager. Ang token na ito ay kailangang gamitin ng ibang mga node upang sumali sa swarm cluster.

Paano ito eksakto Kopyahin ang buong token na nabuo sa engine ng docker ng manager, i-paste ito sa docker engine ng node at ipatupad ito. Ang naka-highlight na bahagi ng screenshot sa itaas ay isang token. Kapag ang token ay naisakatuparan sa isang node ng manggagawa, magiging hitsura ito sa screenshot sa ibaba.

Ang anumang node na sumali sa kumpol ay maaaring ma-upgrade sa paglaon sa isang manager. Kung sakaling nais mong sumali ang isang engine ng docker bilang isang manager, isagawa ang utos sa ibaba sa pagtatapos ng manager:

$ docker swarm join-token manager

At sa paglaon sa oras, kung nais mo ang token para sa isang node na sumali sa kumpol, patakbuhin ang utos sa ibaba:

$ docker swarm join-token node

Sige, at ipatupad ang token sa bawat node na gusto mo, upang sumali sa kumpol. Kapag tapos na ang lahat, maaari kang magpatakbo ng isang utos ng listahan ng docker node upang suriin kung gaano karaming mga node ang sumali sa kumpol kasama ang kanilang katayuan. Ang utos ay:

$ docker node ls

Ang screenshot ay nasa ibaba:

Lumilikha ng Isang Docker Image Para sa Angular App

Kung ang lahat ay maayos, maaari naming simulan ang aming serbisyo sa Swarm, sa kondisyon na binuo ang Docker Image. Ang imahe ng Docker ay maaaring mabuo mula sa Dockerfile. Ang Dockerfile na ginamit upang bumuo ng mga application ay nasa ibaba:

MULA sa node: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache malinis RUN npm i-install ang COPY. / usr / src / app EXPose 4200 CMD ['npm', 'start']

Ginagamit ang Dockerfile upang magpatupad ng isang hanay ng mga utos na magkasama para sa pagbuo ng isang pasadyang imahe ng Docker mula sa isang pangunahing imahe. Tulad ng nakikita mo, ang pangunahing imaheng ginamit ko ay 'Node: 6'. Ang NodeJS ay ang imaheng nagmula sa Docker Hub na na-tag sa bersyon 6.

ano ang pinakamahusay na java ide

Lumilikha ako pagkatapos ng isang bagong direktoryo ng Docker sa loob ng lalagyan at ginagawa itong gumaganang direktoryo sa loob ng aking lalagyan.

Ako ang kumokopya ng file na ‘package.json’ mula sa aking lokal na makina hanggang sa direktoryo ng nagtatrabaho na lalagyan. Pagkatapos ay tinutukoy ko ang 'RUN npm cache clean' at 'RUN npm install' na mga utos. i-install nai-download ng utos ang bersyon ng mga dependency na nabanggit sa package.json file.

Kinokopya ko ang lahat ng mga code ng proyekto mula sa lokal na makina sa lalagyan, inilalantad ang numero ng port na 4200 para sa pag-access sa Angular application sa browser at sa wakas, tinutukoy ko ang utos ng pagsisimula ng npm na naglalagay sa container ng application.

Ngayon, upang likhain ang imaheng Docker batay sa Dockerfile na ito, patakbuhin ang utos sa ibaba:

$ docker build -t angular-image.

Tandaan: Ang Mga Larawan ng Docker ay kailangang maitayo sa lahat ng mga node sa kumpol. Kung wala ito, ang mga lalagyan ay hindi maaaring maiikot sa ibang mga Docker engine.

pagsisimula sa MySQL workbench

Simula Ang Serbisyo ng Docker Swarm

Dahil na binuo ang aming Docker Image, maaari kaming maiikot ang isang lalagyan sa imaheng ito. Ngunit, gagawa kami ng isang bagay na mas mahusay: lumikha ng isang serbisyo ng Docker Swarm mula rito. Ang utos na lumikha ng isang swarm service ay:

Lumikha ang serbisyo ng $ docker --pangalan ng 'Angular-App-Container' -p 4200: 4200 angular-image

Dito, ginagamit ang watawat na 'pangalan' upang magbigay ng isang pangalan sa aking serbisyo at ang 'p' flag ay ginagamit upang mailantad ang container port sa host port. Sa file ng package.json, tinukoy ko ang container port kung saan dapat i-host ang Angular app. At ang 4200 sa utos na ito ay tumutulong sa mapa ng port ng lalagyan na 4200 sa port ng 4200. Ang 'angular-image' ay ang pangalan ng imaheng naunang binuo ko.

Tandaan : Kapag lumikha kami ng isang serbisyo, maaari itong ma-host sa anumang docker engine sa kumpol. Ang manager ng pangkat ay magpapasya kung saan ito mai-host. Ngunit, hindi alintana kung aling node ito ay nai-host, ang application ay maaaring ma-access sa localhost: 4200 mula sa alinman sa mga node na konektado sa kumpol.

Paano ito posible? Dahil sa Swarm panloob ay inilalantad ang mga numero ng port na ma-access ng bawat iba pang node sa kumpol. Ibig sabihin, port no. Ang 4200 sa anumang node / manager sa cluster ay magbibigay ng Angular application.

Ano ngayon? Aktibo ba ang lalagyan?

Maaari mong i-verify kung ang serbisyo ay lalagyan sa pamamagitan ng pagpapatakbo ng utos ng listahan ng serbisyo ng docker. Ngunit, maaaring tumagal ng isang minuto bago ma-deploy ang lalagyan. Nasa ibaba ang utos:

$ docker service ls

Ililista ng utos na ito ang lahat ng mga serbisyong pinamamahalaan ng kumpol ng Swarm. Sa aming kaso, dapat itong magpakita ng isang aktibong lalagyan. Tingnan ang screenshot sa ibaba para sa sanggunian.

Dito, ipinapahiwatig ng 'REPLICAS = 1/1' na mayroong isang solong 'serbisyo' ng lalagyan na iyon, sa kumpol. At ang 'MODE = replicated' ay nagpapahiwatig na ang serbisyo ay kinopya sa lahat ng mga node sa kumpol.

Ngayon, upang makilala kung saan ang node / manager, naka-host ang app, maaari naming patakbuhin ang command docker service ps command na sinusundan ng pangalan ng lalagyan. Ang utos ay:

$ docker service ps Angular-App-Container

Ang screenshot para sa pareho ay nasa ibaba.

Nabanggit nito ang mga detalye tungkol sa node kung saan naka-host ang application kasama ang utos na ginamit upang simulan ang serbisyo.

Ang utos na 'docker ps' ay nagbibigay ng ilaw sa mga detalye tungkol sa aktibong lalagyan. Ang utos ay:

$ docker ps

Tingnan ang screenshot sa ibaba para sa sanggunian.

Ngunit, gagana lamang ang utos na ito sa tagapamahala ng cluster at ang node kung saan talagang naka-host ang serbisyo.

Upang suriin kung gaano karaming mga node ang tumatakbo, patakbuhin ang utos ng listahan ng node. Ang utos ay:

$ docker node ls

Upang suriin ang mga lalagyan na tumatakbo sa isang partikular na host, patakbuhin ang utos ng node ps. Ang utos ay:

$ docker node ps

Kung naalala mo, nauna kong nabanggit na ang serbisyo ay kasalukuyang tumatakbo sa replicated MODE. Nangangahulugan ito na ang serbisyo ay kinopya sa lahat ng mga node sa mga kumpol. Sa palagay mo ba mayroong isang kahalili?

Talagang! Mayroong isang bagay na tinawag bilang Global MODE. Sa mode na ito, mayroong isang serbisyo ng lalagyan na ito na tumatakbo sa bawat solong / manager sa kumpol. Tandaan na ihinto ang kasalukuyang serbisyo / lalagyan bago paikutin ang isa pang hanay ng mga lalagyan.

Ang utos para doon ay:

$ docker service rm Angular-App-Container

Ang utos na paikutin ang lalagyan sa Global mode ay:

Lumikha ang serbisyo ng $ docker --pangalan ng 'Angular-App-Container' -p 4200: 4200 --mode ng pandaigdigang imahe ng angular

Lilikha ito ng 3 mga serbisyo sa 3 mga node sa aming kumpol. Maaari mo itong i-verify sa pamamagitan ng pagpapatakbo ng utos ng listahan ng serbisyo ng docker. Ang screenshot ng ito ay nasa ibaba.

Kapag naisagawa ang utos ng docker service ps, makakakita ka ng tulad nito:

pagkakaiba sa pagitan ng pagpasa ng halaga at pagpasa ng sanggunian sa java

Tulad ng nakikita mo, sinasabi nito na ang mode ay kinopya at ang mga replika ng lalagyan na ito ay 3. Ngayon ay dumating ang pinakamagandang bahagi ng blog na ito.

Upang magkaroon ng 2 mga replika ng mga serbisyo na tumatakbo sa pagitan ng tatlong mga lalagyan, maaari naming gamitin ang bandila ng mga replika. Tingnan ang utos sa ibaba:

Lumikha ang serbisyo ng $ docker --pangalan ng 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image

Mapapansin mo na ang 2 mga serbisyong ito ay balanse ng pagkarga sa pagitan ng tatlong mga node sa kumpol. Patakbuhin ang utos ng proseso ng serbisyo ng docker upang i-verify, kung saan node ang mga lalagyan ay aktibo. Tingnan ang screenshot sa ibaba para sa sanggunian. Aktibo ang mga lalagyan sa isang manager node at isang node ng manggagawa.

Mula sa Worker node, maaari mong i-verify na tumatakbo ang lalagyan sa pamamagitan ng pagpapatupad ng utos na 'docker ps'.

Docker Swarm Para sa Mataas na Kakayahang magamit

Ngayon upang tunay na mapatunayan na mayroong mataas na kakayahang magamit sa aming kumpol, kailangan naming maranasan ang isang senaryo kung saan bumababa ang isa sa mga node at ang iba pang mga node sa kumpol ay bumabawi para dito. Maaari naming dalhin ang pangyayaring iyon sa pamamagitan ng manu-manong pagtigil sa lalagyan mula sa isa sa mga node gamit ang utos na ito:

Itigil ng $ docker angular-App-Container

Patakbuhin ang utos sa itaas sa node: Worker-1 kung saan tumatakbo ang lalagyan.Mula sa manager, patakbuhin ang utos:

$ docker service ps Angular-App-Container

Mapapansin mo ngayon na ang lalagyan ay tumatakbo na ngayon sa node: Worker-2 at Manager. Gayunpaman, ito ay na-shutdown mula sa node: Worker-1. Ang pareho ay nakikita mula sa screenshot sa ibaba.

Ganito Mataas na Pagkakaroon ng Docker ay nakamit. Akon sa kabila ng lalagyan na hindi aktibo sa Worker-1, ang application ay maaaring maibigay sa port number 4200 sa node ng manggagawa. Dahil ito sa panloob na koneksyon sa iba pang mga node sa kumpol at nagawang i-render ang application sa browser.

Mataas na Kakayahang Matapos ang Pagtaas ng Mga Serbisyo

Maging sa replicated mode o pandaigdigang mode, maaari nating sukatin ang bilang ng mga serbisyong tumatakbo sa aming kumpol. At kahit na matapos ang pagtaas, mapapanatili namin ang mataas na kakayahang magamit. Galing di ba?

Ngunit sa pagbabalik sa aming puntong, tingnan natin kung gaano kadali na sukatin ang bilang ng mga serbisyo sa aming kumpol. Ipagpalagay na mayroon kaming alinman sa 2 o 3 na mga replika sa aming kumpol, itaas natin ang mga serbisyo sa 5 sa pamamagitan lamang ng pagpapatakbo ng isang solong utos. Ang utos ay:

scale ng serbisyo ng $ docker Angular-App-Container = 5

Ang screenshot ng ito ay nasa ibaba.

Sa pamamagitan ng pagpapatakbo ng utos ng listahan ng serbisyo ng docker, mapapansin mo na ang bilang ng mga replika ay ngayon 5. At sa pamamagitan ng pagpapatakbo ng utos ng docker service ps kasama ang pangalan ng serbisyo, maaari mong makita kung paano ang 5 mga serbisyo ay balanseng pagkarga at ibinahagi sa 3 mga node . Ang mga utos ay:

$ docker service ls $ docker service ps Angular-App-Container

At sa wakas, sa isang pag-set up ng Docker Swarm kung hindi mo nais na lumahok ang iyong manager sa mga paglilitis at panatilihin itong abala para sa pamamahala lamang ng mga proseso, maaari naming maubos ang manager mula sa pagho-host ng anumang aplikasyon. Dahil ganito ito gumagana sa mundo, hindi ba? Ang mga tagapamahala ay para lamang sa pamamahala ng iba pang mga manggagawa. Gayunpaman, ang utos na gawin iyon ay:

Pag-update sa $ docker node --availability drain Manager-1

Maaari mong i-verify kung ang manager ay nakikilahok ngayon sa kumpol sa pamamagitan ng pagpapatakbo ng utos ng listahan ng docker node at utos ng serbisyo ng docker ps:

$ docker node ls $ docker service ps Angular-App-Container

Mapapansin mo ngayon na ang mga serbisyo ng lalagyan ay nahahati sa pagitan ng mga node ng Worker at ang Manager node ay talagang pinatuyo mula sa paglalagay ng container sa anumang serbisyo. Ang screenshot ay nasa ibaba.

Kaya, natatapos na ang blog na ito sa Docker Swarm. Inaasahan kong ipinaliwanag ng blog na ito kung gaano kahalaga na ipatupad ang Swarm mode para makamit ang mataas na kakayahang magamit. Abangan ang higit pang mga blog sa seryeng tutorial ng Docker na ito.

Maaari mong alternatibong mapanood ang video sa ibaba upang maunawaan kung paano gumagana ang Docker Swarm. Ang lahat ng mga konsepto na ipinaliwanag sa itaas ay sakop sa video.

Docker Swarm Para sa Mataas na Pagiging Magagamit | Tutorial ng Docker | Tutorial sa DevOps

Ngayon na natutunan mo ang tungkol sa Docker, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kursong Edureka Docker Certification Training na ito ay tumutulong sa mga nag-aaral na makakuha ng kadalubhasaan sa pagpapatupad ng Docker at mastering ito.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.