La conteneurisation consiste à distribuer et à déployer des applications de manière portable et prévisible. Pour cela, les composants et leurs dépendances sont empaquetés dans des environnements de traitement standardisés, isolés et légers, appelés conteneurs. De nombreuses entreprises s’intéressent désormais à la conception d’applications et de services pouvant être facilement déployés sur des systèmes distribués. De plus, cela permet au système de s’adapter facilement aux pannes des machines et des applications. Il s’agit d’une plateforme de conteneurisation développée pour simplifier et standardiser le déploiement dans divers environnements, a largement contribué à encourager l’adoption de ce style de conception et de gestion de services.
Docker et conteneurisation
Docker est le logiciel de conteneurisation le plus utilisé actuellement. Alors que d’autres systèmes de conteneurisation existent, Docker simplifie la création et la gestion des conteneurs et s’intègre à de nombreux projets open source.
Les conteneurs isolent les applications individuelles et utilisent les ressources du système d’exploitation extraites par Docker.
Les principaux avantages de Docker sont:
- Utilisation légère des ressources: au lieu de virtualiser l’intégralité d’un système d’exploitation, les conteneurs sont isolés au niveau du processus et utilisent le noyau de l’hôte.
- Portabilité: toutes les dépendances d’une application conteneurisée se regroupent à l’intérieur du conteneur, ce qui lui permet de s’exécuter sur n’importe quel hôte Docker.
- Prévisibilité: l’hôte ne se soucie pas de ce qui s’exécute à l’intérieur du conteneur et le conteneur ne se soucie pas de l’hôte sur lequel il s’exécute. Les interfaces sont normalisées et les interactions prévisibles.
Généralement, lors de la conception d’une application ou d’un service utilisant Docker, il est préférable de répartir les fonctionnalités dans des conteneurs individuels, une décision de conception appelée architecture orientée services. Cela vous permet de mettre à niveau ou de mettre à jour des composants facilement.
Détection de service et magasins de configuration globale
En effet, la découverte de services est l’un des éléments d’une stratégie globale visant à rendre les déploiements de conteneurs évolutifs et flexibles. La découverte de service est utilisée pour que les conteneurs puissent découvrir l’environnement auquel ils ont été introduits sans intervention de l’administrateur. Ils peuvent trouver des informations de connexion pour les composants avec lesquels ils doivent interagir et ils peuvent s’inscrire eux-mêmes afin que d’autres outils sachent qu’ils sont disponibles. Ces outils fonctionnent également comme des magasins de configuration distribués globalement où des paramètres de configuration arbitraires peuvent être définis pour les services fonctionnant dans votre infrastructure.
Les outils de l’écosystème Docker
Ces outils sont souvent implémentés en tant que magasins clé-valeur simples distribués entre les hôtes dans un environnement en cluster. Généralement, les magasins de valeurs-clés fournissent une API HTTP pour accéder aux valeurs et les définir. Certains incluent des mesures de sécurité supplémentaires, telles que des entrées chiffrées ou des mécanismes de contrôle d’accès. Les magasins distribués sont essentiels pour gérer les hôtes Docker en cluster en plus de leur fonction principale de fournir des détails d’auto-configuration pour les nouveaux conteneurs.
Certaines des responsabilités des magasins de découverte de services sont les suivantes:
- Autoriser les applications à obtenir les données nécessaires pour se connecter aux services dont elles dépendent.
- Autoriser les services à enregistrer leurs informations de connexion dans le but ci-dessus.
- Fournir un emplacement accessible globalement pour stocker des données de configuration arbitraires.
- Stockage d’informations sur les membres du cluster selon les besoins de tout logiciel de gestion de cluster.
Certains outils de découverte de services populaires et projets connexes sont:
- etcd: découverte de service / magasin clé-valeur distribué globalement
- consul: découverte de service / magasin de clé-valeur distribué globalement
- zookeeper: découverte de service / magasin clé-valeur distribué globalement
- crypte: projet pour crypter les entrées etc
- confd: surveille le magasin de valeurs-clés pour les modifications et déclenche la reconfiguration des services avec de nouvelles valeurs
Outils de mise en réseau
Les applications conteneurisées se prêtent à une conception orientée service qui encourage la séparation des fonctionnalités en composants distincts. Bien que cela facilite la gestion et la mise à l’échelle, cela exige encore plus d’assurance quant à la fonctionnalité et à la fiabilité de la mise en réseau entre les composants. Docker fournit lui-même les structures réseau de base nécessaires à la communication de conteneur à conteneur et de conteneur à hôte.
En outre, les capacités réseau natives de Docker fournissent deux mécanismes pour accrocher les conteneurs ensemble. La première consiste à exposer les ports d’un conteneur et à mapper éventuellement le système hôte pour le routage externe. Vous pouvez sélectionner le port hôte auquel mapper ou autoriser Docker à choisir au hasard un port inutilisé élevé. C’est un moyen générique de fournir un accès à un conteneur qui fonctionne bien dans la plupart des cas.
En effet, l’autre méthode consiste à permettre aux conteneurs de communiquer en utilisant des « liens » Docker. Un conteneur lié obtiendra des informations de connexion sur son homologue, lui permettant de se connecter automatiquement s’il est configuré pour faire attention à ces variables.
Par conséquent, ce niveau de base de la mise en réseau convient aux environnements à hôte unique ou étroitement gérés. Toutefois, l’écosystème Docker a produit une variété de projets axés sur l’élargissement de la fonctionnalité de mise en réseau à la disposition des opérateurs et des développeurs.
Fonctionnalités supplémentaires
Parmi les autres fonctionnalités réseau disponibles via des outils supplémentaires, citons:
- Superposition réseau pour simplifier et unifier l’espace adresse entre plusieurs hôtes.
- Réseaux privés virtuels adaptés pour assurer une communication sécurisée entre différents composants.
- Affectation de sous-réseaux par hôte ou par application
- Établissement d’interfaces macvlan pour la communication
- Configuration d’adresses MAC personnalisées, de passerelles, etc. pour vos conteneurs
Certains projets liés à l’amélioration du réseau Docker sont les suivants:
- flannel: réseau superposé fournissant à chaque hôte un sous-réseau distinct.
- weave: réseau superposé représentant tous les conteneurs sur un seul réseau.
- pipework: trousse d’outils réseau avancée pour des configurations de réseau avancées de manière arbitraire.
Planification, gestion du cluster et orchestration
Un autre composant nécessaire lors de la création d’un environnement de conteneur en cluster est un planificateur. Les planificateurs sont responsables du démarrage des conteneurs sur les hôtes disponibles.
La demande est transmise via une API ou un outil de gestion. À partir de là, le planificateur évalue les conditions de la demande et l’état des hôtes disponibles.
En effet, ce processus de sélection de l’hôte est l’une des principales responsabilités du planificateur. Habituellement, il a des fonctions qui automatisent ce processus, l’administrateur ayant la possibilité de spécifier certaines contraintes. Certaines de ces contraintes peuvent être:
- Planifiez le conteneur sur le même hôte qu’un autre conteneur donné.
- Placez le conteneur sur un hôte avec une étiquette ou des métadonnées correspondantes.
- Placez le conteneur sur l’hôte le moins occupé.
- Exécutez le conteneur sur chaque hôte du cluster.
Étant donné que le planificateur doit interagir avec chaque hôte du groupe, les fonctions de gestion de cluster sont également généralement incluses. En effet, cela permet au planificateur d’obtenir des informations sur les membres et d’effectuer des tâches d’administration. L’orchestration dans ce contexte désigne généralement la combinaison de la planification des conteneurs et de la gestion des hôtes.
En outre, certains projets populaires fonctionnant comme des ordonnanceurs et des outils de gestion de flotte sont les suivants:
- fleet: outil de gestion de planificateur et de cluster.
- marathon: outil de gestion de planificateur et de service.
- Swarm: outil de gestion de planificateur et de service.
- mesos: service d’abstraction de l’hôte qui consolide les ressources de l’hôte pour le planificateur.
- kubernetes: programmateur avancé capable de gérer des groupes de conteneurs.
- compose: outil d’orchestration de conteneur pour créer des groupes de conteneurs.
Conclusion
À ce jour, vous devez vous familiariser avec la fonction générale de la plupart des logiciels associés à l’écosystème Docker. De plus, Docker lui-même, avec tous les projets de support, fournit une stratégie de gestion, de conception et de déploiement de logiciels permettant une évolutivité massive. En effet, en comprenant et en exploitant les capacités de divers projets, vous pouvez exécuter des déploiements d’applications complexes, suffisamment flexibles pour prendre en compte des besoins opérationnels variables.