Se hai containerizzato il tuo flusso di lavoro di sviluppo, sarai d'accordo sul fatto che Docker è una delle scelte migliori per il controllo della versione. Tuttavia, Docker Swarm è una delle funzionalità di Docker utilizzate per orchestrare app complesse.

Il meccanismo di funzionamento di Docker Swarm può essere difficile da decifrare all'inizio. Ma non preoccuparti, lo analizzeremo in questo articolo. Allora, cos'è Docker Swarm? Perché usarlo? E come funziona?

Cos'è Docker Swarm e come funziona?

Docker Swarm si riferisce a un gruppo di host Docker (computer) collegati in rete come un cluster per fornire attività specifiche. Ogni host Docker in questo cluster è un nodo, chiamato anche nodo di lavoro.

Per garantire una distribuzione efficiente delle attività, è necessario un nodo manager. Idealmente, un'inizializzazione della modalità Docker Swarm inizia con il nodo manager e i nodi successivi diventano lavoratori.

In qualità di operatore, devi solo interagire con il nodo manager, che trasmette le istruzioni ai lavoratori. Invariabilmente, i nodi di lavoro ricevono l'allocazione delle attività dal nodo manager e le eseguono di conseguenza.

instagram viewer

Tuttavia, il nodo manager può anche partecipare all'esecuzione dell'attività (come lavoratore) o affrontare direttamente la gestione. È possibile impedire la pianificazione delle attività sul manager cambiando il suo stato da attivo a drenare. Ma la tua decisione di assegnare questa doppia funzione potrebbe dipendere da diversi fattori. In sostanza, devi essere sicuro che disponga di risorse sufficienti per gestire diversi ruoli prima di farlo.

I nodi falliscono. Pertanto, il nodo manager monitora attivamente lo stato di ciascun nodo di lavoro e attiva un meccanismo fail-tolerant per riprogrammare l'attività da un nodo guasto a un altro.

Ma cosa succede se anche il nodo manager va in crash? È interessante notare che lo sciame continua a correre. L'unico problema è che non sarai più in grado di comunicare con il nodo manager per controllare il cluster.

L'approccio fail-safe comune per evitarlo consiste nell'assegnare il ruolo di manager a molti nodi (Docker ne consiglia un massimo di sette per cluster). È quindi possibile selezionare da loro il nodo gestore principale. Quando il gestore principale si arresta in modo anomalo, uno dei gestori di standby assume il ruolo.

Tuttavia, non devi preoccuparti del cambio di ruolo tra i nodi o della manutenzione dello stato in un cluster. L'algoritmo di consenso zattera (un metodo tollerante agli errori) integrato nel Docker SwarmKit si occupa di questo.

Perché usare Docker Swarm?

Docker Swarm è utile per la distribuzione di app complesse con prospettive di elevata scalabilità. Uno dei suoi casi d'uso principali è decentralizzare i microservizi. Ogni microservizio condivide quindi un contenitore simile con quelli su altri nodi di lavoro.

Un altro motivo per utilizzare Docker Swarm è che più host eseguono attività contemporaneamente in un cluster. Ciò è in contrasto con Docker Compose, che consente solo di eseguire più contenitori su un motore Docker.

Questo attributo scalabile di Docker Swarm consente alle app di essere costantemente disponibili con latenza zero. È anche uno dei motivi per cui lo desideri scegli Docker rispetto ad altri strumenti di virtualizzazione.

E cosa c'è di più? A differenza dei singoli Docker Container, in cui un container si arresta quando si guasta, Docker Swarm ridistribuisce automaticamente le attività tra i nodi di lavoro disponibili ogni volta che uno si guasta.

Docker Swarm mantiene anche un backup di ogni stato. Quindi puoi sempre ripristinare le nuove configurazioni dello sciame allo stato di una precedente. Supponiamo che il nodo manager su uno sciame precedente abbia esito negativo; puoi avviare un nuovo cluster con più nodi manager e ripristinarlo per adattare la configurazione del precedente.

È anche importante ricordare che l'interazione tra il nodo manager e i nodi di lavoro è sicura.

Docker ha molte alternativee uno dei più vicini è Kubernetes. Tuttavia, Docker Swarm è facile da usare e più automatizzato. Ad esempio, mentre potrebbe essere necessario bilanciare il carico manualmente in altri strumenti di orchestrazione come Kubernetes, Docker Swarm offre il bilanciamento del carico automatico, che semplifica la vita a DevOps.

L'architettura dello sciame Docker

L'architettura Docker Swarm ruota attorno a servizi, nodi e attività. Tuttavia, ognuno ha un ruolo da svolgere nell'esecuzione dello stack con successo.

Servizi

Il servizio Docker Swarm descrive in dettaglio la configurazione dell'immagine Docker che esegue tutti i contenitori in uno swarm. Include informazioni sulle attività in un cluster. Ad esempio, un servizio potrebbe descrivere a Configurazione del server SQL ancorato.

Quando esegui un servizio, obbliga il nodo manager a sincronizzarsi con le sue configurazioni. Il nodo manager esegue quindi il resto dei nodi di lavoro in base alle impostazioni specificate nel servizio.

I servizi in Docker Swarm possono essere globali o replicati.

La differenza tra loro è che mentre i servizi globali definiscono solo un'attività per tutti i nodi in un cluster, i servizi replicati specificano il numero di attività per nodo.

Nodi

Un nodo in Docker Swarm è un'istanza dell'intero runtime Docker, noto anche come motore Docker. I nodi Swarm possono essere macchine fisiche o virtuali. Pensa a questo come a una rete di computer che eseguono processi simili (contenitori).

In genere, tuttavia, i nodi si estendono su diversi computer e server che eseguono il motore Docker in applicazioni reali. E come accennato in precedenza, un nodo può essere un manager o un nodo di lavoro, a seconda del ruolo.

Il nodo manager ascolta l'heartbeat dello swarm e controlla i nodi di lavoro, che eseguono le attività loro assegnate dal nodo manager. Come affermato in precedenza, puoi avere più di un nodo manager in uno sciame. Ma idealmente, prova a limitare il numero a meno di sette, poiché l'aggiunta di troppi nodi manager potrebbe ridurre le prestazioni dello swarm.

Compiti

Un'attività definisce il lavoro assegnato a ciascun nodo in uno sciame Docker. In background, la pianificazione delle attività in Docker Swarm viene avviata quando un agente di orchestrazione crea attività e le passa a un'utilità di pianificazione, che crea un'istanza di un contenitore per ciascuna attività.

Il nodo manager utilizza quindi lo scheduler per assegnare e riassegnare attività ai nodi come richiesto e specificato nel servizio Docker.

Sciame Docker vs. Docker Compose: quali sono le differenze?

Le persone usano spesso Docker Compose e Docker Swarm in modo intercambiabile. Sebbene entrambi implichino l'esecuzione di più contenitori, sono diversi.

Mentre Docker Compose ti consente di eseguire più contenitori su un singolo host, Docker Swarm li distribuisce su diversi motori Docker in un cluster.

Puoi usare Docker Compose quando devi creare contenitori separati per ogni servizio nella tua app. Pertanto, quando un componente si arresta in modo anomalo, non interferisce con gli altri. Tuttavia, quando la macchina host si guasta, anche l'intera app si arresta in modo anomalo.

Docker Swarm, tuttavia, ti aiuta a eseguire molti contenitori su nodi cluster. Quindi, ogni componente della tua app si trova su diversi nodi. E quando un nodo che gestisce un componente dell'app si arresta in modo anomalo, lo swarm alloca la sua attività a un altro nodo all'interno del cluster e riprogramma le attività in esecuzione, prevenendo i tempi di inattività.

Pertanto, mentre potresti avere tempi di inattività su Docker Compose, Docker Swarm garantisce che la tua app continui a funzionare con l'aiuto di server di backup (nodi di lavoro). Tuttavia, Docker 1.13 supporta la distribuzione Docker Compose in modalità Swarm utilizzando il distribuzione dello stack mobile comando.

Docker Swarm ti aiuta a distribuire app complesse

La containerizzazione ha superato le macchine virtuali nella progettazione di software di integrazione continua e distribuzione continua (CI/CD). Pertanto, comprendere il nocciolo della questione del meccanismo Docker Swarm è un'abilità in più se stai cercando di diventare un prezioso esperto di DevOps.

Probabilmente sai come far girare un container Docker o persino eseguire un Docker Compose per più container in un host. Ma Docker Swarm è più pratico per la distribuzione di app con un'architettura complessa. Suddivide i processi in unità, migliora l'accesso al runtime e riduce o addirittura elimina le possibilità di downtime.