Qu’est-ce que GitOps ?
GitOps, est un ensemble de pratiques de gestion de l’infrastructure et de configurations d’applications qui reposent sur l’utilisation de Git.
Git est un logiciel de gestion de versions décentralisé. GitLab est lui une plateforme de gestion de répertoire Git, mais pas que. Il est également beaucoup utilisé pour le processus de développement de logiciels. Il inclut beaucoup de fonctionnalités de gestion de projet, de validation et d’automatisation. Chez A5sys ce sont deux outils que nous utilisons au quotidien : Git et GitLab.
GitOps est un processus qui permet d’optimiser, fluidifier et sécuriser les mises en production grâce à un système de gestion de versions et de pipelines. Les pipelines sont des séries d’actions réalisées souvent automatiquement. Celles-ci permettent de :
- Vérifier le code du logiciel comme le formatage du code et les erreurs détectables ;
- Tester le logiciel, comme des tests unitaires ou d’intégration ;
- Déployer le logiciel.
De plus, GitOps permet d’utiliser les outils Infrastructure as Code pour effectuer toute mise à jour de l’infrastructure via Git. L’Infrastructure as Code est un ensemble de mécanismes permettant de gérer, par des fichiers descripteurs ou des scripts, une infrastructure virtuelle, comme des fichiers JSON ou YAML par exemple. Elle permet la gestion des :
- Machines virtuelles ;
- Réseaux et sous-réseaux ;
- Services DNS ;
- Groupes de sécurités ;
- Etc…
Comment fonctionne GitOps ?
La première étape est réalisée par les équipes de développeurs. Ils poussent une configuration sur un répertoire Git.
A la suite, une pipeline est exécutée par un outil comme GitLab de façon manuelle ou automatisée, via la détection de changements.
Puis, un programme vient exécuter et appliquer les changements souhaités dans l’infrastructure. Par exemple, un script Ansible va modifier la configuration ou le paramétrage des serveurs concernés.
Un exemple concret : Une infrastructure est paramétrée avec deux serveurs, un pour l’application et un pour la base de données. Si nous souhaitons un deuxième serveur pour l’application, on peut modifier la configuration de l’infrastructure dans un fichier JSON (format Ansible) via Git. Les changements vont être détectés par GitLab, et une pipeline va exécuter un script Ansible qui se base sur le fichier JSON en question pour déployer un nouveau serveur.
Avec quels outils intégrer GitOps ?
Il y a beaucoup d’outils GitOps :
- Gitlab ;
- Jenkins ;
- Ansible (un outil de gestion et d’automatisation des déploiements, fonctionnant avec des fichier JSON et le protocole SSH) ;
- Terraform (une interface en ligne de commande qui permet de gérer un orchestrateur Kubernetes) ;
- Jenkins X ;
- Argo / Flux ;
- Docker (un outil de conteneurisation. Un conteneur est une enveloppe virtuelle permettant de distribuer une application avec tous les éléments dont elle a besoin pour fonctionner : fichiers sources, environnement d’exécution, librairies, outils, fichier etc… Docker est très utilisé chez A5sys) ;
- Kubernetes (un orchestrateur de conteneurs permettant d’automatiser le déploiement, la gestion, la mise à l’échelle et le mise en réseau des conteneurs.)
Pour faire simple, GitOps permet d’historiser l’état de l’infrastructure à un instant T, et de la mettre à jour automatiquement. Nous pouvons également mettre en place un système de validation par Merge Request via GitLab.
GitOps offre beaucoup de perspectives. Il faut commencer étape par étape en intégrant des notions de l’Infrastructure as Code, puis adapter les différents outils aux besoins de développement. Nous avons pu le constater que les outils sont multiples et peuvent répondre à différents enjeux.
Pour plus d’informations, vous pouvez visionner l’intervention de Katie Gamanji « GitOps to the Edge and Infrastructure Provisioning », du DevFest de Nantes 2021.
Merci Mathis pour cet article 😊