Qu’est-ce que le mode Docker Swarm et quand l’utiliser ? –
Le mode Swarm est le système d’orchestration intégré de Docker pour la mise à l’échelle des conteneurs sur un cluster de machines physiques. Plusieurs clients indépendants exécutant Docker Engine mettent en commun leurs ressources, formant un essaim.
La fonctionnalité est fournie avec Docker et comprend tout ce dont vous avez besoin pour déployer des applications sur les nœuds. Le mode Swarm dispose d’un modèle de mise à l’échelle déclaratif dans lequel vous indiquez le nombre de réplicas dont vous avez besoin. Le gestionnaire d’essaims prend des mesures pour faire correspondre le nombre réel de répliques à votre demande, en créant et en détruisant des conteneurs si nécessaire.
Les essaims ont aussi beaucoup plus de fonctionnalités. Les clusters bénéficient de fonctions de découverte de services intégrées, de la prise en charge des mises à jour progressives et du routage du trafic réseau via des équilibreurs de charge externes.
Voici comment vous pouvez utiliser le mode Swarm pour configurer des charges de travail distribuées simples sur un parc de machines. Vous devez utiliser Swarm si vous souhaitez héberger des applications évolutives avec redondance à l’aide d’une installation Docker standard, aucune autre dépendance n’est requise.
Sommaire
Créer votre propre essaim
Assurez-vous que Docker est installé avant de continuer. Vous aurez besoin du package Docker CE complet sur chaque machine que vous souhaitez ajouter à l’essaim.
Désignez l’un de vos hôtes comme gestionnaire de l’essaim. Ce nœud orchestrera le cluster en émettant des demandes de planification de conteneur vers les autres nœuds. Cours docker swarm init
sur le gestionnaire pour démarrer le processus de configuration du cluster :
docker swarm init --advertise-addr 192.168.0.1
Remplacez l’adresse IP par l’adresse IP réelle de votre nœud de gestionnaire. La commande émettra un docker swarm join
commande que vous devez exécuter sur vos nœuds secondaires. Ils rejoindront ensuite l’essaim et deviendront éligibles pour héberger des conteneurs.
Une fois que vous avez ajouté vos nœuds, exécutez docker info
sur le gestionnaire pour inspecter l’état du cluster. La section Swarm de la sortie de la commande doit être répertoriée comme « active ». Vérifiez que le nombre de « nœuds » correspond au nombre de nœuds que vous avez ajoutés.
Vous pouvez obtenir plus de détails sur un nœud en exécutant docker node ls
. Cela montre l’ID unique de chaque nœud, son nom d’hôte et son état actuel. Les nœuds qui affichent une disponibilité « actif » avec un statut « prêt » sont sains et prêts à prendre en charge vos charges de travail. La colonne Statut du gestionnaire indique les nœuds qui agissent également en tant que gestionnaires d’essaim. Le « leader » est le nœud ayant la responsabilité globale du cluster.
Déployer un conteneur
Une fois que vos nœuds sont prêts, vous pouvez déployer un conteneur dans votre essaim. Le mode Swarm utilise le concept de « services » pour décrire les déploiements de conteneurs. Chaque configuration de service fait référence à une image Docker et à un nombre de réplicas à créer à partir de cette image.
docker service create --replicas 3 --name apache httpd:latest
Cette commande crée un service en utilisant le httpd:latest
image pour le serveur Web Apache. Trois réplicas indépendants seront créés, vous offrant une résilience contre les terminaisons de conteneurs et les pannes de nœuds. Les réplicas de conteneurs sont appelés « tâches » dans le langage Docker Swarm.
Docker maintiendra continuellement l’état demandé. Si l’un des nœuds se déconnecte, les réplicas qu’il hébergeait seront reprogrammés vers les autres. Vous aurez trois conteneurs Apache en cours d’exécution tout au long de la durée de vie du service.
Services de mise à l’échelle
Vous pouvez faire évoluer les services à tout moment en utilisant le docker service scale
commander:
docker service scale apache=5
Docker ajoutera deux nouvelles instances de conteneur afin que le nombre de réplicas continue de correspondre au nombre demandé. Les instances supplémentaires seront planifiées sur des nœuds disposant d’une capacité disponible suffisante pour les prendre en charge.
Les services peuvent également être mis à l’échelle avec docker service update
:
docker service update apache --replicas=5
Lorsque vous utilisez cette variante, vous pouvez annuler la modification à l’aide d’une commande dédiée :
docker service rollback apache
Le service reviendra à trois réplicas. Docker détruira deux instances de conteneur, permettant au nombre de réplicas en direct de correspondre à nouveau à l’état précédent.
Mises à jour continues
Le mode Swarm prend en charge les mises à jour progressives où les instances de conteneur sont mises à l’échelle de manière incrémentielle. Vous pouvez spécifier un délai entre le déploiement du service révisé sur chaque nœud de l’essaim. Cela vous donne le temps d’agir sur les régressions si des problèmes sont constatés. Vous pouvez rapidement revenir en arrière car tous les nœuds n’auront pas reçu le nouveau service.
Ajouter le --update-delay
drapeau à un docker service scale
commande pour activer les mises à jour progressives. Le délai est spécifié comme une combinaison d’heures h
, minutes m
et secondes s
. Le gestionnaire de swarm mettra à jour chaque instance de conteneur individuellement. Vous pouvez régler le nombre de tâches mises à jour en une seule opération avec le --update-parallelism
drapeau.
Voici comment faire évoluer un service jusqu’à 10 réplicas, en mettant à jour trois conteneurs à la fois avec un délai de cinq minutes entre chaque lot :
docker service scale --name apache --replicas=10 --update-delay 5m --update-parallelism 3
Gestion des services
De nombreuses commandes Docker familières fonctionnent également avec les services. Ajoutez des commandes de gestion de conteneurs régulières docker service
pour répertorier les services, afficher leurs journaux et les supprimer.
docker service inspect
– Inspecter les données techniques d’un service nommé.docker service logs
– Afficher la sortie de journal associée à un service nommé.docker service ls
– Répertoriez tous les services en cours d’exécution.docker service ps
– Afficher les instances de conteneur individuelles encapsulées par un service spécifique.docker service rm
– Supprimer un service avec toutes ses répliques. Il n’y a pas d’invite de confirmation.
Outre les opérations de gestion de base décrites jusqu’à présent, les services sont livrés avec un riche ensemble d’options de configuration. Ceux-ci peuvent être appliqués lors de la création d’un service ou plus tard avec le docker service update
commander.
Les options de service incluent les variables d’environnement, les commandes de vérification de l’état, les paramètres DNS, les étiquettes et les conditions de redémarrage. Les instances de conteneur en cours d’exécution ne sont généralement pas détruites le docker service update
à moins que vous ne modifiiez des paramètres qui nécessitent une recréation pour prendre effet.
Exposition des ports réseau
Les ports du réseau de conteneurs sont exposés avec le --publish
drapeau pour docker service create
et docker service update
. Cela vous permet de spécifier un port de conteneur cible et le port public pour l’exposer.
docker service create --name apache --replicas 5 --publish published=8080,target=80 nginx:latest
Vous pouvez maintenant vous connecter au port 8080 sur tout de vos nœuds de travail pour accéder à une instance du service NGINX. Cela fonctionne même si le nœud auquel vous vous connectez n’héberge pas réellement l’une des tâches du service. Vous interagissez simplement avec l’essaim et il s’occupe du routage du réseau. Cette approche est appelée « maillage de routage ».
Une option alternative vous permet de publier des ports de conteneur sur les nœuds individuels où les tâches sont en cours d’exécution. Ajouter mode=host
à la --published
drapeau pour l’activer. Le service ne sera exposé que sur les nœuds qui l’hébergent. Ceci est utile dans les cas où vous souhaitez vous connecter à une instance spécifique du service. Le maillage de routage randomise l’instance à laquelle vous vous connectez, quel que soit le nœud que vous utilisez pour vous connecter.
Docker Swarm prend également en charge les réseaux superposés. Ceux-ci sont similaires aux réseaux Docker classiques. L’adhésion d’un service à un réseau permet à ses conteneurs de communiquer avec tout autre service du réseau.
docker service create --name service1 --network demo-network my-image:latest docker service create --name service2 --network demo-network my-image:latest
Tâches créées par service1
et service2
pourront se joindre via le réseau superposé. Un réseau par défaut appelé ingress
fournit la fonctionnalité de maillage de routage standard décrite ci-dessus.
Conclusion
Le mode Swarm est un orchestrateur de conteneurs intégré à Docker. Comme il est inclus par défaut, vous pouvez l’utiliser sur n’importe quel hôte sur lequel Docker Engine est installé.
La création d’un essaim vous permet de répliquer des conteneurs sur une flotte de machines physiques. Swarm vous permet également d’ajouter plusieurs nœuds de gestionnaire pour améliorer la tolérance aux pannes. Si le leader actif quitte le cluster, un autre manager peut prendre le relais pour maintenir les opérations.
Le mode Docker Swarm se compare avantageusement aux plates-formes d’orchestration alternatives telles que Kubernetes. Il est plus facile de démarrer car il est intégré à Docker et il y a moins de concepts à apprendre. Il est souvent plus simple à installer et à entretenir sur du matériel autogéré, bien que les solutions Kubernetes pré-packagées telles que MicroK8 aient érodé le facteur de commodité Swarm. Même ainsi, le mode Swarm reste un orchestrateur viable pour les charges de travail auto-hébergées, en particulier si vous recherchez une solution CLI orientée développeur et moins exigeante pour les équipes d’exploitation.