GitOps avec ArgoCD : Simplifiez et Automatisez vos Déploiements Kubernetes

Guillaume Vincent
Guillaume Vincent
Image de l'article de couverture de l'article "GitOps avec ArgoCD : Simplifiez et Automatisez vos Déploiements Kubernetes"
source: https://carnets-du-devops.fr

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.

💡
Une infrastructure est immuable lorsque les composants ne sont jamais modifiés après leur déploiement. Toute mise à jour ou modification se fait en déployant de nouvelles instances, tandis que les anciennes sont supprimées

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.

Diagramme de fonctionnement d'ArgoCD
Diagramme de fonctionnement d'ArgoCD (source: https://argo-cd.readthedocs.io/en/stable/#architecture)

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 :

Formulaire de création d'une application ArgoCD via l'interface utilisateur
Formulaire de création d'une application ArgoCD via l'interface utilisateur

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.

Formulaire de création d'une application ArgoCD via l'interface utilisateur
Formulaire de création d'une application ArgoCD via l'interface utilisateur

Une fois que la configuration est terminée, cliquez sur le bouton "CREATE" :

Validation de la création de l'application ArgoCD
Validation de la création de l'application ArgoCD

Dans l'interface utilisateur d'ArgoCD, on peut voir que l'application guestbook a été créée :

Vue des applications dans l'interface utilisateur d'ArgoCD

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 :

Détail de l'application ArgoCD dans l'interface utilisateur

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 :

Vue de l'application ArgoCD guestbook
Vue de l'application ArgoCD guestbook
Synchronisation de l'application ArgoCD
Synchronisation de l'application ArgoCD

L'application ArgoCD guestbook est en état Healthy et Synced
L'application ArgoCD guestbook est en état Healthy et Synced
Les composants de l'application ArgoCD guestbook sont synchronisés
Les composants de l'application ArgoCD guestbook sont synchronisés
Vue des logs du pod de l'application guestbook
Vue des logs du pod de l'application guestbook
⚠️
Lorsque vous modifiez manuellement les composants Kubernetes d’une application ArgoCD avec 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.

Super! Ensuite, passez à la caisse complète pour un accès complet à Les Carnets du DevOps
Bienvenue à nouveau! Vous vous êtes connecté avec succès
Vous vous êtes abonné avec succès à Les Carnets du DevOps
Succès! Votre compte est entièrement activé, vous avez désormais accès à tous les contenus
Succès! Vos informations de facturation ont été mises à jour
Votre facturation n'a pas été mise à jour