Che cos'è la modalità Docker Swarm e quando dovresti usarla?

0
340

La modalità Swarm è il sistema di orchestrazione integrato di Docker per il ridimensionamento contenitori in un cluster di macchine fisiche. Più client indipendenti che eseguono Docker Engine uniscono le proprie risorse, formando uno sciame.

La funzionalità viene fornita in bundle con Docker e include tutto il necessario per distribuire app tra i nodi. La modalità Swarm ha un modello di ridimensionamento dichiarativo in cui si indica il numero di repliche necessarie. Il gestore dello sciame interviene per far corrispondere il numero effettivo di repliche alla tua richiesta, creando e distruggendo i contenitori secondo necessità.

Anche gli sciami hanno molte più funzionalità. I cluster beneficiano di funzioni di rilevamento dei servizi integrate, supporto per aggiornamenti in sequenza e routing del traffico di rete tramite bilanciatori del carico esterni.

Ecco come puoi utilizzare la modalità Swarm per configurare semplici carichi di lavoro distribuiti su un parco macchine. Dovresti usare Swarm se desideri ospitare applicazioni scalabili con ridondanza utilizzando un'installazione Docker standard, senza altre dipendenze richieste.

Creare il tuo Swarm

Assicurati di aver installato Docker prima di continuare. Avrai bisogno del pacchetto Docker CE completo su ogni macchina che desideri aggiungere allo swarm.

Annuncio

Designa uno dei tuoi host come gestore dello swarm. Questo nodo orchestra il cluster inviando richieste di pianificazione del contenitore agli altri nodi. Esegui docker swarm init sul gestore per avviare il processo di configurazione del cluster:

docker swarm init –advertise-addr 192.168.0.1

Sostituisci l'indirizzo IP con l'IP reale del tuo nodo manager. Il comando emetterà un comando docker swarm join che dovresti eseguire sui tuoi nodi secondari. Quindi si uniranno allo sciame e diventeranno idonei a ospitare container.

Dopo aver aggiunto i nodi, eseguire le informazioni sulla finestra mobile sul gestore per controllare lo stato del cluster. La sezione Swarm dell'output del comando dovrebbe essere elencata come “attivo.” Controlla i “Nodi” count corrisponde al numero di nodi che hai aggiunto.

< p>Puoi ottenere maggiori dettagli su un nodo eseguendo docker node ls. Questo mostra l'ID univoco di ogni nodo, il suo nome host e il suo stato corrente. Nodi che mostrano una disponibilità di “attivo” con uno stato di “pronto” sono sani e pronti a supportare i tuoi carichi di lavoro. La colonna Stato gestore indica i nodi che agiscono anche come gestori sciame. Il “leader” è il nodo con la responsabilità generale del cluster.

Distribuzione di un contenitore

Una volta che i tuoi nodi sono pronti, puoi distribuire un contenitore nel tuo sciame. La modalità Swarm utilizza il concetto di “servizi” per descrivere le distribuzioni di contenitori. Ogni configurazione del servizio fa riferimento a un'immagine Docker e a un conteggio delle repliche da creare da tale immagine.

servizio docker create –replicas 3 –name apache httpd:latest

Questo comando crea un servizio utilizzando l'immagine httpd:latest per il server web Apache. Verranno create tre repliche indipendenti, offrendoti resilienza contro le terminazioni dei container e le interruzioni dei nodi. Le repliche del contenitore sono chiamate “task” nel gergo di Docker Swarm.

Pubblicità

Docker manterrà continuamente lo stato richiesto. Se uno dei nodi si disconnette, le repliche che ospitava verranno riprogrammate sugli altri. Avrai tre contenitori Apache in esecuzione per tutta la durata del servizio.

Scaling Services

Puoi ridimensionare i servizi in qualsiasi momento utilizzando la finestra mobile comando service scale:

docker service scale apache=5

Docker aggiungerà due nuove istanze di container in modo che il numero di repliche continui a corrispondere al conteggio richiesto. Le istanze extra verranno pianificate su nodi con capacità libera sufficiente per supportarle.

I servizi possono essere scalati anche con l'aggiornamento del servizio docker:

aggiornamento del servizio docker apache –replicas=5

Quando se utilizzi questa variante, puoi eseguire il rollback della modifica utilizzando un comando dedicato:

rollback del servizio docker apache

Il servizio verrà ripristinato a tre repliche. Docker eliminerà due istanze di container, consentendo al conteggio delle repliche live di corrispondere nuovamente allo stato precedente.

Aggiornamenti in sequenza

La modalità Swarm supporta gli aggiornamenti in sequenza in cui le istanze del contenitore vengono ridimensionate in modo incrementale. È possibile specificare un ritardo tra la distribuzione del servizio rivisto a ciascun nodo nello sciame. Questo ti dà il tempo di agire sulle regressioni se vengono rilevati problemi. Puoi eseguire rapidamente il rollback poiché non tutti i nodi avranno ricevuto il nuovo servizio.

Annuncio

Aggiungi il flag –update-delay a un comando di scala del servizio docker per attivare gli aggiornamenti in sequenza. Il ritardo è specificato come una combinazione di ore h, minuti me secondi s. Il gestore dello sciame aggiornerà singolarmente ogni istanza di container. Puoi regolare il numero di attività aggiornate in una singola operazione con il flag –update-parallelism.

Ecco come ridimensionare un servizio a 10 repliche, aggiornando tre container alla volta con un cinque minuti di ritardo tra ogni batch:

scala del servizio docker –name apache –replicas=10 –update-delay 5m –update-parallelism 3

gestione dei servizi

Molti comandi familiari di Docker funzionano anche con i servizi. Anteponi i normali comandi di gestione del contenitore al servizio docker per elencare i servizi, visualizzare i relativi registri ed eliminarli.

  • ispezione del servizio docker – Ispeziona i dati tecnici di un servizio denominato.
  • registri del servizio docker – Visualizza l'output del log associato a un servizio denominato.
  • docker service ls – Elenca tutti i servizi in esecuzione.
  • servizio docker ps– Mostra le singole istanze del contenitore incapsulate da un servizio specifico.
  • servizio docker rm – Rimuovere un servizio con tutte le sue repliche. Non c'è richiesta di conferma.

Oltre alle operazioni di gestione di base descritte finora, i servizi sono dotati di un ricco set di opzioni di configurazione. Questi possono essere applicati durante la creazione di un servizio o in seguito con il comando docker service update.

Le opzioni del servizio includono variabili di ambiente, comandi di controllo dello stato, impostazioni DNS, etichette e condizioni di riavvio. Le istanze di container in esecuzione di solito non vengono distrutte durante l'aggiornamento del servizio docker a meno che tu non stia modificando le impostazioni che richiedono una ricreazione per avere effetto.

Esposizione delle porte di rete

Le porte di rete del contenitore sono esposte con il flag –publish per la creazione del servizio docker e l'aggiornamento del servizio docker. Ciò ti consente di specificare una porta del contenitore di destinazione e la porta pubblica come esporla.

docker service create –name apache –replicas 5 –publishpublish=8080,target=80 nginx:latest Advertisement

Ora puoi connetterti alla porta 8080 su uno qualsiasi dei tuoi nodi di lavoro per accedere a un'istanza del servizio NGINX. Funziona anche se il nodo a cui ti connetti non ospita effettivamente una delle attività del servizio. Interagisci semplicemente con lo sciame e si occupa del routing di rete. Questo approccio è chiamato “mesh di routing.”

Un'opzione alternativa consente di pubblicare le porte del contenitore sui singoli nodi in cui sono in esecuzione le attività. Aggiungi mode=host al flag –published per abilitarlo. Il servizio sarà esposto solo sui nodi che lo ospitano. Ciò è utile nei casi in cui si desidera connettersi a un'istanza specifica del servizio. La mesh di routing randomizza l'istanza a cui ti connetti, indipendentemente dal nodo che usi per connetterti.

Docker Swarm supporta anche le reti overlay. Sono simili alle normali reti Docker. L'unione di un servizio a una rete consente ai suoi contenitori di comunicare con qualsiasi altro servizio sulla rete.

docker service create –name service1 –network demo-network my-image:ultimo servizio docker create –name service2 –network demo-network my-image:latest

I task creati da service1 e service2 potranno raggiungersi tramite la rete overlay. Una rete predefinita chiamata ingress fornisce la funzionalità mesh di routing standard descritta sopra.

Conclusione

La modalità Swarm è un orchestratore di container integrato direttamente in Docker. Poiché è incluso per impostazione predefinita, puoi usarlo su qualsiasi host con Docker Engine installato.

La creazione di uno sciame ti consente di replicare i container su una flotta di macchine fisiche. Swarm ti consente anche di aggiungere più nodi di gestione per migliorare la tolleranza agli errori. Se il leader attivo abbandona il cluster, un altro manager può subentrare per mantenere le operazioni.

Pubblicità

La modalità Docker Swarm si confronta favorevolmente con piattaforme di orchestrazione alternative come Kubernetes. È più facile iniziare perché è integrato con Docker e ci sono meno concetti da imparare. È spesso più semplice da installare e mantenere su hardware autogestito, sebbene le soluzioni Kubernetes preconfezionate come MicroK8 abbiano eroso il fattore di convenienza di Swarm. Anche così, la modalità Swarm rimane un valido orchestratore per i carichi di lavoro self-hosted, in particolare se stai cercando una soluzione basata su CLI orientata agli sviluppatori che sia meno impegnativa per i team operativi.