English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Gestione del cluster Swarm

Introduzione

Docker Swarm è uno strumento di gestione di cluster di Docker. Trasforma un pool di host Docker in un singolo host Docker virtuale. Docker Swarm fornisce un'API Docker standard, pertanto qualsiasi strumento che ha già comunicato con il demone Docker può utilizzare Swarm per espandersi facilmente su più host.

Gli strumenti supportati includono ma non sono limitati alle seguenti voci:

  • Dokku

  • Docker Compose

  • Docker Machine

  • Jenkins

Principio

Come illustrato nella figura di seguito, il cluster swarm è composto da un nodo amministrativo (manager) e un nodo lavorativo (work node).

  • swarm manager:负责整个集群的管理工作,包括集群配置、服务管理等所有与集群有关的工作。

  • work node:ovvero il nodo disponibile nella figura,主要负责运行相应的服务来执行任务(task).

Utilizzare

Nelle esempi seguenti, si utilizza Docker Machine e virtualbox, assicurarsi che il tuo host abbia installato virtualbox.

1、Creare il nodo amministrativo (manager) del cluster swarm

Creare il computer docker:

$ docker-machine create -d virtualbox swarm-manager

Inizializzare il cluster swarm, il computer che sta eseguendo l'inizializzazione è il nodo amministrativo del cluster.

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 # L'IP qui è l'IP assegnato durante la creazione del computer.

L'output sopra dimostra che l'inizializzazione è stata eseguita con successo. È necessario copiare la seguente riga, che verrà utilizzata durante l'aggiunta del nodo lavorativo:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、Creare il nodo lavorativo (worker) del cluster swarm

Qui vengono direttamente creati due computer, swarm-worker1 e swarm-worker2.

Entrare rispettivamente nei due computer, specificare l'aggiunta al cluster creato nel passo precedente, qui verrà utilizzato il contenuto copiato nel passo precedente.

L'output dei dati sopra indica che l'aggiunta è stata eseguita con successo.

Nell'immagine qui sopra, a causa della lunghezza del contenuto copiato nel passo precedente, viene automaticamente troncato. Di fatto, il comando eseguito nella figura è il seguente:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3, visualizzare le informazioni del cluster

Entrare nel nodo di gestione e eseguire: docker info per visualizzare le informazioni del cluster corrente.

$ docker info

Tramite il cerchio rosso, si può sapere che nel cluster attualmente in esecuzione ci sono tre nodi, uno dei quali è il nodo di gestione.

4, distribuire il servizio nel cluster

AttenzioneOgni operazione relativa alla gestione del cluster viene eseguita sul nodo di gestione.

Nell'esempio seguente, creare un servizio chiamato helloworld su un nodo di lavoro, che viene assegnato in modo casuale a un nodo di lavoro:

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

5, visualizzare la situazione di deploy del servizio

Visualizzare su quale nodo il servizio helloworld è in esecuzione, si può vedere che attualmente è sul nodo swarm-worker1:

docker@swarm-manager:~$ docker service ps helloworld

Visualizzare le informazioni specifiche del deploy di helloworld:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

6, espandere il servizio del cluster

Estenderemo il servizio helloworld ai due nodi.

docker@swarm-manager:~$ docker service scale helloworld=2

Si può vedere che è stato espanso da un nodo a due nodi.

7, eliminare il servizio

docker@swarm-manager:~$ docker service rm helloworld

Verificare se è stato eliminato:

8, aggiornamento rolling del servizio

Nella seguente esempio, spiegheremo come aggiornare il redis alla versione più recente.

Creare una versione 3.0.6 di redis.

docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

Aggiorna in modo continuo redis.

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

Dalla figura si può notare che la versione di redis è stata aggiornata da 3.0.6 a 3.0.7, il che indica che il servizio è stato aggiornato con successo.

9、Ferma un nodo per non ricevere nuovi compiti

Visualizza tutti i nodi:

docker@swarm-manager:~$ docker node ls

Si può vedere che tutti i nodi sono attivi e possono ricevere nuove assegnazioni di compiti.

Ferma il nodo swarm-worker1:

Attenzione:swarm-worker1 lo stato diventa Drain. Non influisce sui servizi del cluster, ma il nodo swarm-worker1 non riceverà nuovi compiti, la capacità di carico del cluster diminuisce.

Puoi riattivare il nodo con il seguente comando:

docker@swarm-manager:~$ docker node update --availability active swarm-worker1