Gestion de cluster Swarm

Introduction

Docker Swarm est l'outil de gestion de cluster de Docker. Il transforme un pool d'hôtes Docker en un seul hôte Docker virtuel. Docker Swarm fournit l'API Docker standard, de sorte que tout outil qui communique déjà avec le démon Docker peut facilement s'étendre à plusieurs hôtes à l'aide de Swarm.

Les outils pris en charge incluent, entre autres, les suivants :

  • Dokku
  • Docker Compose
  • Docker Machine
  • Jenkins

Principe

Comme le montre la figure ci-dessous, un cluster Swarm est constitué de nœuds gestionnaires et de nœuds de travail.

  • gestionnaire Swarm: Responsable de la gestion globale du cluster, y compris la configuration du cluster, la gestion des services et tous les autres travaux liés au cluster.
  • nœud de travail: c'est-à-dire le nœud disponible dans le diagramme, principalement chargé d'exécuter les services correspondants pour exécuter les tâches.


Utilisation

Les exemples suivants utilisent tous Docker Machine et VirtualBox à des fins de démonstration ; assurez-vous que VirtualBox est installé sur votre hôte.

1. Créer un nœud gestionnaire de cluster Swarm (manager)

Créer des machines Docker :

$ docker-machine create -d virtualbox swarm-manager

Initialiser le cluster Swarm ; la machine qui effectue l'initialisation est le nœud gestionnaire du cluster.

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为创建机器时分配的 ip.

La sortie ci-dessus prouve que l’initialisation a réussi. Vous devez copier la ligne suivante ; elle sera utilisée lors de l’ajout de nœuds worker :

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

2. Créer un nœud worker de cluster Swarm (worker)

Ici, créez directement deux machines : swarm-worker1 et swarm-worker2.

Entrez dans les deux machines séparément et indiquez de les ajouter au cluster créé à l’étape précédente. Le contenu copié à l’étape précédente sera utilisé ici.

La sortie de données ci-dessus indique que l’ajout a réussi.

Dans la figure ci-dessus, comme le contenu copié à l’étape précédente est assez long, il sera automatiquement tronqué. En fait, la commande exécutée dans la figure est la suivante :

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

3. Afficher les informations du cluster

Sur le nœud manager, exécutez : docker info pour afficher les informations actuelles du cluster.

$ docker info

Dans la zone entourée en rouge, vous pouvez voir que le cluster en cours d’exécution comporte trois nœuds, dont l’un est un nœud manager.

4. Déployer des services sur le cluster

Remarque: Toute opération liée à la gestion du cluster est effectuée sur le nœud manager.

Dans l’exemple suivant, un service nommé helloworld est créé sur un nœud worker. Ici, il est attribué aléatoirement à un nœud worker :

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

5. Afficher l'état de déploiement du service

Vérifiez sur quel nœud le service helloworld est en cours d'exécution. Vous pouvez voir qu'il se trouve actuellement sur le nœud swarm-worker1 :

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

Afficher les informations spécifiques sur le déploiement de helloworld :

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

6. Mettre à l'échelle les services du cluster

Nous mettons à l'échelle le service helloworld ci-dessus sur deux nœuds.

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

Vous pouvez voir qu'il a été mis à l'échelle d'un nœud à deux nœuds.

7. Supprimer le service

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

Vérifiez s'il a été supprimé :

8. Mise à jour progressive des services

Dans l'exemple suivant, nous allons montrer comment effectuer une mise à jour progressive de redis vers une version supérieure.

Créez une version Redis 3.0.6.

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

Mise à jour progressive de redis.

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

D'après la figure, vous pouvez voir que la version de redis a été mise à niveau de 3.0.6 vers 3.0.7, ce qui indique que le service a été mis à niveau avec succès.

9. Empêcher un nœud de recevoir de nouvelles tâches

Afficher tous les nœuds :

docker@swarm-manager:~$ docker node ls

Vous pouvez voir que tous les nœuds sont actuellement à l'état Active et peuvent accepter de nouvelles attributions de tâches.

Arrêter le nœud swarm-worker1 :

Remarque: le statut de swarm-worker1 passe à Drain. Cela n'affecte pas les services du cluster ; cela signifie seulement que le nœud swarm-worker1 n'accepte plus de nouvelles tâches, et la capacité de charge du cluster a quelque peu diminué.

Le nœud peut être réactivé avec la commande suivante :

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

autres extensions