Concepts clés du mode Swarm
Ce sujet introduit certains des concepts uniques aux fonctionnalités de gestion de cluster et d'orchestration de Docker Engine 1.12.
Qu'est-ce qu'un swarm ?
Les fonctionnalités de gestion de cluster et d'orchestration intégrées dans Docker Engine sont construites en utilisant swarmkit. Swarmkit est un projet séparé qui implémente la couche d'orchestration de Docker et est utilisé directement dans Docker.
Un swarm consiste en plusieurs hôtes Docker qui fonctionnent en mode Swarm et agissent comme gestionnaires, pour gérer l'adhésion et la délégation, et travailleurs, qui exécutent des services swarm. Un hôte Docker donné peut être un gestionnaire, un travailleur, ou jouer les deux rôles. Lorsque vous créez un service, vous définissez son état optimal - nombre de répliques, ressources réseau et de stockage disponibles, ports que le service expose au monde extérieur, et plus. Docker travaille pour maintenir cet état désiré. Par exemple, si un nœud travailleur devient indisponible, Docker planifie les tâches de ce nœud sur d'autres nœuds. Une tâche est un conteneur en cours d'exécution qui fait partie d'un service swarm et est géré par un gestionnaire swarm, par opposition à un conteneur autonome.
L'un des avantages clés des services swarm par rapport aux conteneurs autonomes est que vous pouvez modifier la configuration d'un service, y compris les réseaux et volumes auxquels il est connecté, sans avoir besoin de redémarrer manuellement le service. Docker va mettre à jour la configuration, arrêter les tâches de service avec une configuration obsolète, et créer de nouvelles correspondant à la configuration désirée.
Lorsque Docker fonctionne en mode Swarm, vous pouvez toujours exécuter des conteneurs autonomes sur n'importe lequel des hôtes Docker participant au swarm, ainsi que des services swarm. Une différence clé entre les conteneurs autonomes et les services swarm est que seuls les gestionnaires swarm peuvent gérer un swarm, tandis que les conteneurs autonomes peuvent être démarrés sur n'importe quel démon. Les démons Docker peuvent participer à un swarm comme gestionnaires, travailleurs, ou les deux.
De la même manière que vous pouvez utiliser Docker Compose pour définir et exécuter des conteneurs, vous pouvez définir et exécuter des piles de service Swarm.
Continuez la lecture pour les détails sur les concepts liés aux services swarm Docker, y compris les nœuds, services, tâches, et équilibrage de charge.
Nœuds
Un nœud est une instance du moteur Docker participant au swarm. Vous pouvez également penser à cela comme un nœud Docker. Vous pouvez exécuter un ou plusieurs nœuds sur un seul ordinateur physique ou serveur cloud, mais les déploiements swarm de production incluent typiquement des nœuds Docker distribués à travers plusieurs machines physiques et cloud.
Pour déployer votre application dans un swarm, vous soumettez une définition de service à un nœud gestionnaire. Le nœud gestionnaire dispatche des unités de travail appelées tâches aux nœuds travailleurs.
Les nœuds gestionnaires exécutent également les fonctions d'orchestration et de gestion de cluster requises pour maintenir l'état désiré du swarm. Les nœuds gestionnaires sélectionnent un seul leader pour conduire les tâches d'orchestration.
Les nœuds travailleurs reçoivent et exécutent les tâches dispatchées depuis les nœuds gestionnaires. Par défaut, les nœuds gestionnaires exécutent également des services comme nœuds travailleurs, mais vous pouvez les configurer pour exécuter exclusivement des tâches gestionnaires et être des nœuds gestionnaires uniquement. Un agent s'exécute sur chaque nœud travailleur et rapporte les tâches qui lui sont assignées. Le nœud travailleur notifie le nœud gestionnaire de l'état actuel de ses tâches assignées afin que le gestionnaire puisse maintenir l'état désiré de chaque travailleur.
Services et tâches
Un service est la définition des tâches à exécuter sur les nœuds gestionnaires ou travailleurs. C'est la structure centrale du système swarm et la racine principale de l'interaction utilisateur avec le swarm.
Lorsque vous créez un service, vous spécifiez quelle image de conteneur utiliser et quelles commandes exécuter à l'intérieur des conteneurs en cours d'exécution.
Dans le modèle de services répliqués, le gestionnaire swarm distribue un nombre spécifique de tâches répliques parmi les nœuds basé sur l'échelle que vous définissez dans l' état désiré.
Pour les services globaux, le swarm exécute une tâche pour le service sur chaque nœud disponible dans le cluster.
Une tâche porte un conteneur Docker et les commandes à exécuter à l'intérieur du conteneur. C'est l'unité de planification atomique du swarm. Les nœuds gestionnaires assignent des tâches aux nœuds travailleurs selon le nombre de répliques défini dans l'échelle du service. Une fois qu'une tâche est assignée à un nœud, elle ne peut pas se déplacer vers un autre nœud. Elle peut seulement s'exécuter sur le nœud assigné ou échouer.
Équilibrage de charge
Le gestionnaire swarm utilise l'équilibrage de charge ingress pour exposer les services que vous voulez rendre disponibles extérieurement au swarm. Le gestionnaire swarm peut automatiquement assigner au service un port publié ou vous pouvez configurer un port publié pour le service. Vous pouvez spécifier n'importe quel port inutilisé. Si vous ne spécifiez pas de port, le gestionnaire swarm assigne au service un port dans la plage 30000-32767.
Les composants externes, tels que les équilibreurs de charge cloud, peuvent accéder au service sur le port publié de n'importe quel nœud dans le cluster, que le nœud exécute actuellement la tâche pour le service ou non. Tous les nœuds dans le swarm routent les connexions ingress vers une instance de tâche en cours d'exécution.
Le mode Swarm a un composant DNS interne qui assigne automatiquement à chaque service dans le swarm une entrée DNS. Le gestionnaire swarm utilise l'équilibrage de charge interne pour distribuer les requêtes parmi les services dans le cluster basé sur le nom DNS du service.
Et ensuite ?
- Lisez l'aperçu du mode Swarm.
- Commencez avec le tutoriel du mode Swarm.