Automatiser les mises à jour d'images avec Flux Image Automation
Laissez Flux détecter les nouveaux tags d'images de conteneurs et les committer dans Git.
Dans la plupart des setups GitOps, votre pipeline CI construit une image puis committe le nouveau tag dans le dépôt de configuration. Flux propose une alternative : deux contrôleurs optionnels surveillent votre registre de conteneurs, choisissent le tag le plus récent qui correspond à une règle, et committent eux-mêmes la modification dans Git. Le cluster ne change toujours qu’à cause d’un commit Git, vous conservez donc la piste d’audit. Ce guide utilise l’image publique podinfo.
Comment les pièces s’articulent
Trois ressources travaillent ensemble :
ImageRepositoryanalyse un registre pour y trouver les tags d’une image.ImagePolicychoisit un tag dans cette liste, par exemple la version sémantique la plus élevée dans une plage.ImageUpdateAutomationmodifie le YAML de votre dépôt Git là où un marqueur l’indique, puis committe et pousse.
Les trois utilisent l’API image.toolkit.fluxcd.io/v1. L’ancienne version v1beta2 a été retirée des CRD dans Flux 2.9, migrez donc tout ancien manifeste avant de mettre à niveau.
Installer les contrôleurs supplémentaires
Les contrôleurs d’images ne font pas partie d’une installation par défaut. Relancez le bootstrap en les ajoutant, et autorisez Flux à pousser vers le dépôt :
flux bootstrap github \
--owner=<your-github-user> \
--repository=fleet-infra \
--branch=main \
--path=clusters/dev \
--personal \
--components-extra=image-reflector-controller,image-automation-controller \
--read-write-key
Le bootstrap peut être relancé sans risque. Il committe les manifestes des nouveaux contrôleurs et les installe. --read-write-key rend la deploy key accessible en écriture pour que l’automatisation puisse pousser. Vérifiez avec kubectl get pods -n flux-system.
Analyser le registre
apps/podinfo/image-repository.yaml, dans le même dossier que votre déploiement :
apiVersion: image.toolkit.fluxcd.io/v1
kind: ImageRepository
metadata:
name: podinfo
namespace: flux-system
spec:
image: ghcr.io/stefanprodan/podinfo
interval: 5m
Pour un registre privé, ajoutez secretRef pointant vers un secret de registre Docker, créé avec kubectl create secret docker-registry ou flux create secret oci.
Choisir un tag avec une policy
apiVersion: image.toolkit.fluxcd.io/v1
kind: ImagePolicy
metadata:
name: podinfo
namespace: flux-system
spec:
imageRepositoryRef:
name: podinfo
policy:
semver:
range: 6.x
semver avec range: 6.x sélectionne la version 6.x la plus élevée. Les autres types de policy sont numerical (le nombre le plus élevé) et alphabetical, qui conviennent à des tags comme des numéros de build ou des dates. Pour des règles basées sur les noms de tags, ajoutez filterTags avec une expression régulière à la policy.
Marquer la ligne à mettre à jour
Flux met à jour exactement les lignes que vous marquez par un commentaire. Dans apps/podinfo/deployment.yaml :
spec:
containers:
- name: podinfo
image: ghcr.io/stefanprodan/podinfo:6.5.0 # {"$imagepolicy": "flux-system:podinfo"}
Le marqueur est namespace:nom-de-la-policy. Par défaut, il remplace toute la référence d’image. Pour ne mettre à jour que le tag, utilisez {"$imagepolicy": "flux-system:podinfo:tag"}, et pour les valeurs Helm ou les entrées images de Kustomize, le même marqueur fonctionne sur la ligne qui contient le tag. Tout ce qui n’a pas de marqueur est laissé tel quel.
Indiquer à Flux comment committer
apiVersion: image.toolkit.fluxcd.io/v1
kind: ImageUpdateAutomation
metadata:
name: flux-system
namespace: flux-system
spec:
interval: 30m
sourceRef:
kind: GitRepository
name: flux-system
git:
checkout:
ref:
branch: main
commit:
author:
name: fluxcdbot
email: fluxcdbot@users.noreply.github.com
messageTemplate: |
Automated image update
{{range .Changed.Changes}}
- {{.OldValue}} -> {{.NewValue}}
{{end}}
push:
branch: main
update:
path: ./apps
strategy: Setters
Les éléments qui comptent :
sourceRefest le dépôt Git dans lequel committer. Il doit être accessible en écriture, d’où--read-write-key.checkout.ref.branchest la branche de départ, etpush.branchest celle où va le commit.update.pathlimite les dossiers analysés à la recherche de marqueurs.messageTemplatecontrôle le message de commit pour que l’historique reste lisible.
Pousser directement sur main rend tout entièrement automatique. Le temps de gagner en confiance, poussez plutôt vers une branche distincte (par exemple push.branch: flux-image-updates), puis fusionnez une pull request quand vous êtes satisfait. Le changement n’atteint le cluster qu’après la fusion.
Le voir fonctionner
Committez et poussez ces fichiers, puis vérifiez chaque étape :
flux get image repository
flux get image policy
flux get image update
Le repository indique combien de tags ont été analysés, la policy indique le tag sélectionné, et l’automatisation de mise à jour indique le dernier commit poussé. Si le tag sélectionné est plus récent que celui de votre YAML, un commit apparaît dans Git, et Flux l’applique ensuite comme n’importe quel autre changement. Pour déboguer, utilisez kubectl describe sur chaque objet : un mauvais marqueur, une plage de policy qui ne correspond à rien, ou une deploy key en lecture seule sont les coupables habituels.
Quelle approche choisir
Utilisez les commits pilotés par la CI si un pipeline gère déjà la promotion et que vous voulez un seul endroit qui décide de ce qui est livré. Utilisez Flux image automation quand vous voulez que le dépôt de configuration du cluster suive un registre de lui-même, par exemple pour garder un environnement de dev sur la dernière version corrective. Les deux peuvent coexister.
Guides populaires
-
Push ou pull : comment Flux livre sur Kubernetes Pourquoi une livraison pilotée par Git et basée sur le pull change la façon de déployer, de sécuriser et de restaurer les clusters. -
Déployer votre première application avec un GitRepository et une Kustomization Pointez Flux vers des manifestes dans Git à l'aide d'une ressource Kustomization et regardez la synchronisation se faire. -
Contrôler le comportement de synchronisation : intervalles, prune, correction de dérive et rollback Décidez quand Flux applique les changements, ce qu'il supprime, comment le mettre en pause et comment annuler un mauvais déploiement. -
Configurer le multi-cluster avec Flux Gérez plusieurs clusters depuis un seul dépôt, avec une infrastructure partagée et des différences propres à chaque cluster. -
Flux CD ou Argo CD : choisir un outil GitOps Comparez l'architecture, l'interface, Helm, les secrets, la multi-tenance et l'automatisation d'images pour choisir le bon outil.