Skip to content

🚀 Gitops avec Flux

Dans la continuité de l'intégration de Kubernetes avec GitLab, l'approche Gitops pour piloter ses environnements depuis Git et faire de Git la source concernant la topologie devient une norme. Dans ce cadre, GitLab a choisi d'intégrer FluxCD (plutôt que son concurrent ArgoCD).

Dans cette partie, nous allons voir rapidement comment initialiser cela et faire un premier déploiement en mode Gitops.

Pour se simplifier la tache, on va rester dans le projet utilisé à l'étape précédente : demo-kub

🧱 Initialisation de Flux

La documentation GitLab sur le sujet est plutôt bien faite.

En résumé, il faut:

  1. Installer la CLI flux sur votre poste
  2. Setter la variable d'environnement GITLAB_TOKEN avec votre personal access token
  3. Exécuter la commande d'initialisation de flux dans votre cluster
    • owner: le chemin vers votre projet
    • repository: le nom de votre projet, reprendre le projet créé précédemment demo-kub
    • path: le répertoire dans le projet dans lequel Flux va stocker les informations pour se synchroniser avec le cluster
      flux bootstrap gitlab \
      --hostname=gitlab.com \
      --owner=<group>/<subgroup> \
      --repository=<repository> \
      --branch=main \
      --path=clusters/demo \
      --deploy-token-auth
      

Success

kubectl get ns liste un nouveau namespace flux-system

Le résultat de la commande d'init
 connecting to https://gitlab.com
 cloning branch "main" from Git repository "https://gitlab.com/<group>/<subgroup>/demo-kub.git"
 cloned repository
 generating component manifests
 generated component manifests
 committed component manifests to "main" ("752836d098892bf55ee758f6af8fe3cb30e5ea8f")
 pushing component manifests to "https://gitlab.com/<group>/<subgroup>/demo-kub.git"
 installing components in "flux-system" namespace
 installed components
 reconciled components
 checking to reconcile deploy token for source secret
 configured deploy token "flux-system-main-flux-system-./clusters/demo" for "https://gitlab.com/<group>/<subgroup>/demo-kub"
 determining if source secret "flux-system/flux-system" exists
 generating source secret
 applying source secret "flux-system/flux-system"
 reconciled source secret
 generating sync manifests
 generated sync manifests
 committed sync manifests to "main" ("c310d0ec88c78802b90d7a6b97b292d7ee302f5c")
 pushing sync manifests to "https://gitlab.com/<group>/<subgroup>/demo-kub.git"
 applying sync manifests
 reconciled sync configuration
 waiting for GitRepository "flux-system/flux-system" to be reconciled
 GitRepository reconciled successfully
 waiting for Kustomization "flux-system/flux-system" to be reconciled
 Kustomization reconciled successfully
 confirming components are healthy
 helm-controller: deployment ready
 kustomize-controller: deployment ready
 notification-controller: deployment ready
 source-controller: deployment ready
 all components are healthy

On peut vérifier que Flux est bien configuré avec la commande kubectl get gitrepositories.source.toolkit.fluxcd.io -A

Success

  • le statut est à True
    NAMESPACE     NAME          URL                                             AGE    READY   STATUS
    flux-system   flux-system   https://gitlab.com/<group>/<subgroup>/demo-kub.git   5m8s   True    stored artifact for revision 'main@sha1:c310d0ec88c78802b90d7a6b97b292d7ee302f5c'
    

🎸 Déploiement d'une application

On va maintenant déployer une application en Gitops.

  1. Créer un répertoire infra à la racine du projet
  2. Dans ce répertoire, créer un fichier application.yml décrivant notre application, comme par exemple ce snippet
  3. Dans le répertoire clusters/demo créé par Flux, créer un nouveau répertoire demo-gitops
  4. Dans ce répertoire, créer un fichier demo-flux.yml et configurer les éléments pour Flux à l'aide de ce snippet
    • On configure 2 éléments :
      • le repository git à utiliser pour la synchronisation (ici le même que celui de flux, mais il peut être différent)
      • la kustomization flux précisant les éléments dans le repository cible, comme le chemin où sont stockées les fichiers descriptifs du déploiement
    • ⚠️ Bien mettre le bon chemin vers votre repository gitlab
  5. Commiter

Après quelques secondes

  • Un namespace demo-gitops est créé (contrôler via la commande kubectl get ns)
  • 3 pods sont créées dans ce namespace (contrôler via la commande kubectl get po -n demo-gitops)

L'intérêt du Gitops est de pouvoir contrôler via git son infrastructure.

  1. Modifier le fichier application.yml précédemment créé en réduisant le nombre de replicas de 2 à 3
  2. Commiter

Après quelques secondes

  • Il n'y a plus que 2 pods dans le namespace demo-gitops (contrôler via la commande kubectl get po -n demo-gitops)