ArgoCD Image Updater, ou comment mettre à jour ses applications automatiquement sur Kubernetes
Publié le
Do not index
Do not index
Primary Keyword
Lié à Analyse sémantique (Articles liés) 1
Lié à Analyse sémantique (Articles liés)
Statut rédaction
A optimiser SEO
Lié à Analyse sémantique (Articles liés) 2
Commençons cet article par contextualiser ArgoCD Image Updater. Ensuite, nous pourrons répondre aux questions suivantes : qu’est-ce que c’est ? Comment le mettre en place ? Y a-t-il des choses supplémentaires à savoir ?
ContextePrésentationInstallation et mise en placeInstallation du serviceConfiguration des accès aux registresAnnotation et mise-à-jour des applicationsNotes supplémentairesInstabilitéRollback et synchronisationConclusion
Contexte
Bienvenue chez TurboCorp, une entreprise du numérique qui distribue une application sous la forme d’un site Web et d’une API.
TurboCorp déploie son code de la manière suivante : le répertoire qui contient le code des applications inclue une pipeline de CI/CD. Cette pipeline se charge de construire et pousser des images Docker vers un registre dédié sur le cloud.
Une fois ces images mises à disposition, elles sont déployées sur un cluster Kubernetes en utilisant ArgoCD. Ce service utilise des fichiers de configuration pour créer des applications, et ensuite permet de les mettre à jour, les supprimer, et bien plus encore.
Pour mettre à jour les applications en production, au fur et à mesure des versions, UltraCorp modifie les fichiers de configuration pour monter les versions à la main. C’est long, fastidieux, et les erreurs sont très faciles à faire.
Présentation
C’est à ce moment qu’intervient ArgoCD Image Updater. Cette extension d’ArgoCD scrute des registres contenant des images Docker, et lorsque de nouvelles versions sont disponibles, met à jour les applications associées automatiquement.
Plusieurs modes de mise-à-jour sont disponibles, en utilisant du versionnage sémantique, en utilisant l’image la plus récente, etc.
Installation et mise en place
Nous considérons qu’une instance de ArgoCD est déjà déployée dans un namespaceargocd
, avec une applicationapp
déjà présente utilisant l’imageapp-backend:1.0.0
, et que ArgoCD Image Updater sera déployé dans le même cluster.
Installation du service
Pour installer ArgoCD Image Updater, on peut utiliser la charte Helm officielle, et ce sans aucune configuration additionnelle. Pour ce faire, on peut lancer la commande suivante :
# Installation de ArgoCD Image Updater
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml
# C'est bien installé
$ kubectl get pods -n argocd | grep argocd-image-updater infra-ref/scaleway keltio
argocd-image-updater-64ed9f48f-bj4zh 1/1 Running 0 37s
Configuration des accès aux registres
Maintenant que ArgoCD Image Updater est installé, il faut lui donner accès au registre qui contient les images Docker à utiliser. Pour ça, il faut créer un secret Kubernetes dans le namespace
argocd
qui contient un token d’authentification, et une ConfigMap qui indique quel secret utiliser pour quel registre.Pour l’exemple, nous considérons les images
app-backend
et app-frontend
hébergées sur DockerHub.
# Secret qui contient le token d'authentification
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: registries-credentials
namespace: argocd
data:
dockerhub: dXNlcjpwYXNzd29yZAo= # user:password
---
# ConfigMap qui lie un registre à un secret
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-image-updater-config
data:
registries.conf: |
registries:
- name: Docker Hub
prefix: docker.io
api_url: https://registry-1.docker.io
credentials: secret:argocd/registries-credentials#dockerhub
defaultns: library
default: true
Maintenant que ArgoCD Image Updater est configué, on peut vérifier son fonctionnement et s’assurer qu’il peut bien accéder au registre :
$ kubectl exec -tn argocd argocd-image-updater-64ed9f48f-bj4zh -- \
argocd-image-updater test app-backend \
--registries-conf-path /app/config/registries.conf
time="2023-06-07T13:12:30Z" level=info msg="retrieving information about image" image_alias= image_name=app-backend registry_url=
time="2023-06-07T13:12:30Z" level=info msg="Loaded 1 registry configurations from /app/config/registries.conf"
time="2023-06-07T13:12:30Z" level=info msg="Fetching available tags and metadata from registry" application=test image_alias= image_name=app-backend registry_url=
time="2023-06-07T13:12:31Z" level=info msg="Found 2 tags in registry" application=test image_alias= image_name=app-backend registry_url=
time="2023-06-07T13:12:31Z" level=info msg="latest image according to constraint is app-backend:1.0.1" application=test image_alias= image_name=app-backend registry_url=
Super. ArgoCD Image Updater arrive bien à accéder à notre registre et à récupérer les versions disponibles.
Annotation et mise-à-jour des applications
Maintenant que cette partie là est terminée, il faut indiquer à ArgoCD que ses applications doivent être mises-à-jour automatiquement. Pour faire ça, il faut ajouter des annotations aux applications ArgoCD, et indiquer quelle image utiliser :
# Liste des applications
$ kubectl get -n argocd applications
NAME SYNC STATUS HEALTH STATUS
frontend Synced Healthy
backend Synced Healthy
# Version du backend
$ kubectl get -n argocd applications/backend -o yaml infra-ref/scaleway immo-crypto
...
- forceString: true
name: image.tag
value: "1.0.0"
# `backend` est à mettre à jour automatiquement
$ kubectl annotate -n argocd applications/backend \
argocd-image-updater.argoproj.io/image-list: app-backend
# Attendons puis regardons les logs
$ sleep 2m && kubectl logs -n argocd argocd-image-updater-64ed9f48f-bj4zh
...
time="2023-06-04T15:20:04Z" level=info msg="Starting image update cycle, considering 1 annotated application(s) for update"
time="2023-06-04T15:20:05Z" level=info msg="Processing results: applications=1 images_considered=1 images_skipped=0 images_updated=1 errors=0"
# Nouvelle version du backend
$ kubectl get -n argocd applications/backend -o yaml infra-ref/scaleway immo-crypto
...
- forceString: true
name: image.tag
value: "1.0.1"
Et voilà, ArgoCD Image Updater a mis automatiquement l’application à jour. La prochaine fois qu’une nouvelle version de
app-backend
est poussée sur DockerHub, alors l’application sera mise-à-jour aussi quelques minutes après.Notes supplémentaires
Instabilité
Il faut savoir que ArgoCD Image Updater est encore en développement actif, et que le projet n’est pas recommandé pour l’utilisation en production. Bien qu’il soit très stable et que nous l’utilisons, nous, sur notre infrastructure interne, c’est à vos risques et périls.
Rollback et synchronisation
Ce qui peut arriver lors d’une mise-à-jour, c’est que la nouvelle version rencontre des erreurs et qu’on veuille revenir à la version précédente. Pour ce faire, on peut simplement utiliser les fonctionnalités de ArgoCD.
Sur la page d’administration d’ArgoCD, sélectionner l’application à rollback, puis cliquer sur le bouton History and rollback dans la barre située en haut de l’écran. D’ici, on peut choisir le déploiement à utiliser.
La version utilisée est située dans les paramètres, dans le champ image.tag. Choisir la version à redéployer, et cliquer sur les trois points en haut à droite, et choisir Rollback.
Lorsqu’une nouvelle version est publiée, et que l’on veut remettre en place ArgoCD Image Updater, il faut ré-activer l’auto-synchronisation de l’application.
Pour faire ça, sélectionner l’application, puis descendre jusqu’en bas et cliquer sur Enable auto-sync. Il est recommandé également d’activer Prune resources ainsi que Self heal.
Conclusion
Dans cet article, nous avons présenté ArgoCD Image Updater. Cette extension d’ArgoCD se charge de mettre à jour automatiquement la version des images utilisées par les différentes applications déployées. Pour ce faire, il scrute en permanence des registres renseignés dans les configurations, et détecte dès qu’une nouvelle mise-à-jour est disponible.
Nous avons également vu comment configurer les accès à différents registres, et comment renseigner des identifiants pour ceux-ci.
Enfin, nous avons abordé les sujets plus critiques comme le rollback puis comment revenir à la dernière version disponible de l’application.
Nous espérons que cet article vous a plu, ArgoCD est une technologie que nous adorons, et cette extension vient le parfaire un peu plus !
Écrit par
Victor Franzi
Victor est notre première recrue, il est passionné depuis son plus jeune âge et ne veut jamais s’arrêter d’apprendre 🧠
Sujets