Ce matin, le message qui arrive de la part de Sarah est plutôt enthousiaste :
On vient d’avoir un nouveau partenariat d’hébergement avec MythiCloud ! Ils nous mettent à disposition des machines avec des SSDs dernier cri ! Exactement ce qu’il nous faut pour optimiser les performances de Libra ! Il faut qu’on trouve comment positionner les services qui font du stockage sur ces machines…
Vous avez bien entendu déjà la réponse à sa question : c’est l’heure d’optimiser la topologie de notre infrastructure conteneurisée !
Utilisez au mieux les ressources techniques à votre disposition
Dans une infrastructure Docker Swarm, vous pouvez disposer de nœuds ayant des spécialités différentes, tels que des nœuds dédiés au stockage, au calcul intensif, ou au traitement de données. Maximiser l'efficacité de votre cluster implique une bonne gestion de ces nœuds spécialisés.
On peut par exemple imaginer :
Des nœuds de stockage : Certaines machines peuvent être équipées de disques durs rapides et de grande capacité. Elles seront à privilégier pour le déploiement de services nécessitant de nombreuses opérations de lecture/écriture, comme des bases de données ou des systèmes de fichiers distribués.
Des nœuds de calcul : D’autres machines peuvent être équipées de processeurs puissants et d’une grande quantité de mémoire vive. Elles seront alors à privilégier pour déployer des services nécessitant des capacités de calcul importantes, comme le traitement de vidéos, les calculs scientifiques ou l'analyse de données.
Des nœuds spéciaux : De nouveaux types de service, comme l’intelligence artificielle ou la crypto-monnaie, peuvent nécessiter des équipements spécifiques pour être efficaces, par exemple de puissantes cartes graphiques ou des puces ASIC.
Il est donc essentiel de répartir les conteneurs en fonction de leur rôle spécifique, sur les nœuds les plus appropriés afin d'optimiser leur performance.
Outre leurs missions variées, il est également crucial de comprendre qu’un environnement conteneurisé repose fortement sur sa couche réseau, car les conteneurs communiquent entre eux par ce biais. Par conséquent, il est tout aussi important de penser à la disposition de ces conteneurs pour réduire la "distance" entre ceux qui doivent fréquemment interagir.
Fort heureusement, Docker Swarm propose un système pour permettre d’optimiser le placement de nos conteneurs : l’étiquetage des nœuds et les contraintes de placement.
Créez une stratégie d'étiquetage et de répartition des conteneurs sur le cluster
La maîtrise de l’étiquetage des nœuds et des contraintes de placement est centrale afin d’optimiser au mieux les temps de communication entre vos conteneurs amenés à communiquer régulièrement.
Dans le cadre de l’application Libra par exemple, il serait opportun de positionner les conteneurs applicatifs et les serveurs de stockage de fichier proches les uns des autres afin d’améliorer le temps de réactivité de l’application.
Découvrons ensemble comment mettre en place concrètement ce type de stratégie d’optimisation.
Dans cette vidéo, nous avons vu :
Comment associer des étiquettes aux différents nœuds qui constituent notre cluster Docker Swarm, notamment ;
Comment créer des contraintes de placement sur les services de notre stack Docker Swarm afin de positionner les conteneurs sur les nœuds correspondant à ces contraintes ;
Comment appliquer nos modifications sur la stack Docker Swarm et comment visualiser l’évolution de la topologie de notre cluster répondant à l’application de ces contraintes.
Pour bien maîtriser le placement des conteneurs au sein du cluster, il est essentiel de comprendre la couche d’abstraction réseau de Docker Swarm. Cela permet d'exploiter pleinement la puissance de la plateforme.
Maîtrisez le “network mesh” Docker
Comme nous l’avons rapidement vu dans le chapitre d’introduction de Docker Swarm, le "network mesh" de celui-ci permet une communication transparente entre les services déployés sur différents nœuds du cluster. Il s'agit d'un réseau virtuel qui interconnecte tous les conteneurs de services, permettant à chacun d'eux de communiquer avec les autres sans nécessiter de configuration réseau complexe.
Pour rappel, le “network mesh” de Docker Swarm propose plusieurs fonctionnalités avancées :
Overlay Network : il utilise des réseaux de superposition (overlay networks) pour permettre la communication entre les conteneurs sur différents hôtes. Ces réseaux sont créés automatiquement par Docker Swarm et s'étendent sur tous les nœuds du cluster.
Service Discovery : il intègre un système de découverte de services qui permet aux conteneurs de trouver et de communiquer avec d'autres services par leur nom. Par exemple, un service nommé webapp peut être accessible via webapp dans l’overlay network.
Load Balancing : il inclut un équilibrage de charge intégré qui distribue automatiquement le trafic entre les instances d'un service. Autrement dit, si vous avez plusieurs replicas du même service, les communications réseaux seront automatiquement réparties entre ces différentes instances par le network mesh.
Découvrons ensemble le fonctionnement de ces fonctionnalités avancées dans cette vidéo :
Dans cette vidéo, nous avons vu :
Le mécanisme de “service discovery” et la répartition de charge automatisée sur plusieurs réplicas d’un même service.
La publication d’un port d’un service afin qu’il soit accessible à l'extérieur du “network mesh”.
À vous de jouer
Contexte
Dans ce dernier exercice, vous visez à mettre en place les étiquettes et les contraintes de placement des conteneurs des différents services constituant l’application Libra afin d’optimiser l’usage des machines virtuelles utilisées comme nœuds pour votre cluster Docker Swarm.
Consignes
Démarrez l’environnement virtualisé mis à disposition afin de simuler le cluster Docker Swarm hébergeant la stack Libra.
Créez les étiquettes sur les différents nœuds afin d’identifier les nœuds de stockage et les nœuds de calcul.
Modifiez le fichier
docker-compose.yml
afin d’exploiter ces nouvelles étiquettes et positionner les conteneurs sur les nœuds adaptés à leurs différents rôles.Modifiez le fichier
docker-compose.yml
afin de publier le port de l’application Libra afin que celle-ci soit accessible depuis l’extérieur.
En résumé
Il est essentiel de comprendre l'utilisation des réseaux de superposition (overlay networks) pour permettre une communication transparente et fiable entre les services déployés sur différents nœuds du cluster.
Utilisez les mécanismes intégrés de découverte de services et d'équilibrage de charge pour simplifier la communication et la répartition du trafic entre les instances de service.
Savoir publier des ports est crucial pour exposer vos services au monde extérieur.
Nous arrivons ainsi à la fin de ce cours de découverte de Docker. J’espère que celui-ci vous aura permis d’obtenir une bonne vision d’ensemble de cette technologie aujourd’hui devenue incontournable. Il vous reste encore beaucoup de choses à apprendre, mais j’espère qu’avec ces éléments, vous aurez déjà des bases solides qui vous permettront d’envisager sereinement le déploiement d’une application conteneurisée ! Avant de nous quitter, je vous invite à clôturer ce cours par le quiz juste après.