Les bonnes pratiques DevOps, le chemin vers un numérique plus vert

Teo Burucoa
neoxia
7 min readNov 23, 2023

--

Aujourd’hui, l’usage d’application est un besoin dont on ne peut plus se passer. Leur hébergement s’effectue dans des datacenters avec énormément de machines, ce qui permet de pouvoir s’approprier beaucoup de ressources afin d’avoir des applications fiables, robustes et performantes.

En revanche, ce mode de fonctionnement révèle un souci critique :
par peur d’avoir une application qui ne résiste pas au nombre de connexions, il est courant d’allouer plus de ressources que nécessaire et donc de consommer de l’énergie qui n’est pas nécessaire au bon fonctionnement. Cet abus dans l’utilisation des ressources mène à un coût supérieur mais surtout à une perte d’énergie évitable.

À titre d’exemple, d’après une étude menée par Datadog, un grand nombre de conteneurs utilisent une partie minime des ressources qui leur sont dédiées :

L’objectif de cet article est de présenter brièvement des outils simples d’utilisation qui permettent de diminuer efficacement le gaspillage d’énergie tout en diminuant les coûts au niveau de l’infrastructure.
Les 3 outils présentés dans cet article, ainsi que leur utilité sont listés ci-dessous :

1- Réduire la durée durant laquelle une machine est allumée

Il est inutile de gaspiller de l’énergie sur une période où la solution est nulle d’usage. La première solution présentée vise à traiter ce sujet là avec des solutions managées par AWS et GCP qui permettent de gérer la durée de fonctionnement des machines.
Cette approche est d’autant plus efficace au niveau FinOps et GreenOps lors de l’usage d’environnements de dev qui nécessitent une multiplication du nombre de machines et des ressources utilisées.

Afin de diminuer l’énergie consommée ainsi que les coûts, des outils simples d’usage ont été mis en place par les Cloud Providers.
Dans le cadre d’un projet avec différents environnements, il est courant de réduire la période de fonctionnement des environnements de test aux horaires de l’entreprise :

Voici une solution pour chacun des 2 Cloud Providers les plus utilisés à ce jour : AWS et GCP.

  • Solution AWS :
    Amazon Web Services a mis en place une solution simple qui permet de résoudre la problématique mentionnée pour les instances EC2 et RDS : Instance-scheduler.
    Instance scheduler est une solution déjà implémentée par AWS, sa mise en place nécessite uniquement la spécification de certaines informations comme notamment la période durant laquelle les instances doivent être arrêtées. Une notice d’implémentation détaillée est fournie par AWS.
    Il est à noter que l’usage de cette fonctionnalité a un coût, bien que très faible. Le coût, qui est aux alentours de 5$/mois en moyenne, sera très certainement amorti avec un usage convenable de l’outil.
  • Solution GCP :
    Google Cloud Platform propose une solution qui est directement intégrée au service Compute Engine. L’intégration de cette fonctionnalité au sein du service permet une implémentation extrêmement simple de l’automatisation de l’arrêt et du redémarrage des machines virtuelles.
    Les données à fournir à la solution sont très similaires à celles à fournir à Instance Scheduler sur AWS et sont énumérées dans la documentation de GCP.

Les outils présentés dans cette partie permettent de réduire la consommation d’une application dans le temps.
Les deux outils suivants ont quant à eux pour utilité de réduire la consommation en énergie durant la période de fonctionnement de l’application.

2- SlimToolkit ou Slim

Slim est un outil permettant d’analyser les images Docker, puis d’en réduire la taille si désiré. Cette solution open source s’utilise via une ligne de commande et dispose de plusieurs fonctionnalités dont la principale est la réduction de la taille des images.

Une image permet de regrouper une application ainsi que toutes ses dépendances à l’intérieur d’un unique fichier compilé. Ce fichier pourra ensuite être lancé depuis différentes machines à l’intérieur d’un conteneur.
L’utilisation de cette technologie permet d’éliminer les classiques
mais ça marche sur mon poste”.
Docker est l’outil de conteneurisation le plus connu et le plus répandu.

Il est courant, lors de la création d’applications, d’utiliser des images créées au préalable comme base. Bien que celles-ci permettent le bon fonctionnement de l’application, leur taille peut généralement être drastiquement réduite, jusqu’à un facteur 30 d’après la documentation de SlimToolkit, en maintenant une image fonctionnelle.

Son côté pratique réside dans le fait que la création de l’application n’est pas influencée par l’usage de Slim, aucun élément n’est à modifier pour permettre à Slim de diminuer le volume de l’image.

Voici l’exemple d’une nouvelle image créée à l’aide de Slim, sa taille a été réduite d’un tiers sans effort supplémentaire.
L’application fonctionne tout aussi bien suite à l’usage de SlimToolkit, ce qui signifie que les éléments supprimés n’étaient pas nécessaires.

La réduction de la taille d’images complexes via SlimToolkit est toutefois à prendre avec précaution et nécessite toujours une vérification du fonctionnement de l’application.

Optimiser la taille de l’image contenant l’application est un très bon début, mais cette amélioration est vouée à être plus poussée lorsqu’un orchestrateur de conteneur tel que Kubernetes est utilisé. En effet, réduire la taille de l’image est cohérent uniquement lorsque les ressources utilisées sont également réduites.

3- Robusta KRR

Robusta KRR (Kubernetes Resource Recommender) est un outil Open Source qui s’utilise en ligne de commande, qui donne des recommandations sur les ressources à allouer aux composants dans un cluster Kubernetes.
L’usage de cet outil ne va pas directement réduire la consommation du cluster. En revanche, il permettra par la suite de modifier les ressources requises ainsi que les ressources maximum pour chaque composant de Kubernetes.

L’orchestration de conteneurs est utilisée pour une meilleure planification et exécution des conteneurs et est généralement choisie pour des projets assez volumineux.
Kubernetes est un outil CNCF (Cloud Native Computing Foundation) et est l’orchestrateur de conteneurs le plus répandu à ce jour. Son utilisation repose sur la description des états voulus pour chaque composant et nécessite donc de préciser les ressources qui devront être allouées aux composants du projet.

Les conseils apportés par Robusta KRR peuvent être récupérés en fichiers yaml/json ou alors directement sous forme de tableau dans un terminal.
Un avantage non négligeable de cet outil est qu’il ne nécessite pas d’agent à installer dans le cluster, il n’y a donc aucune modification à apporter à l’architecture déjà existante puisque cet outil peut être lancé depuis une machine locale.

Voici un exemple de résultat obtenu, sous forme de tableau dans le terminal, lors de l’usage de Robusta KRR via une simple ligne de commande :

Dans l’exemple ci-dessus (fourni par Robusta KRR), les améliorations conseillées sont affichées en rouge. Des améliorations au niveau de l’usage du CPU et de la mémoire sont observables. Il est à noter que les économies qui peuvent potentiellement être faites sont multipliées par le nombre de pods qui sont impliqués par l’optimisation.

Pour clore la présentation de cet outil, il est primordial de mentionner que Robusta KRR est un outil récent qui va proposer de nombreuses améliorations dans les jours à venir. Il est par exemple question de proposer des recommandations qui vont au-delà de l’usage de la mémoire et du processeur, comme par exemple la configuration des HPA (Horizontal Pod Autoscaler) ou encore la mise à disposition de graphiques afin d’avoir un meilleur aperçu des recommandations apportées.

Conclusion

Cet article a pour vocation de montrer que de nombreux outils existent afin d’avoir une utilisation optimale des ressources. Cette liste n’est pas exhaustive et énumère des outils efficaces et simples à mettre en place.
Il est également à noter que quelques concepts clés du Cloud sont eux nativement voués à améliorer l’usage des ressources. L’élasticité du cloud par exemple, permet d’adapter le nombre de ressources utilisées à l’usage nécessaire à une bonne exécution.
Enfin, l’emploi de bonnes pratiques DevOps lors de la gestion de l’infrastructure reste la manière la plus fiable de réduire l’empreinte carbone tout en réduisant les coûts.

N’hésitez pas à partager cet article si le contenu vous a semblé intéressant et à faire part de vos remarques en commentaire.

--

--