L’écosystème Docker: Introduction aux composants communs

introduction

La conteneurisation est le processus de distribution et de déploiement des applications de manière portable et prévisible. Il y parvient en conditionnant les composants et leurs dépendances dans des environnements de processus normalisés, isolés et légers appelés conteneurs. De nombreuses organisations souhaitent désormais concevoir des applications et des services qui peuvent être facilement déployés sur des systèmes distribués, ce qui permet au système d'évoluer facilement et de survivre aux défaillances des machines et des applications. Docker, une plateforme de conteneurisation développée pour simplifier et standardiser le déploiement dans divers environnements, a largement contribué à favoriser l'adoption de ce style de conception et de gestion des services. Un grand nombre de logiciels a été créé pour exploiter cet écosystème de gestion distribuée des conteneurs.

Docker et Containerization

Docker est le logiciel de conteneurisation le plus utilisé actuellement. Bien que d'autres systèmes de conteneurisation existent, Docker simplifie la création et la gestion de conteneurs et s'intègre à de nombreux projets open source.

Docker containerization

Dans cette image, vous pouvez commencer à voir (dans une vue simplifiée) le lien entre les conteneurs et le système hôte. Les conteneurs isolent les applications individuelles et utilisent les ressources du système d'exploitation extraites par Docker. Dans la vue éclatée à droite, nous pouvons voir que les conteneurs peuvent être construits par «superposition», plusieurs conteneurs partageant des couches sous-jacentes, ce qui diminue l'utilisation des ressources.

Les principaux avantages de Docker sont:

  • Lightweight resource utilization: au lieu de virtualiser un système d'exploitation entier, les conteneurs s'isolent au niveau du processus et utilisent le noyau de l'hôte.

  • Portability: toutes les dépendances d'une application conteneurisée sont regroupées à l'intérieur du conteneur, ce qui lui permet de s'exécuter sur n'importe quel hôte Docker.

  • Predictability: 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.

En règle générale, 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 connue sous le nom d'architecture orientée service. Cela vous donne la possibilité de mettre à l'échelle ou de mettre à jour facilement des composants indépendamment à l'avenir. Cette flexibilité est l’une des nombreuses raisons pour lesquelles Docker s’intéresse au développement et au déploiement.

Pour en savoir plus sur la mise en conteneur d'applications avec Docker, cliquez surhere.

Découverte de services et magasins de configuration globale

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 afin que les conteneurs puissent découvrir l'environnement dans lequel 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 s'inscrire eux-mêmes afin que les autres outils sachent qu'ils sont disponibles. Ces outils fonctionnent également généralement en tant que magasins de configuration distribués globalement dans lesquels des paramètres de configuration arbitraires peuvent être définis pour les services opérant dans votre infrastructure.

Docker service discovery

Dans l'image ci-dessus, vous pouvez voir un exemple de flux dans lequel une application enregistre ses informations de connexion auprès du système de service de découverte. Une fois inscrites, d'autres applications peuvent interroger le service de découverte pour savoir comment se connecter à l'application.

Ces outils sont souvent implémentés sous la forme de simples magasins de valeurs-clés distribués entre les hôtes dans un environnement en cluster. Généralement, les magasins de clé-valeur fournissent une API HTTP pour accéder aux valeurs et les définir. Certaines incluent des mesures de sécurité supplémentaires telles que des entrées cryptées ou des mécanismes de contrôle d'accès. Les magasins distribués sont essentiels à la gestion des hôtes Docker en cluster, en plus de leur fonction principale consistant à fournir des détails de configuration automatique pour les nouveaux conteneurs.

Certaines des responsabilités des magasins de service découverte sont les suivantes:

  • Permettre aux applications d'obtenir les données nécessaires pour se connecter aux services dont elles dépendent.

  • Autoriser les services à enregistrer leurs informations de connexion aux fins susmentionnées.

  • Fournir un emplacement globalement accessible pour stocker des données de configuration arbitraires.

  • Stockage des 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 clé-valeur distribué globalement

  • zookeeper: découverte de service / magasin clé-valeur distribué globalement

  • crypt: projet pour crypter les entrées etcd

  • confd: surveille le magasin de valeurs-clés pour les changements et déclenche la reconfiguration des services avec de nouvelles valeurs

Pour en savoir plus sur la découverte de services avec Docker, consultez notre guidehere.

Outils de mise en réseau

Les applications conteneurisées se prêtent à une conception orientée service qui encourage la décomposition de la fonctionnalité en composants discrets. Bien que cela facilite la gestion et la mise à l'échelle, cela nécessite encore plus d'assurance en ce qui concerne la fonctionnalité et la fiabilité de la mise en réseau des composants. Docker lui-même fournit les structures réseau de base nécessaires aux communications entre conteneurs et entre hôtes.

Les capacités réseau natives de Docker fournissent deux mécanismes pour lier des conteneurs ensemble. La première consiste à exposer les ports d’un conteneur et éventuellement à mapper vers le système hôte pour un routage externe. Vous pouvez sélectionner le port hôte sur lequel mapper ou autoriser Docker à choisir de manière aléatoire un port haut non utilisé. Il s'agit d'un moyen générique de fournir l'accès à un conteneur qui fonctionne bien dans la plupart des cas.

L'autre méthode consiste à permettre aux conteneurs de communiquer en utilisant les «liens» de Docker. Un conteneur lié obtiendra des informations de connexion sur son homologue, ce qui lui permettra de se connecter automatiquement s'il est configuré pour prêter attention à ces variables. Cela permet d'établir un contact entre les conteneurs d'un même hôte sans avoir à connaître à l'avance le port ou l'adresse où le service sera situé.

Ce niveau de réseau de base convient aux environnements à hôte unique ou étroitement gérés. Cependant, l'écosystème Docker a produit une variété de projets qui visent à étendre la fonctionnalité de mise en réseau disponible pour les opérateurs et les développeurs. Parmi les autres fonctionnalités réseau disponibles via des outils supplémentaires, citons:

  • Superposition du réseau pour simplifier et unifier l'espace d'adressage sur plusieurs hôtes.

  • Réseaux privés virtuels adaptés pour assurer une communication sécurisée entre divers composants.

  • Affectation de sous-réseaux par hôte ou par application

  • Etablir des interfaces macvlan pour la communication

  • Configuration d'adresses MAC personnalisées, passerelles, etc. pour vos containers

Certains projets visant à améliorer la mise en réseau de Docker sont les suivants:

  • flannel: Réseau de superposition fournissant à chaque hôte un sous-réseau distinct.

  • weave: Réseau de superposition représentant tous les conteneurs sur un seul réseau.

  • pipework: boîte à outils de mise en réseau avancée pour les configurations de mise en réseau arbitrairement avancées.

Pour un aperçu plus détaillé des différentes approches de mise en réseau avec Docker, cliquez surhere.

Planification, gestion de 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.

Schedule applications

L'image ci-dessus illustre une décision de planification simplifiée. La demande est donnée 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. Dans cet exemple, il extrait des informations sur la densité de conteneurs d'un service de stockage / découverte de données distribué (comme indiqué ci-dessus) afin de pouvoir placer la nouvelle application sur l'hôte le moins occupé.

Ce processus de sélection d’hôte est l’une des responsabilités principales du planificateur. Habituellement, certaines fonctions 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 comme un autre conteneur donné.

  • Assurez-vous que le conteneur n'est pas placé 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.

Le planificateur est responsable du chargement des conteneurs sur les hôtes pertinents et du démarrage, de l’arrêt et de la gestion du cycle de vie du processus.

É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. Celles-ci permettent au planificateur d'obtenir des informations sur les membres et d'effectuer des tâches d'administration. Dans ce contexte, l'orchestration fait généralement référence à la combinaison de la planification des conteneurs et de la gestion des hôtes.

Certains projets populaires fonctionnant comme des ordonnanceurs et des outils de gestion de flotte sont:

  • fleet: planificateur et outil de gestion de cluster.

  • marathon: planificateur et outil de gestion des services.

  • Swarm: planificateur et outil de gestion des services.

  • mesos: service d'abstraction d'hôte qui consolide les ressources d'hôte pour le planificateur.

  • kubernetes: planificateur avancé capable de gérer des groupes de conteneurs.

  • compose: outil d'orchestration de conteneurs pour la création de groupes de conteneurs.

Pour en savoir plus sur la planification de base, le regroupement de conteneurs et le logiciel de gestion de cluster pour Docker, cliquez surhere.

Conclusion

A présent, vous devez être familiarisé avec la fonction générale de la plupart des logiciels associés à l'écosystème Docker. Docker lui-même, ainsi que tous les projets associés, fournit une stratégie de gestion, de conception et de déploiement de logiciel permettant une évolutivité massive. En comprenant et en exploitant les capacités de divers projets, vous pouvez exécuter des déploiements d'applications complexes suffisamment souples pour prendre en compte des exigences d'exploitation variables.