Lors d’un précédent article, nous avions découvert l’intérêt de Helm. On peut le résumer à un outil de templating et de packaging dédié à Kubernetes. On dipose d’un bon outil pour industrialiser vos déploiement l’orchestrateur de conteneurs.
Cependant, Helm ne dispose pas de capacités nécessaires pour déployer ses charts ou plus simplement ses déploiements. Il lui faut donc un outil pour l’aider à accomplir une tâche plus complète de CI/CD.
Ainsi, Flux fait partie de ses outils complémentaires à Helm. Cet outil créé par Weave permet de gérer le déploiement à partir d’un dépôt (qu’il vienne de github ou de gitlab…).
Ainsi la combinaison de ces deux outils permet la répartition des tâches suivantes :
- helm : via les charts, vous pouvez décrire et templatiser les différentes ressources kubernetes pour vos déploiements
- flux : permet de synchroniser à fréquence régulière des dépôts (pouvant être des charts helm mais pas nécessairement). Flux permet également de gérer les mises à jour d’images (docker).
Flux est donc un outil important pour la mise en oeuvre d’une stratégie de gitops à partir d’un mode pull. En effet, flux, une fois installé, tire les éléments dans le cluster.
Principales fonctions de flux
Les principales fonctionnalités de flux sont les suivantes :
- scrutation à fréquence régulière d’un dépôt git (5min par défaut)
- définition de branches ou tags à prendre en compte
- déployable sous forme d’opérateur dans k8s
- mise à disposition d’un client fluxctl pour gérer les interactions avec l’opérateur (gestion des version, rollback…)
- capacité de garbage collector pour nettoyer les ressources n’existants plus dans le dépôt
- mise à disposition d’un provider terraform pour flux (et pour helm)
Installation de flux
Comme de nombreux outils associés à k8s, flux se base sur le kubeconfig local. Ainsi il peut rapidement et facilement se connecter à un cluster et éventuellement passer sur un autre cluster.
Comment l’installer ? Commençons par installer le client qui pourra ensuite installer l’opérateur pour vous.
Si vous utilisez ubuntu et snap
sudo snap install fluxctl
Sinon vous pouvez installer directement le binaire de cette manière :
wget https://github.com/fluxcd/flux/releases/download/1.21.0/fluxctl_linux_amd64 sudo mv fluxctl_linux_amd64 /usr/local/bin/fluxctl sudo chmod 755 /usr/local/bin/fluxctl
Maintenant que le client est installé, il est en mesure d’utiliser votre kubeconfig. Vous pouvez donc passer la commande suivante (à adapter à votre situation).
kubectl create ns fluxcd
fluxctl install --git-email=moi@moi.com --git-url=git@gitlab.com:xavki/testflux.git --git-path=workloads --namespace=fluxcd | kubectl apply -f -
Nous créons donc un namespace dédié à flux et nommé fluxcd.
Puis nous lançons la commande fluxctl install en précisant :
- –git-email : le mail (sans incidence)
- –git-url : la localisation du dépôt à synchroniser en utilisant une connexion ssh
- –git-path : le ou les répertoires à synchroniser
- –namespace : le namespace où l’opérateur sera installé
- et enfin on pipe la sortie dans un kubectl apply
A partir de cette étape flux est installé et dispose d’une clef privée. Nous devons donc ajouter la clef publique pour donner à flux la permission d’utiliser le dépôt git en question. Vous pouvez récupérer cette clef publique avec cette commande :
fluxctl identity --k8s-fwd-ns fluxcd
Voilà ! Nous venons de faire nos premiers pas et flux est installé. Il commence déjà à synchroniser les fichiers de ressources kubernetes contenues dans ce répertoire.
Si vous souhaitez en savoir plus sur Helm, je vous invite à regarder la formation Helm disponible dans cette playlist.