Qu'est-ce que le mode Docker Swarm et quand l'utiliser ?

0
210

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 également 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.

Création de 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.

Publicité

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. Exécutez 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 votre nœud de gestionnaire’ IP réelle. La commande émettra une commande docker swarm join que vous devrez 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 les informations de docker 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 les “Nœuds” count 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. Nœuds affichant une disponibilité “active” avec un statut de “prêt” sont sains et prêts à supporter 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éploiement d'un conteneur

Une fois que vos nœuds sont prêts, vous pouvez déployer un conteneur dans votre essaim. Le mode essaim 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.

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

Cette commande crée un service à l'aide de l'image httpd:latest 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épliques de conteneurs sont appelées “tâches” dans le langage Docker Swarm.

Publicité

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.

Scaling Services

Vous pouvez faire évoluer les services à tout moment en utilisant le docker commande service scale :

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 avec suffisamment de capacité libre pour les prendre en charge.

Les services peuvent également être mis à l'échelle avec la mise à jour du service docker :

docker service update apache –replicas=5

Quand vous utilisez cette variante, vous pouvez annuler la modification à l'aide d'une commande dédiée :

docker service rollback apache

Le service sera ramené à 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 progressives

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.

Publicité

Ajoutez l'indicateur –update-delay à une commande docker service scale pour activer les mises à jour progressives. Le délai est spécifié comme une combinaison d'heures h, de minutes m et de secondes s. Le gestionnaire de swarm mettra à jour chaque instance de conteneur individuellement. Vous pouvez ajuster le nombre de tâches mises à jour en une seule opération avec l'indicateur –update-parallelism.

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 au service docker pour répertorier les services, afficher leurs journaux et les supprimer.

  • docker service inspect – Inspectez les données techniques d'un service nommé.
  • journaux de service docker – Afficher la sortie du 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 la commande docker service update.

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 lors de la mise à jour du service Docker, sauf si vous modifiez les paramètres qui nécessitent une recréation pour prendre effet.

Exposition des ports réseau

Les ports réseau de conteneur sont exposés avec l'indicateur –publish pour la création et la mise à jour du service docker. 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 Advertisement

Vous pouvez maintenant vous connecter au port 8080 sur n'importe lequel 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 autre option vous permet de publier des ports de conteneur sur les nœuds individuels où les tâches sont en cours d'exécution. Ajoutez mode=host à l'indicateur –published 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. Rejoindre un service à un réseau permet à ses conteneurs de communiquer avec n'importe quel autre service sur le réseau.

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

Les 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 avec Docker Engine installé.

Créer 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 gestionnaire peut prendre le relais pour maintenir les opérations.

Publicité

Le mode Docker Swarm se compare avantageusement aux plates-formes d'orchestration alternatives telles que Kubernetes. Il est plus facile de commencer 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.