Comme la majorité des secteurs d’activités, le monde du numérique s’inquiète de plus en plus de son empreinte carbone. Les experts du secteur sont constamment à la recherche de nouvelles technologies et bonnes pratiques pour réduire la pollution et la consommation énergétique liées à leurs activités.
Comment peut-on rendre le monde numérique plus vert ? Voici où Kubernetes intervient.
Pour une maitrise complète de l’outil, suivez notre formation Kubernetes. Il s’agit d’une formation complète sur 3 jours lors de laquelle vous apprendrez à automatiser le déploiement, la mise à l’échelle et la gestion d’applications de manière conteneurisée.
Si vous êtes déjà expert de l’outil, la formation Kubernetes avancé vous apprendra à faire évoluer vos applications vers le standard micro-service, modulaire et scalable.
L’équipe Ambient IT
Article écrit par Fabrice Jammes Expert Kubernetes, Ingénieur au CNRS et Formateur chez Ambient IT.
Les conteneurs Linux
Simplicité d’installation d’applications sur un même serveur
Les conteneurs Linux simplifient l’installation d’applications différentes sur une même machine
grâce à plusieurs mécanismes :
- Isolation : les conteneurs Linux utilisent des technologies telles que les espaces de noms (namespaces) et le contrôle des ressources (cgroups) pour créer des environnements isolés appelés conteneurs. Chaque conteneur fonctionne de manière indépendante des autres, ce qui signifie que les applications et les dépendances qu’ils contiennent sont isolées du système hôte et des autres conteneurs. Ainsi, vous pouvez installer différentes applications dans des conteneurs distincts sans qu’elles entrent en conflit les unes avec les autres.
- Portabilité : les conteneurs Linux encapsulent une application et toutes ses dépendances dans un package autonome. Cela signifie que vous pouvez créer un conteneur avec toutes les bibliothèques et les outils nécessaires pour exécuter une application spécifique, puis le déplacer et le déployer sur n’importe quelle machine Linux compatible avec les conteneurs. Cela facilite grandement le déploiement d’applications sur différentes machines, car vous n’avez pas à vous soucier des incompatibilités de dépendances ou de configurations système spécifiques.
- Répétabilité : les conteneurs Linux utilisent des fichiers de configuration appelés fichiers Dockerfile (dans le cas de Docker) ou des fichiers de description similaires pour définir l’environnement et les dépendances nécessaires pour une application donnée. Ces fichiers peuvent être versionnés et partagés, garantissant ainsi une installation cohérente de l’application sur différentes machines.
Il est également possible de partager des images de conteneurs préconstruites via des registres d’images, ce qui permet de gagner du temps lors du déploiement et de s’assurer que toutes les instances utilisent la même version de l’application.
En résumé, les conteneurs Linux simplifient l’installation d’applications différentes sur une même machine en fournissant une isolation, une portabilité et une répétabilité. Cela permet de résoudre les problèmes liés aux conflits de dépendances, aux configurations système spécifiques et aux problèmes de compatibilité, tout en facilitant le déploiement et la gestion des applications sur des machines différentes.
Mutualisation efficace des ressources CPU et mémoire d’un même serveur
Les conteneurs Linux permettent de mutualiser les ressources d’un serveur de plusieurs manières :
Utilisation efficace des ressources : les conteneurs Linux utilisent la technologie de virtualisation légère pour partager le noyau de l’OS hôte entre les conteneurs. Cela signifie que les conteneurs n’ont pas besoin de démarrer un système d’exploitation complet, ce qui réduit considérablement la surcharge en termes de mémoire et de puissance de calcul par rapport à des machines virtuelles classiques. Par conséquent, davantage de ressources sont disponibles pour les applications elles-mêmes, ce qui permet d’utiliser les ressources du serveur de manière plus efficace qu’avec les machines virtuelles.
Isolation des ressources : les conteneurs Linux utilisent des mécanismes d’isolation tels que les cgroups (control groups) pour allouer et limiter les ressources aux conteneurs. Cela permet de définir des limites strictes sur la quantité de CPU, de mémoire, de stockage et de bande passante réseau qu’un conteneur peut utiliser. En définissant ces limites, les ressources du serveur peuvent être équitablement partagées entre les différents conteneurs, évitant ainsi la situation où une application monopolise toutes les ressources et affecte les autres.
Par exemple, si deux applications s’exécutent dans leurs conteneurs respectifs A et B sur un serveur ayant 16 processeurs, elles peuvent toutes les deux accéder à l’ensemble des processeurs. Ainsi l’application B peut utiliser l’ensemble des processeurs si A ne les utilise pas. Afin de pallier à un éventuel conflit de ressources entre ces deux applications, la conteneurisation permet de garantir la priorité d’accès aux processus par application. Ainsi, il est facile de paramétrer le conteneur A afin qu’il garantisse l’accès aux 16 CPU à l’application A dès que celle-ci en aura
besoin. Bien entendu, cela ce fait au détriment de B, qui ne pourra utiliser les CPU que si A n’en a pas besoin.
En simplifiant, la conteneurisation permet d’exécuter une application prioritaire A sur un serveur, tout en laissant la possibilité à d’autres applications d’utiliser le serveur à condition que A n’utilise que peu de ressources machine.
Passage à l’échelle avec Kubernetes
Les conteneurs Linux peuvent être facilement mis à l’échelle dynamiquement sur des grappes de serveurs afin de répondre aux demandes fluctuantes de ressources. Ainsi, grâce à des outils d’orchestration de conteneurs tels que Kubernetes, les conteneurs d’une même application peuvent automatiquement être clonés et déployés sur plusieurs machines à la fois. Le nombre de clones peut être réduit automatiquement si l’application n’est que faiblement utilisée. En conséquence, il est possible de répartir la charge de manière équilibrée sur les serveurs disponibles et d’exploiter efficacement les ressources de l’ensemble du cluster.
Gestion centralisée : les conteneurs Linux peuvent être gérés et orchestrés de manière centralisée à l’aide d’outils tels que Kubernetes. Cet outil offre des fonctionnalités telles que la planification automatique des conteneurs sur les serveurs et la surveillance globale des serveurs (performance, consommation CPU, mémoire).
Grâce à une gestion centralisée, les ressources des serveurs peuvent être optimisées et ajustées en fonction des besoins des applications, permettant ainsi une meilleure utilisation des ressources disponibles.
Cette gestion centralisée laisse également entrevoir la possibilité de superviser les coûts des machines, leurs consommations électriques des machines ainsi que leurs émissions carbone. C’est l’objectif de la solution libre KubeCost.
Par ailleurs, l’application Kube-Green permet, quant à elle, de détruire les conteneurs des applications qui ne sont pas utilisées à certains horaires.
Enfin, certaines distributions Kubernetes permettent d’enlever automatique du cluster Kubernetes les serveurs de l’infrastructure qui sont sous-utilisés. Ces serveurs peuvent alors être éteints ou utilisés à d’autres fins. L’efficacité de cette technique est corrélée à la masse critique de l’infrastructure.
Possibilité de déplacer l’application à chaud
Kubernetes permet de gérer des serveurs situés dans différentes parties de la planète sur un même cluster. Des pistes exploratoires étudient comment Kubernetes pourrait déplacer automatiquement et en temps réel les applications en fonction des émissions carbones des différents centres de données composant le cluster.
L’idée est ici de déplacer les applications en fonction du type d’électricité utilisé par les serveurs. Par exemple, Kubernetes pourrait déplacer en temps réel les applications sur des serveurs alimentés par des énergies renouvelables. Afin d’être rigoureux, il faudrait tout de même prendre en compte l’impact des flux réseaux entre l’utilisateur final et le cluster Kubernetes. Par exemple, il ne serait pas forcément judicieux de déplacer un serveur de diffusion de vidéo de l’Allemagne à l’Australie s’il est majoritairement utilisé par des Français. Cela est valable même si les serveurs australiens sont alimentés par de l’électricité verte et ceux des Allemands par des centrales au gaz.
En effet, l’impact des routeurs entre le serveur de diffusion vidéo et les utilisateurs finaux pourrait annuler, ou même empirer le bénéfice d’utiliser de l’électricité verte. Cette approche reste tout de même une piste intéressante.
Pour plus d’informations, il est possible de se reporter à :
- https://ceur-ws.org/Vol-2382/ICT4S2019_paper_28.pdf
- https://devblogs.microsoft.com/sustainable-software/carbon-aware-kubernetes/
- https://www.thegreenwebfoundation.org/news/carbon-aware-scheduling-on-nomad-and-kubernetes/
Le problème de l’effet rebond
Kubernetes est conçu pour optimiser l’utilisation des ressources et améliorer l’efficacité des opérations.
L’utilisation de Kubernetes peut contribuer à une meilleure gestion de la consommation d’énergie des serveurs grâce à ses fonctionnalités d’équilibrage de charge, de gestion des ressources et d’évolutivité automatique. En répartissant la charge de travail sur différents nœuds du cluster de manière équilibrée, Kubernetes peut réduire la surcharge des nœuds individuels et optimiser l’utilisation des ressources disponibles.
Cependant, il est possible que l’ajout de nouveaux clusters et d’applications dans un environnement Kubernetes puisse indirectement augmenter la consommation d’énergie si les ressources sont surprovisionnées ou si la demande réelle n’est pas prise en compte correctement. Voici quelques moyens d’éviter ce phénomène :
- Planification des ressources : une planification précise est essentielle pour éviter de provisionner trop de ressources. Il est important d’analyser les besoins réels des applications et de définir des limites et des garanties de ressources appropriées pour chaque conteneur. Cela permettra d’allouer les ressources de manière plus précise et d’éviter un gaspillage inutile.
- Surveillance et ajustement : la surveillance continue des performances et de l’utilisation des ressources dans l’environnement Kubernetes permet de détecter les problèmes de surutilisation ou de sous-utilisation des ressources. En surveillant les métriques clés, il est possible d’identifier les goulets d’étranglement et d’optimiser l’utilisation des ressources pour réduire la consommation d’énergie.
- Mise à l’échelle automatique bien configurée : l’utilisation judicieuse des fonctionnalités de mise à
l’échelle automatique de Kubernetes peut aider à ajuster dynamiquement le nombre de clones de
conteneurs en fonction de la charge. Une configuration fine de cette mise à l’échelle automatique
permettra d’éviter les variations excessives du nombre de conteneurs en cours d’exécution, ce qui
peut entraîner des redémarrages fréquents et une consommation d’énergie supplémentaire.
- Utilisation d’outils de surveillance de la consommation d’énergie : Il existe des outils et des solutions qui permettent de surveiller spécifiquement la consommation d’énergie des serveurs. Ces outils peuvent vous aider à identifier les opportunités d’optimisation et à ajuster les configurations pour réduire la consommation d’énergie globale.
En suivant ces pratiques et en maintenant une gestion proactive de l’utilisation des ressources, il est certainement possible d’éviter les effets rebonds potentiels concernant la consommation d’énergie et de garantir une utilisation efficace des ressources des serveurs.
Conclusion
Kubernetes améliore considérablement l’utilisation des serveurs, ce qui permet de réduire l’empreinte carbone de l’infrastructure et, par conséquent, les émissions de carbone. Il permet de mutualiser efficacement les infrastructures entre des applications hétérogènes, ce qui évite l’effet silo et permet de réduire le nombre de serveurs. De plus, Kubernetes offre une gestion et une supervision centralisée des serveurs, qui permet d’effectuer des actions d’économie d’énergie à grande échelle.
Enfin, il assure, sous certaines conditions, la portabilité des applications, cela peut permettre aux administrateurs système de déplacer dynamiquement les applications vers les centres de données émettant le moins de carbone à un instant donné.