🚀 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:
- Installer la CLI flux sur votre poste
- Setter la variable d'environnement
GITLAB_TOKEN
avec votre personal access token - Exécuter la commande d'initialisation de flux dans votre cluster
owner
: le chemin vers votre projetrepository
: le nom de votre projet, reprendre le projet créé précédemmentdemo-kub
path
: le répertoire dans le projet dans lequel Flux va stocker les informations pour se synchroniser avec le cluster
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
🎸 Déploiement d'une application
On va maintenant déployer une application en Gitops.
- Créer un répertoire
infra
à la racine du projet - Dans ce répertoire, créer un fichier
application.yml
décrivant notre application, comme par exemple ce snippet - Dans le répertoire
clusters/demo
créé par Flux, créer un nouveau répertoiredemo-gitops
- 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
- On configure 2 éléments :
- Commiter
Après quelques secondes
- Un namespace
demo-gitops
est créé (contrôler via la commandekubectl 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.
- Modifier le fichier
application.yml
précédemment créé en réduisant le nombre de replicas de 2 à 3 - Commiter
Après quelques secondes
- Il n'y a plus que 2 pods dans le namespace
demo-gitops
(contrôler via la commandekubectl get po -n demo-gitops
)