DevOps : Introduction au GitOps dans un contexte conteneurisé avec l’outil ArgoCD
2023-03-01
Lors d’un Meetup® organisé par nos Communautés Métiers, l’un de nos consultants a souhaité nous faire partager son expertise sur le DevOps et plus précisément sur l’approche GitOps avec ArgoCD.
La démarche DevOps a plusieurs objectifs : répondre à un manque de productivité dans le monde du développement de logiciel et améliorer la communication entre les équipes. Pour optimiser et compléter le DevOps, des outils et des méthodologies ont été créés comme le GitOps.
Le GitOps en quelques mots ?
Dans un premier temps, découvrons Git. Il s’agit à la fois :
- d’un gestionnaire de code qui constitue une source de vérité unique avec laquelle tout le monde interagit.
- d’un répertoire avec une historisation des changements.
- d’un système en mécanique de branches qui permet de faire des évolutions en parallèle et des modifications en limitant les risques de dégradations.
Ensuite il y a GitOps, méthodologie liée aux IaC(1) (Infrastructure as Code), qui définit un ensemble de pratiques et de règles permettant de gérer une infrastructure en se reposant sur l'utilisation de Git. L’infrastructure as Code est une façon de créer son infrastructure de manière déclarative. En effet, l’IaC permet de déclarer les ressources avec un format standard (JSON ou YAML) que l’on souhaite afin que l’outil fasse le nécessaire pour instancier les ressources.
Le point clé est que Git est utilisé comme unique source de vérité pour la définition de l'infrastructure. Le déploiement se fait uniquement en mode « pull » (récupération depuis Git).
En somme, GitOps découle de l’évolution des méthodes et des outils (conteneurisation, environnements cloud, …) lié aux laC, en profitant des capacités de Git (variabilisation, historique,…).
Les avantages de l'approche GitOps
L’approche Gitops permet d’avoir une gestion multi-environnement simplifiée via l'arborescence du répertoire Git ou des branches. Les branches représentent une alternative de la base du code.
Dans un second temps, GitOps permet de gagner en visibilité et de simplifier le partage des connaissances grâce au répertoire unique de Git qui centralise les informations.
Enfin, nous pouvons utiliser GIT pour la gestion des backup, de l’historique et des rollback.
Cependant, tous les projets ne sont pas compatibles avec cette approche, surtout les projets avec un fort historique (ancienne méthodologie, grosse application ou monolithique). Il est difficile de séparer des composants quand tout est mélangé et compliqué de faire une Infrastructure as Code avec les anciennes méthodologies.
GitOps dans un contexte conteneurisé : rappel sur les conteneurs et kubernetes
Docker (outil de conteneurisation) est un moyen de créer des applications dans un contexte isolé, minimaliste et clé en main. A partir d'un moule préprogrammé qu'on appellera image (contenant des dépendances, des fichiers de configurations, etc.), il va être possible de créer des conteneurs de façon illimitée en fonction du besoin.
Kubernetes est une surcouche qui propose un ensemble de ressources définissable dans des fichiers Yaml. Kubernetes est déclaratif : il intègre la configuration décrivant l'état souhaité pour les images docker et fait le nécessaire pour atteindre cet état. (vérifier si Docker prend une majuscule)
Par ailleurs, Kubernetes met à disposition des éléments dont deux sont à retenir pour cette introduction :
- les « deployment » qui sont des fichiers définissants quelles images doivent être instanciées ainsi que les les configurations de base (réplication, variables, …),
- les namespaces qui sont des clusters virtuels pour isoler les ressources.
Kubernetes installé : il est possible d’utiliser ArgoCD
Il est possible de faire du GitOps dans d’autres contextes (Virtualisation via des VM, infrastructure de services sur des clouds publiques…) mais nous allons nous intéresser particulièrement au GitOps dans un contexte conteneurisé.
L'objectif d'ArgoCD : faire de la CD dans le cas spécifique des conteneurs et de kubernetes. La CD correspond au déploiement continu, c’est à dire qu’une fois que la phase de test est réalisée, l’application sera déployée sur le serveur de production.
L’utilisation d’ArgoCD permet de bénéficier d’une multitude d’avantages :
- Une synchronisation automatique des ressources pour passer en CD sur kubernetes.
- Signalement des dérives éventuelles par rapport au répertoire Git.
- Une consommation des ressources Kubernetes natives, kustomize ou Helm.
- Une centralisation des projets au même endroit.
- Posséder une API (application programming interface) sous forme d'une CLI et REST
- Permet de faire une surcouche de gestion de droit sur le(s) cluster(s) kube.
- IHM (interface home machine) avec une vue par application et pas par type de composant K8s (contrairement à la commande kubectl qui peut être un peu dissuasive pour un débutant).
Conclusion
En somme, l’approche GitOps n’est pas révolutionnaire mais avec l’arrivée des outils d'infrastructure (cloud ou conteneurisé comme ArgoCD), cette dernière va être amenée à se développer et à se démocratiser. Rémy, Expert DevOps chez Extia.
Vous souhaitez voir une démonstration pour en savoir plus ? Découvrez le replay complet sur l’approche GitOps dans un contexte conteneurisé avec l’outil ArgoCD (théorique plus démonstration pratique).
Retrouvez toute l'actualité, les événements et les replays de nos Comet' by Extia sur Twitter et sur LinkedIn. : https://openclassrooms.com/fr/courses/6093671-decouvrez-la-methodologie-devops/6183233-decouvrez-les-origines-de-la-methodologie-devops