Qu'est-ce que GitOps?

GitOps est une solution de continuous delivery, il fonctionne en utilisant Git comme source de vérité pour l'infrastructure déclarative et les charges de travail. Pour Kubernetes, cela signifie utiliser git push au lieu de kubectl create/apply ou helm install/upgrade.  

Dans un pipeline CICD traditionnel, le CD est une extension d'implémentation optimisée par l'outil d'intégration continue pour promouvoir la production d'artefacts de génération. Dans le modèle de pipeline GitOps, toute modification de la production doit être validée dans le contrôle de source (de préférence via une demande d'extraction) avant d'être appliquée sur le cluster. De cette façon, les journaux de restauration et d'audit sont fournis par Git. Si tout l'état de production est sous contrôle de version et décrit dans un seul repository Git, en cas de sinistre, toute l'infrastructure peut être rapidement restaurée à partir de ce repo.  

Pour mieux comprendre les avantages de cette approche du CD et connaître les différences entre GitOps et les outils d'infrastructure en tant que code, accédez au site Web Weaveworks et lisez l'article de GitOps.

Pour appliquer le modèle de pipeline GitOps à Kubernetes, vous avez besoin de trois choses:  

  • un repository Git avec vos définitions de charges de travail au format YAML, des charts Helm et toute autre ressource personnalisée Kubernetes qui définit l'état souhaité du cluster (je l'appellerai le repository de configuration)
  • un container registry dans lequel votre système de CI envoie des images immuables (pas de balises les plus récentes, utilisez le versioning sémantique ou git commit sha)
  • un opérator qui s'exécute dans votre cluster et effectue une synchronisation bidirectionnelle:

Monitore le registry à la recherche de nouvelles versions d'images et, en fonction des stratégies de déploiement, met à jour les définitions de charge de travail avec la nouvelle balise d'image et valide les modifications dans le repository de configuration

Monitore les modifications dans le repository de configuration et les applique à votre cluster.

J'utiliserai GitHub pour héberger le repository de configuration, Docker Hub en tant que container registry et Weave Flux OSS en tant qu'opérateur GitOps Kubernetes.