Docker Swarm per ottenere un'elevata disponibilità



Questo blog su Docker Swarm, spiega la potenza della configurazione di un cluster di motori Docker tramite Docker Swarm configurato per raggiungere l'alta disponibilità.

Qual è la caratteristica più importante di qualsiasi applicazione basata sul web? Ce ne sono tanti, ma per me alta disponibilità è il più importante. Questo è ciò che Docker Swarm ci aiuta a ottenere! Aiuta nell'applicazione essendo altamente disponibile.

Nel mio blog precedente , Ho spiegato come funziona Docker Compose. Questo blog su Docker Swarm è una continuazione del primo e qui sono stati spiegati i vantaggi dell'utilizzo di Docker Swarm per containerizzare qualsiasi applicazione multi-container.





Nel caso di questo blog, è solo un'applicazione angolare che sarà gestita da Docker Swarm.
Nota : Il metodo per containerizzare l'app MEAN Stack è lo stesso.

Allora, cos'è Docker Swarm?

Docker Swarm è una tecnica per creare e mantenere un cluster di Motori Docker . I motori Docker possono essere ospitati su nodi diversi e questi nodi che si trovano in posizioni remote formano un file Grappolo quando connesso in modalità Swarm.



Perché utilizzare Docker Swarm?

Per ragioni già menzionate! Realizzare alta disponibilità senza tempi di inattività è una priorità per ogni fornitore di servizi là fuori. L'alta disponibilità impressionerà i tuoi clienti? Bene, non rimarranno impressionati se affrontano tempi di inattività. Questo è un gioco da ragazzi.

Altri vantaggi di Docker Swarm

Come molti altri servizi, Docker Swarm funziona automaticamente bilancio del carico per noi. Pertanto, non è necessario che gli ingegneri DevOps instradino le richieste di elaborazione ad altri nodi quando uno non riesce. Il gestore del cluster eseguirà automaticamente il bilanciamento del carico per noi.

Accesso decentralizzato è un altro vantaggio. Cosa significa? Significa che è possibile accedere facilmente a tutti i nodi dal gestore. Il gestore richiederà inoltre i nodi su base regolare e terrà traccia della sua salute / stato per far fronte ai tempi di inattività. Tuttavia, i nodi non possono accedere o tenere traccia dei servizi in esecuzione in altri nodi / gestori.



Puoi controllare il no. di container in esecuzione in un nodo, scale-up il no. di contenitori o rimpicciolire il no. in base alle nostre esigenze, semplicemente eseguendo un singolo comando.

Anche dopo che un'applicazione è stata distribuita, possiamo emettere aggiornamenti in sequenza e assicurati che CI (Continuous Integration) sia raggiunto. Gli aggiornamenti in sequenza vengono emessi su un nodo dopo l'altro, assicurandosi così che non ci siano tempi di inattività e che il carico sia distribuito tra gli altri nodi del cluster.

Quindi che succede adesso? Per fare l'ovvio. Inizia con Docker Swarm se hai già lavorato su Docker o se la tua organizzazione desidera containerizzare un servizio Web affidabile.

Nota : I motori Docker vengono installati su host / server indipendenti o in più VM in un host.

Guida introduttiva alla modalità Swarm

Docker Swarm viene avviato dal manager, o lasciatemi mettere in questo modo, l'istanza che avvia il cluster Swarm diventa il manager. Il comando per avviare il cluster è:

$ docker swarm init --advertise-addr indirizzo ip

Qui, il flag '–advertise-addr' viene utilizzato per pubblicizzare se stesso ad altri nodi che desiderano unirsi al cluster. L'indirizzo IP del gestore deve essere specificato insieme al flag. Di seguito è riportato lo screenshot di esempio.

comando docker init - docker swarm - edureka

Quando il cluster Swarm viene avviato, viene generato un token alla fine del gestore. Questo token deve essere utilizzato da altri nodi per unirsi al cluster swarm.

Com'è esattamente? Copia l'intero token generato nel motore docker del gestore, incollalo nel motore docker del nodo ed eseguilo. La parte evidenziata dello screenshot sopra è un token. Quando il token viene eseguito su un nodo di lavoro, apparirà come lo screenshot qui sotto.

Qualsiasi nodo che si unisce al cluster può essere successivamente promosso a gestore. Nel caso in cui desideri che un motore Docker si unisca come gestore, esegui il comando seguente alla fine del gestore:

$ docker swarm gestore token di join

E in un secondo momento, se desideri che il token per un nodo si unisca al cluster, esegui il comando seguente:

$ docker swarm nodo token di join

Vai avanti ed esegui il token su ogni nodo che desideri, per unirti al cluster. Al termine, è possibile eseguire un comando docker node list per verificare quanti nodi si sono uniti al cluster insieme al loro stato. Il comando è:

crea istanza ec2 da snapshot
$ docker node ls

Lo screenshot è di seguito:

Creazione di un'immagine Docker per l'app Angular

Se tutto va bene, possiamo avviare il nostro servizio Swarm, a condizione che l'immagine Docker sia stata creata. L'immagine Docker può essere creata dal Dockerfile. Il Dockerfile utilizzato per creare le applicazioni è di seguito:

DAL nodo: 6 ESEGUI mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app ESEGUI npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Il Dockerfile viene utilizzato per eseguire insieme un set di comandi per la creazione di un'immagine Docker personalizzata da un'immagine di base. Come puoi vedere, l'immagine di base che ho usato è 'Nodo: 6'. NodeJS è l'immagine I da Docker Hub che è contrassegnata con la versione 6.

Sto quindi creando una nuova directory Docker all'interno del container e rendendola la directory di lavoro all'interno del mio container.

Sto copiando il file 'package.json' dalla mia macchina locale alla directory di lavoro del contenitore. Quindi sto specificando i comandi 'RUN npm cache clean' e 'RUN npm install'. npm install il comando scarica la versione delle dipendenze menzionate nel file package.json.

Sto quindi copiando tutti i codici del progetto dalla macchina locale al container, esponendo il numero di porta 4200 per accedere all'applicazione Angular sul browser e, infine, sto specificando il comando npm start che containerizza l'applicazione.

Ora, per creare l'immagine Docker basata su questo Dockerfile, esegui il comando seguente:

$ docker build -t angular-image.

Nota: Le immagini Docker devono essere create in tutti i nodi del cluster. Senza di esso, i contenitori non possono essere utilizzati in altri motori Docker.

Avvio del servizio Docker Swarm

Dato che la nostra immagine Docker è stata creata, possiamo estrarre un contenitore da questa immagine. Ma faremo qualcosa di meglio: creare un servizio Docker Swarm da esso. Il comando per creare un servizio swarm è:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 angular-image

Qui, il flag 'name' viene utilizzato per dare un nome al mio servizio e il flag 'p' viene utilizzato per esporre la porta del contenitore alla porta host. Nel file package.json, ho specificato la porta del contenitore su cui dovrebbe essere ospitata l'app Angular. E il 4200 in questo comando aiuta a mappare la porta 4200 del container alla porta 4200 dell'host. 'Angular-image' è il nome dell'immagine che ho costruito in precedenza.

Ricorda : Quando creiamo un servizio, può essere ospitato su qualsiasi motore docker nel cluster. Il gestore dello sciame deciderà dove sarà ospitato. Tuttavia, indipendentemente dal nodo in cui è ospitata, è possibile accedere all'applicazione su localhost: 4200 da uno qualsiasi dei nodi collegati nel cluster.

Come è possibile? Perché Swarm espone internamente i numeri di porta affinché siano accessibili da ogni altro nodo nel cluster. Ciò significa che la porta n. 4200 su qualsiasi nodo / gestore nel cluster eseguirà il rendering dell'applicazione Angular.

E adesso cosa? Il contenitore è attivo?

È possibile verificare se il servizio è containerizzato eseguendo il comando docker service list. Tuttavia, potrebbe essere necessario un minuto per la distribuzione del contenitore. Di seguito è il comando:

$ docker service ls

Questo comando elencherà tutti i servizi gestiti dal cluster Swarm. Nel nostro caso, dovrebbe visualizzare un contenitore attivo. Guarda lo screenshot qui sotto per riferimento.

Qui, 'REPLICAS = 1/1' indica che esiste un unico 'servizio' di quel contenitore, nel cluster. E 'MODE = replicated' indica che il servizio è replicato su tutti i nodi del cluster.

Ora, per identificare su quale nodo / gestore è ospitata l'app, possiamo eseguire il comando docker service ps command seguito dal nome del contenitore. Il comando è:

$ docker service ps Angular-App-Container

Lo screenshot per lo stesso è sotto.

Questo menziona i dettagli sul nodo su cui è ospitata l'applicazione insieme al comando utilizzato per avviare il servizio.

Il comando 'docker ps' mette in luce i dettagli sul contenitore attivo. Il comando è:

$ docker ps

Guarda lo screenshot qui sotto per riferimento.

Tuttavia, questo comando funzionerà solo sul gestore cluster e sul nodo in cui è effettivamente ospitato il servizio.

Per verificare quanti nodi sono in esecuzione, eseguire il comando node list. Il comando è:

$ docker node ls

Per controllare i contenitori in esecuzione in un determinato host, eseguire il comando node ps. Il comando è:

$ docker node ps

Se ricordi, ho menzionato in precedenza che il servizio è attualmente in esecuzione in MODALITÀ replicata. Ciò significa che il servizio viene replicato su tutti i nodi nei cluster. Credi che ci sia un'alternativa?

Assolutamente! C'è qualcosa chiamato Global MODE. In questa modalità, c'è un servizio di questo contenitore in esecuzione su ogni singolo / manager nel cluster. Ricordarsi di interrompere il servizio / contenitore corrente prima di avviare un altro set di contenitori.

Il comando per questo è:

$ docker service rm Angular-App-Container

Il comando per far girare il contenitore in modalità globale è:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode global angular-image

Ciò creerebbe 3 servizi sui 3 nodi nel nostro cluster. Puoi verificarlo eseguendo il comando docker service list. Lo screenshot di questo è sotto.

Quando viene eseguito il comando ps del servizio docker, vedrai qualcosa del genere:

Come puoi vedere, dice che la modalità è replicata e le repliche di questo contenitore sono 3. Ora arriva la parte migliore di questo blog.

Per avere 2 repliche dei servizi in esecuzione tra i tre contenitori, possiamo utilizzare il flag delle repliche. Guarda il comando qui sotto:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image

Noterai che questi 2 servizi sono bilanciati dal carico tra i tre nodi del cluster. Eseguire il comando del processo di servizio docker per verificare in quali nodi sono attivi i contenitori. Guarda lo screenshot qui sotto per riferimento. I contenitori sono attivi in ​​un nodo del gestore e in un nodo di lavoro.

Dal nodo di lavoro, puoi verificare che il contenitore sia in esecuzione eseguendo il comando 'docker ps'.

Docker Swarm per un'elevata disponibilità

Ora, per verificare effettivamente che vi sia un'elevata disponibilità nel nostro cluster, dobbiamo sperimentare uno scenario in cui uno dei nodi si arresta e altri nodi nel cluster lo compensano. Possiamo realizzare questo scenario arrestando manualmente il contenitore da uno dei nodi utilizzando questo comando:

$ docker stop Angular-App-Container

Eseguire il comando precedente sul nodo: Worker-1 in cui è in esecuzione il contenitore.Dal manager, esegui il comando:

$ docker service ps Angular-App-Container

Noterai ora che il contenitore è ora in esecuzione nel nodo: Worker-2 e Manager. Tuttavia, è stato arrestato dal nodo: Worker-1. Lo stesso è visibile dallo screenshot qui sotto.

Questo è come Docker High Availability è raggiunto. ioNonostante il contenitore sia inattivo in Worker-1, l'applicazione può essere renderizzata alla porta numero 4200 su quel nodo di lavoro. Questo perché è connesso internamente ad altri nodi del cluster ed è in grado di eseguire il rendering dell'applicazione nel browser.

Alta disponibilità dopo il potenziamento dei servizi

Sia in modalità replicata che in modalità globale, possiamo aumentare il numero di servizi in esecuzione nel nostro cluster. E anche dopo l'ampliamento, saremo in grado di mantenere un'elevata disponibilità. Fantastico non è vero?

cos'è il formato in python

Ma tornando al nostro punto, vediamo quanto è facile aumentare il numero di servizi nel nostro cluster. Supponendo di avere 2 o 3 repliche nel nostro cluster, aumentiamo i servizi a 5 eseguendo semplicemente un singolo comando. Il comando è:

$ docker service scale Angular-App-Container = 5

Lo screenshot di questo è sotto.

Eseguendo il comando docker service list, puoi notare che il numero di repliche ora è 5. Ed eseguendo il comando docker service ps insieme al nome del servizio, puoi vedere come i 5 servizi sono bilanciati e distribuiti sui 3 nodi . I comandi sono:

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

E infine, in una configurazione Docker Swarm, se non si desidera che il proprio manager partecipi ai procedimenti e lo tenga occupato solo per la gestione dei processi, possiamo svuotare il manager dall'hosting di qualsiasi applicazione. Perché è così che funziona nel mondo, non è vero? I manager servono solo per la gestione di altri lavoratori. Ad ogni modo, il comando per farlo è:

$ aggiornamento nodo docker --availability drain Manager-1

È possibile verificare se il gestore sta ora prendendo parte al cluster eseguendo il comando docker node list e il comando docker service ps:

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

È ora possibile notare che i servizi contenitore sono stati divisi tra i nodi di lavoro e il nodo Gestore è stato effettivamente svuotato dalla containerizzazione di qualsiasi servizio. Lo screenshot è sotto.

Quindi, questo pone fine a questo blog su Docker Swarm. Spero che questo blog spieghi quanto sia importante implementare la modalità Swarm per ottenere un'elevata disponibilità. Restate sintonizzati per altri blog in questa serie di tutorial su Docker.

In alternativa puoi guardare il video qui sotto per capire come funziona Docker Swarm. Tutti i concetti spiegati sopra sono stati trattati nel video.

Docker Swarm per un'elevata disponibilità | Tutorial Docker | Tutorial DevOps

Ora che hai imparato a conoscere Docker, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Questo corso di formazione per la certificazione Docker Edureka aiuta gli studenti ad acquisire esperienza nell'implementazione di Docker e nella sua padronanza.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.