L’écosystème Docker: planification et orchestration

introduction

L'outil Docker fournit toutes les fonctions nécessaires à la création, au téléchargement, au téléchargement, au démarrage et à l'arrêt des conteneurs. Il est bien adapté à la gestion de ces processus dans des environnements à hôte unique avec un nombre minimal de conteneurs.

Cependant, de nombreux utilisateurs de Docker utilisent la plate-forme comme un outil permettant de dimensionner facilement un grand nombre de conteneurs sur plusieurs hôtes différents. Les hôtes Docker en cluster présentent des défis de gestion particuliers qui nécessitent un ensemble d'outils différent.

Dans ce guide, nous aborderons les planificateurs Docker et les outils d’orchestration. Ils représentent l'interface de gestion de conteneur principale pour les administrateurs de déploiements distribués.

Planification des conteneurs, gestion de l'orchestration et des clusters

Lorsque les applications sont déployées sur plusieurs systèmes hôtes, la capacité de gérer chaque système hôte et d'abstruer la complexité de la plate-forme sous-jacente devient attrayante. Orchestration est un terme général qui fait référence à la planification de conteneur, à la gestion de cluster et éventuellement à la mise en service d'hôtes supplémentaires.

Dans cet environnement, le terme "planification" désigne la possibilité pour un administrateur de charger un fichier de service sur un système hôte afin de déterminer comment exécuter un conteneur spécifique. Si la planification fait référence à l'acte spécifique de chargement de la définition de service, de manière plus générale, les ordonnanceurs sont responsables de la connexion au système init d'un hôte pour gérer les services à la capacité requise.

La gestion de cluster est le processus de contrôle d'un groupe d'hôtes. Cela peut impliquer l'ajout et la suppression d'hôtes d'un cluster, l'obtention d'informations sur l'état actuel des hôtes et des conteneurs, ainsi que le démarrage et l'arrêt des processus. La gestion de cluster est étroitement liée à la planification car le planificateur doit avoir accès à chaque hôte du cluster pour pouvoir planifier des services. Pour cette raison, le même outil est souvent utilisé aux deux fins.

Pour pouvoir exécuter et gérer les conteneurs sur les hôtes du cluster, le planificateur doit interagir avec le système init de chaque hôte. Dans le même temps, pour faciliter la gestion, le planificateur présente une vue unifiée de l’état des services dans l’ensemble du cluster. Cela finit par fonctionner comme un système init à l'échelle du cluster. Pour cette raison, de nombreux ordonnanceurs reflètent la structure de commande du système init qu’ils analysent.

L'une des plus grandes responsabilités des planificateurs est la sélection de l'hôte. Si un administrateur décide d'exécuter un service (conteneur) sur le cluster, le planificateur est souvent chargé de sélectionner automatiquement un hôte. L'administrateur peut éventuellement fournir des contraintes de planification en fonction de ses besoins ou désirs, mais le planificateur est finalement responsable de l'exécution sur ces exigences.

Comment un planificateur prend-il des décisions de planification?

Les planificateurs définissent souvent une stratégie de planification par défaut. Cela détermine la manière dont les services sont planifiés lorsqu'aucune entrée n'est fournie par l'administrateur. Par exemple, un planificateur peut choisir de placer de nouveaux services sur des hôtes avec le moins de services actuellement actifs.

Les ordonnanceurs fournissent généralement des mécanismes de substitution que les administrateurs peuvent utiliser pour adapter les processus de sélection aux exigences spécifiques. Par exemple, si deux conteneurs doivent toujours être exécutés sur le même hôte parce qu'ils fonctionnent comme une unité, cette affinité peut souvent être déclarée lors de la planification. De même, si deux conteneurs doiventnot être placés sur le même hôte, par exemple pour assurer la haute disponibilité de deux instances du même service, cela peut également être défini.

D'autres contraintes auxquelles un planificateur peut prêter attention peuvent être représentées par des métadonnées arbitraires. Les hôtes individuels peuvent être étiquetés et ciblés par les planificateurs. Cela peut être nécessaire, par exemple, si un hôte contient le volume de données requis par une application. Certains services peuvent devoir être déployés sur chaque hôte individuel du cluster. La plupart des planificateurs vous permettent de le faire.

Quelles fonctions de gestion de cluster sont fournies par les planificateurs?

La planification est souvent liée aux fonctions de gestion de cluster, car les deux fonctions nécessitent la capacité d'opérer sur des hôtes spécifiques et sur le cluster dans son ensemble.

Le logiciel de gestion de cluster peut être utilisé pour interroger des informations sur les membres d'un cluster, ajouter ou supprimer des membres, ou même se connecter à des hôtes individuels pour une administration plus granulaire. Ces fonctions peuvent être incluses dans le planificateur ou peuvent être la responsabilité d'un autre processus.

Souvent, la gestion de cluster est également associée à l'outil de découverte de service ou au magasin de clés-valeurs distribué. Celles-ci sont particulièrement bien adaptées au stockage de ce type d'informations car celles-ci sont dispersées dans l'ensemble du cluster et que la plate-forme existe déjà pour sa fonction principale.

De ce fait, si le planificateur lui-même ne fournit pas de méthodes, il peut être nécessaire d'effectuer certaines opérations de gestion de cluster en modifiant les valeurs du magasin de configuration à l'aide des API fournies. Par exemple, il peut être nécessaire de gérer les modifications d'appartenance à un cluster via des modifications brutes du service de découverte.

Le magasin de valeurs-clés est également généralement l'emplacement où les métadonnées relatives à des hôtes individuels peuvent être stockées. Comme indiqué précédemment, l'étiquetage des hôtes vous permet de cibler des individus ou des groupes pour les décisions de planification.

Comment les déploiements multi-conteneurs s'intègrent-ils dans la planification?

Parfois, même si chaque composant d'une application a été divisé en un service discret, ils doivent être gérés comme une seule unité. Parfois, il ne serait pas logique de déployer un service sans un autre à cause des fonctions fournies par chacun.

La planification avancée prenant en compte le regroupement de conteneurs est disponible dans plusieurs projets différents. L'accès à cette fonctionnalité présente de nombreux avantages pour les utilisateurs.

La gestion des conteneurs de groupe permet à un administrateur de gérer une collection de conteneurs en une seule application. L'exécution de composants étroitement intégrés en tant qu'unité simplifie la gestion des applications sans sacrifier les avantages du compartimentage des fonctionnalités individuelles. En effet, il permet aux administrateurs de conserver les gains tirés de la conteneurisation et de l’architecture orientée service tout en minimisant les frais de gestion supplémentaires.

Regrouper des applications peut signifier simplement les planifier et leur donner la possibilité de les démarrer et de les arrêter en même temps. Cela peut également permettre des scénarios plus complexes, tels que la configuration de sous-réseaux distincts pour chaque groupe d'applications ou la mise à l'échelle d'ensembles complets de conteneurs pour lesquels nous ne pouvions auparavant faire évoluer que l'échelle du conteneur.

Qu'est-ce que l'approvisionnement?

Un concept lié à la gestion des clusters est le provisioning. Le provisioning consiste à mettre en ligne de nouveaux hôtes et à les configurer de manière simple afin qu'ils soient prêts à fonctionner. Avec les déploiements Docker, cela implique souvent de configurer Docker et de configurer le nouvel hôte pour rejoindre un cluster existant.

Le résultat final de la mise à disposition d’un hôte doit toujours être la disponibilité d’un nouveau système, mais la méthodologie varie considérablement en fonction des outils utilisés et du type d’hôte. Par exemple, si l'hôte est une machine virtuelle, des outils tels quevagrant peuvent être utilisés pour lancer un nouvel hôte. La plupart des fournisseurs de cloud vous permettent de créer de nouveaux hôtes à l'aide d'API. En revanche, la fourniture de matériel nu nécessiterait probablement certaines étapes manuelles. Des outils de gestion de la configuration, tels que Chef, Puppet, Ansible ou Salt, peuvent être impliqués afin de gérer la configuration initiale de l'hôte et de lui fournir les informations nécessaires pour se connecter à un cluster existant.

Le provisioning peut rester un processus initié par l’administrateur ou peut être connecté aux outils de gestion du cluster pour une mise à l’échelle automatique. Cette dernière méthode implique de définir le processus de demande d'hôtes supplémentaires ainsi que les conditions dans lesquelles cela doit être déclenché automatiquement. Par exemple, si votre application est soumise à une charge importante, vous pouvez souhaiter que votre système génère des hôtes supplémentaires et redimensionne horizontalement les conteneurs dans la nouvelle infrastructure afin de réduire l'encombrement.

Quels sont certains ordonnanceurs courants?

En termes de planification de base et de gestion de clusters, certains projets courants sont les suivants:

  • fleet: Fleet est le composant de planification et de gestion de cluster de CoreOS. Il lit les informations de connexion de chaque hôte du cluster à partir de etcd et fournit une gestion de service semblable à celle de systemd.

  • marathon: Marathon est le composant de planification et de gestion des services d'une installation Mesosphere. Il fonctionne avec mesos pour contrôler les services de longue durée et fournit une interface utilisateur Web pour la gestion des processus et des conteneurs.

  • Swarm: Docker’s Swarm est un planificateur que le projet Docker a annoncé en décembre 2014. Il espère fournir un ordonnanceur robuste pouvant créer des conteneurs sur les hôtes provisionnés avec Docker, en utilisant la syntaxe native de Docker.

Dans le cadre de la stratégie de gestion des clusters, les configurations de Mesosphere reposent sur le composant suivant:

  • mesos: Apache mesos est un outil qui résume et gère les ressources de tous les hôtes d'un cluster. Il présente une collection des ressources disponibles dans l'ensemble du cluster pour les composants construits dessus (comme le marathon). Il se décrit comme analogue à un «noyau» pour une configuration en cluster.

En termes de planification avancée et de contrôle de groupes de conteneurs en une seule unité, les projets suivants sont disponibles:

  • kubernetes: planificateur avancé de Google, kubernetes permet un contrôle beaucoup plus large sur les conteneurs exécutés sur votre infrastructure. Les conteneurs peuvent être étiquetés, regroupés et avoir leur propre sous-réseau pour la communication.

  • compose: Le projet compose de Docker a été créé pour permettre la gestion de groupe de conteneurs à l'aide de fichiers de configuration déclaratifs. Il utilise les liens Docker pour en savoir plus sur la relation de dépendance entre les conteneurs.

Conclusion

La gestion des clusters et les planificateurs de travail sont un élément clé de la mise en œuvre de services conteneurisés sur un ensemble d'hôtes distribué. Ils constituent le principal point de gestion pour le démarrage et le contrôle des services fournis par votre application. En utilisant efficacement les planificateurs, vous pouvez apporter des modifications drastiques à vos applications avec très peu d'effort.