Découvrez comment GitOps avec ArgoCD peut transformer vos déploiements Kubernetes. Automatisez, simplifiez et optimisez vos processus de gestion des applications pour une efficacité accrue et une gestion simplifiée.
L’automatisation est un pilier central de la culture DevOps, offrant des gains de temps significatifs, ainsi qu’une fiabilité et une reproductibilité accrues. Dans des environnements de plus en plus complexes, elle simplifie considérablement le quotidien des développeurs et des équipes opérationnelles en rendant la gestion des infrastructures et des applications plus fluide et prévisible.
Dans des environnements Kubernetes de plus en plus sophistiqués, la gestion simplifiée des déploiements est cruciale pour maintenir l’efficacité et la cohérence.
La philosophie GitOps, mise en œuvre par des outils comme ArgoCD, répond parfaitement à ce besoin en centralisant les configurations dans Git et en automatisant les processus de déploiement.
Qu’est-ce que GitOps ?
GitOps est une approche moderne de déploiement continu (CD) qui s’appuie sur Git comme source unique de vérité. Elle permet de gérer à la fois les applications et l’infrastructure en utilisant les principes du versionnement et de la gestion du code, essentiels dans un environnement DevOps. Avec GitOps, chaque modification du système est effectuée via des pull requests / merge requests, déclenchant automatiquement des déploiements une fois le code fusionné dans le dépôt Git.
Cette méthode coordonne l’ensemble du cycle de vie, de la conception du code jusqu’à la mise en place et la gestion de l’infrastructure, en parfaite harmonie avec les principes DevOps.
Un des avantages majeurs de GitOps est la possibilité de revenir facilement à un état précédent en cas de problème, simplement en restaurant un commit antérieur. Comme chaque révision de Git reflète l’état exact de l’environnement, le rollback devient une opération simple et sécurisée.
GitOps, en particulier lorsqu’il est associé à Kubernetes, renforce l’approche infrastructure-as-code et garantit une infrastructure immuable.
Grâce à sa configuration déclarative et au modèle de réconciliation active de Kubernetes, GitOps améliore la livraison continue, le déploiement, et la gestion du cycle de vie des applications au sein des clusters Kubernetes. Cette méthode s’inscrit parfaitement dans les bonnes pratiques DevOps, en apportant un niveau supplémentaire d’automatisation et de fiabilité.
Introduction à ArgoCD
Qu'est-ce que ArgoCD ?
ArgoCD est un outil de gestion de déploiement continu (CD) spécialement conçu pour Kubernetes, offrant une solution robuste et intuitive pour appliquer des pratiques GitOps. Il s’intègre parfaitement avec les dépôts Git pour automatiser et orchestrer les déploiements d’applications dans des clusters Kubernetes, tout en garantissant que l’état des applications en production reste synchronisé avec les configurations définies dans Git.
Avec ArgoCD, vous pouvez gérer vos déploiements Kubernetes de manière déclarative, en définissant les états souhaités des applications dans des fichiers de configuration stockés dans un dépôt Git. ArgoCD surveille ces dépôts pour détecter les modifications et applique automatiquement les changements au cluster, assurant ainsi une cohérence continue entre le code et l’environnement de production.
Pourquoi utiliser ArgoCD ?
ArgoCD optimise le déploiement et la gestion du cycle de vie des applications en s’appuyant sur des spécifications déclaratives et une gestion de configuration basée sur Git, tout en assurant sécurité et conformité.
ArgoCD permet d'implémenter les fonctionnalités suivantes :
• Configuration déclarative : Définissez les applications et leurs environnements de déploiement de manière déclarative et versionnée.
• Automatisation et vérifiabilité : Assurez que le déploiement des applications et la gestion de leur cycle de vie sont automatisés, simples et vérifiables.
• Déploiements rapides et fiables : Garantissez des déploiements rapides, fiables et idempotents.
• Détection et correction des écarts : Les différences par rapport à la configuration versionnée sont détectées et corrigées immédiatement.
• Rollbacks simplifiés : Facilitez les rollbacks pour qu’ils soient aussi simples que le déploiement d’une nouvelle configuration.
ArgoCD se distingue par sa visibilité et son contrôle centralisés sur les déploiements. Grâce à son interface utilisateur intuitive, vous pouvez suivre l’état des applications, visualiser les modifications et gérer les rollbacks avec aisance. ArgoCD simplifie également la gestion des environnements multi-clusters et multi-repos, rendant les déploiements complexes plus faciles à gérer.
En résumé, ArgoCD facilite l’adoption des pratiques GitOps pour Kubernetes, en offrant une solution robuste pour automatiser, contrôler et sécuriser vos déploiements. Il intègre les principes DevOps pour renforcer la fiabilité et l’efficacité des opérations.
Déployer ArgoCD sur Kubernetes
ArgoCD peut être déployé facilement pour tester via un CustomResourceDefinition (CRD) :
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Installer et configurer le CLI ArgoCD
Vous pouvez installer le CLI pour ArgoCD selon votre OS ici.
$ kubectl port-forward svc/argocd-server -n argocd 8080:80
$ ARGOCD_PASSWORD=$(kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath='{.data.password}' | base64 -d)
$ argocd login localhost:8080 --username admin --password $ARGOCD_PASSWORD
$ argocd cluster list
SERVER NAME VERSION STATUS MESSAGE PROJECT
https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
Changez le mot de passe en utilisant la commande :
$ argocd account update-password
Enregistrer un cluster distant à partir de sa configuration Kubernetes
Vous pouvez lister tous les contextes de clusters dans votre kubeconfig
actuel :
$ argocd cluster add
Choisissez un nom de contexte dans la liste et fournissez-le à argocd cluster add <context>
Par exemple, pour le contexte remote-cluster
, exécutez :
$ argocd cluster add remote-cluster
Création d'une application ArgoCD via l'interface utilisateur
Avant nous avons effectué un port-forwarding pour accéder au serveur ArgoCD déployé sur notre Kubernetes local :
$ kubectl port-forward svc/argocd-server -n argocd 8080:80
Pour accéder l'interface utilisateur d'ArgoCD, visitez http://localhost:8080 :
Après s'être connecté(e), cliquez sur le bouton "+ NEW APP" :
Configurer les paramètres de l'application. Ici nous allons utiliser le projet par défaut et une application ArgoCD d'exemple provenant du repository officiel https://github.com/argoproj/argocd-example-apps.git.
Le repository git contient plusieurs exemples d'applications. Nous allons utiliser l'exemple guestbook
. Pour se faire, nous définissons guestbook
en tant que path. Nous allons laisser HEAD
comme révision par défaut. Cela signifie que l'application sera synchronisé avec le dernier commit de la branche main
Nous allons créer un namespace Kubernetes guestbook
pour héberger l'application et ses composants. Il faut cocher l'option "AUTO-CREATE NAMESPACE" pour que ArgoCD soit autonome :
Nous avons utilisé la sync policy Manual par défaut pour montrer comment ArgoCD fonctionne. Il est possible d'avoir une synchronisation automatique avec le repository Git.
Une fois que la configuration est terminée, cliquez sur le bouton "CREATE" :
Dans l'interface utilisateur d'ArgoCD, on peut voir que l'application guestbook a été créée :
En cliquant sur l'application ArgoCD, nous pouvons avoir plus d'information sur celle-ci. Ici on voit que le status de l'application est OutOfSync ce qui signifie que l'état de l'application n'est pas en accord avec ce qui est défini dans le repository Git et sa branche.
Nous pouvons également voir les composants Kubernetes sous-jacents que déploie et synchronise l'application ArgoCD :
Il est possible de lister les applications ArgoCD avec la CLI précedemment installée :
$ argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
argocd/guestbook https://kubernetes.default.svc guestbook default OutOfSync Missing Manual <none> https://github.com/argoproj/argocd-example-apps.git guestbook HEAD
On peut avoir également plus d'informations sur l'application avec la CLI comme dans l'interface utilisateur :
$ argocd app get guestbook
Name: argocd/guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: guestbook
URL: https://localhost:8080/applications/guestbook
Source:
- Repo: https://github.com/argoproj/argocd-example-apps.git
Target: HEAD
Path: guestbook
SyncWindow: Sync Allowed
Sync Policy: Manual
Sync Status: OutOfSync from HEAD (d7927a2)
Health Status: Missing
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service guestbook guestbook-ui OutOfSync Missing
apps Deployment guestbook guestbook-ui OutOfSync Missing
Synchronisation de l'application ArgoCD
L’état de l’application est initialement dans l’état OutOfSync puisque la politique de synchronisation a été définie sur Manual. La synchronisation va permettre de déployer les resources Kubernetes pour atteindre l'état défini dans le référentiel Git.
Pour synchroniser (déployer) l’application, exécutez :
$ argocd app sync guestbook
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2024-08-18T08:42:14+02:00 Service guestbook guestbook-ui OutOfSync Missing
2024-08-18T08:42:14+02:00 apps Deployment guestbook guestbook-ui OutOfSync Missing
2024-08-18T08:42:16+02:00 Namespace guestbook Running Synced namespace/guestbook created
2024-08-18T08:42:16+02:00 Service guestbook guestbook-ui Synced Healthy
2024-08-18T08:42:16+02:00 Service guestbook guestbook-ui Synced Healthy service/guestbook-ui created
2024-08-18T08:42:16+02:00 apps Deployment guestbook guestbook-ui OutOfSync Missing deployment.apps/guestbook-ui created
2024-08-18T08:42:16+02:00 apps Deployment guestbook guestbook-ui Synced Progressing deployment.apps/guestbook-ui created
Name: argocd/guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: guestbook
URL: https://localhost:8080/applications/guestbook
Source:
- Repo: https://github.com/argoproj/argocd-example-apps.git
Target: HEAD
Path: guestbook
SyncWindow: Sync Allowed
Sync Policy: Manual
Sync Status: Synced to HEAD (d7927a2)
Health Status: Progressing
Operation: Sync
Sync Revision: d7927a27b4533926b7d86b5f249cd9ebe7625e90
Phase: Succeeded
Start: 2024-08-18 08:42:14 +0200 CEST
Finished: 2024-08-18 08:42:16 +0200 CEST
Duration: 2s
Message: successfully synced (all tasks run)
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Namespace guestbook Running Synced namespace/guestbook created
Service guestbook guestbook-ui Synced Healthy service/guestbook-ui created
apps Deployment guestbook guestbook-ui Synced Progressing deployment.apps/guestbook-ui created
Cette commande récupère l'état du référentiel et synchronise l'état de l'application dans le cluster Kubernetes.
$ argocd app get guestbook
Name: argocd/guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: guestbook
URL: https://localhost:8080/applications/guestbook
Source:
- Repo: https://github.com/argoproj/argocd-example-apps.git
Target: HEAD
Path: guestbook
SyncWindow: Sync Allowed
Sync Policy: Manual
Sync Status: Synced to HEAD (d7927a2)
Health Status: Healthy
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Namespace guestbook Running Synced namespace/guestbook created
Service guestbook guestbook-ui Synced Healthy service/guestbook-ui created
apps Deployment guestbook guestbook-ui Synced Healthy deployment.apps/guestbook-ui created
Il est également possible de synchroniser l'application depuis l'interface utilisateur :
kubectl
, ces composants seront automatiquement recréés lors de la prochaine synchronisation. Cela illustre le principe d’infrastructure immuable, où les changements doivent être entièrement gérés dans le référentiel Git. Évitez les modifications ad-hoc et assurez-vous que toutes les configurations et définitions sont correctement définies dans Git pour garantir la cohérence et la gestion efficace de votre infrastructure. Une bonne pratique est de changer la branche Git de référence pour vos tests.Conclusion
ArgoCD est un outil essentiel pour optimiser le GitOps dans le contexte de Kubernetes. Il facilite non seulement le déploiement automatisé mais aussi le suivi et la gestion des configurations, en offrant une vue claire de l’état des déploiements via son interface Web et en intégrant des fonctionnalités puissantes avec son CLI.
En renforçant les principes DevOps, ArgoCD simplifie la gestion des applications Kubernetes et assure une cohérence accrue dans vos opérations.
À travers ce tutoriel Kubernetes, nous avons exploré comment ArgoCD aide à implémenter le GitOps, du déploiement à la synchronisation des applications, démontrant ainsi son rôle crucial dans une infrastructure moderne et automatisée.