Les principes du Gitops

By Denis Fabien
2023-01-06

Ami de l'Infrastructure As Code (IaC) voici une option pour vous !

Le GitOps, à quoi ça sert ?

Généralités

Le GitOps est une méthodologie d'Infrastructure As Code (IaC), basée sur des workflows et pipelines qui permettent de gérer les infrastructures et/ou les applications à partir d'un repository Git.

La particularité de GitOps est que Git devient la source de vérité, le point central de toute votre orchestration. C'est ensuite une série de pipelines qui, depuis cette source de vérité, va générer du code et l'exécuter afin de configurer la cible.

À quoi cela peut s'appliquer

Les principes du GitOps peuvent s'appliquer à de nombreuses situations, mais il faut retenir que cette méthodologie est très puissante si elle sert à déployer une configuration particulièrement complexe et/ou variée.

Exemple d'un Active Directory

Traditionnellement, la gestion des groupes dans un AD se fait par un ITSM, qui va donc offrir des processus d'approbation. Cependant, sur le terrain, cette mise en place peut s'avérer parfois complexe vu les lourdeurs administratives dans certaines compagnies.

C'est là que le GitOps peut intervenir.

En mode GitOps, on va mettre en place un repo Git qui va contenir tous les groupes, membres et admin. Ce repo aura un git flow standard avec des approbateurs et ainsi, à chaque approbation d'un Pull Request, un pipeline va demarrer pour appliquer les changements dans l'AD.

Exemple avec la transformation Agile dans une entreprise : guichet de service as Code

De manière générale, les équipes TI sont organisées dans une structure basée sur un regroupement de compétences. Les sysadmin ensembles, les dba ensembles et ainsi de suite.

Hors, avec la transformation agile, les équipes vont être organisées en mode produit. 

Si cette nouvelle organisation n'est pas appuyée par des outils adaptés, la gestion peut vite devenir excessivement complexe.

En mode GitOps, il est alors possible pour chaque produit d'avoir une source de vérité Git. Chaque nouveau client d'un service pourra alors mettre à jour un repo Git pour pouvoir y accéder. 

Le GitOps versus le DevOps, comment ça fonctionne ?

Dans un article précédent (https://changendevops.com/fr/articles/devops-monitoring), je vous ai expliqué pourquoi, selon moi, le DevOps moderne devrait être simplifié et ramené à 5 étapes.

Sur cette base, le GitOps vient encore plus naturellement se coller sur le modèle DevOps.

Le modèle DevOps dans le cadre du GitOps

Yaml preparation

Cette étape consiste simplement à écrire les changements dans un fichier YAML.

Yaml Linter, Code generation and Test

3 étapes en une :

  • Yaml linter : qui confirme qu'il n'y pas d'erreur de syntaxe ;
  • Code generation : transformer automatiquement le Yaml en code qui pourra être appliqué ;
  • Test : valider que le code généré automatiquement est bien fonctionnel. 

Deploy Code

Le code généré doit être déployé "quelque part" pour pouvoir par la suite être appliqué. C'est lors de cette étape que cela va être fait. Souvent, il va être déployé dans une branche git prévue à cet effet.

Apply generated code

Si le code est déployé sur une branche, un pipeline va démarrer pour éxécuter le code et faire en sorte que la configuration souhaitée devienne réalité.

Verify process

De façon manuelle ou automatisée, on s'assure que ce qui devait être livré est bien livré. 

Quels sont les avantages du GitOps

  • Assurer une consistance des configurations dans le temps.
  • Conserver en tout temps une traçabilité de tous les changements (pour la securité ou l'exploitation).
  • Permettre l'implémentation des concepts DevOps pour de la livraison d'infrastructure (Test, monitoring entre autre).
  • Permettre la mise en place d'une couche d'abstraction entre la configuration souhaitée et sa mise en place
    • Le niveau de connaissance requis pour configurer un outil est plus faible :
      • on cherche à ce que la simplification permette de supporter 80% des activités laissant seulement les 20% plus complexes à de la gestion plus manuelle. 
    • Le build étant automatisé, on devient indépendant de la technologie de déploiement :
      • les mises à jour sont simplifiées
      • le changement vers une autre technologie est largement simplifié

 

Maintenant, un exemple concret de pipeline GitOps

Intégration avec Terraform pour appliquer le code

Dans l'exemple ci-dessous, à partir d'un repo YAML, on va générer du code terraform qui va appliquer une configuration sur un "product"

Voilà, maintenant à vous de jouer !

Ami du IaC, vous n'avez plus aucune raison de ne pas commencer avec un petit pipeline GitOps.