GitOps – Comment déployer sur Kubernetes avec Argo CD ?

Pourquoi utiliser les pratiques GitOps ?

GitOps permet d’améliorer la fiabilité du déploiement et la sécurité de votre environnement de production.

Dans cet article, je vais vous présenter comment les pratiques GitOps permettent de définir et gérer l’état d’une infrastructure Kubernetes dans un dépôt Git. Vos équipes de développeurs ou DevOps peuvent donc apporter des modifications sur l’infrastructure en soumettant une Pull Request, et un outil se chargera d’automatiser le déploiement de votre application sur votre cluster Kubernetes.

Argo CD : GitOps devient réalité

La capacité de représenter l’infrastructure en tant que code est au cœur de GitOps. Mais il ne suffit pas d’avoir une infrastructure contrôlée par version en tant que code pour être GitOps. Nous devons également avoir un mécanisme en place pour garder notre état “déployé” en synchronisation avec les ressources Kubernetes présents dans le dépôt Git.

gitops kubernetes

Ci-dessus, nous pouvons voir à quoi ressemble un pipeline GitOps sur une infrastructure Kubernetes hébergée chez notre partenaire OVH.

Le déploiement d’une nouvelle version de l’infrastructure se déroule de façon suivante :

  • En premier lieu, notre développeur fait donc un commit de son application, puis GITLAB crée une image docker et la pousse dans notre registry harbor.
  • Ensuite un trigger va déclencher une modification d’un manifest deployement Kubernetes , par exemple le tag de notre image docker qui aura été poussé précédemment . Cela signifie maintenant que notre état de fonctionnement actuel est différent de ce que nous avons décrit comme étant l’état désiré.
  • Un DevOps doit donc activer et être capable de rendre l’état désiré et l’état de fonctionnement identiques. Une fois que l’environnement dans la phase de test fonctionne correctement, la toute dernière étape consiste à transférer la branche de configuration de la phase de test dans la branche principale, ce qui active à nouveau l’opérateur pour faire correspondre l’état désiré et l’état de fonctionnement.

En résumé, exploitation et maintenance automatisées et livraison continue. Simple et facile à comprendre, non ?

1- Deployez Argo CD

Pour déployer argoCD , rien de plus simple , Créez un namespace que vous pouvez nommer argocd. puis ajouter le dépot argo CD avec helm.

helm repo add argo https://argoproj.github.io/argo-helm

Ensuite il faudra lancer la commande suivante pour déployer Argo CD.

 helm install argocd argo/argo-cd -n argo-cd

2- Installez l’outil CLI Argo CD

ArgoCD est livré avec un outil CLI. Cet outil nous permettra d’interagir avec le serveur ArgoCD.

curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v1.8.3/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

Pour utiliser l’outil CLI, il faudra se connecter au serveur Argo CD fonctionnant sur votre cluster Kubernetes. Assurez-vous de remplacer HOST par l’adresse IP de votre service.

$ argocd login {HOST}:31808 --username admin --password argocd-server-7d597d9bcd-6nzct
   
'admin' logged in successfully

3- Créer votre première application Argo CD

Une fois que vous avez crée vos Manifests Kubernetes ( Déployment , Service ) nous sommes prêts à créer une application Argo CD.

Vous trouverez ci-dessous la description de la configuration d’une application Argo CD dans un fichier yaml.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: production-myapp
spec:
  project: production-myapp
  source:
    repoURL: https://bitbucket.org/test/infrastructure_k8s.git
    targetRevision: HEAD
    path: kubernetes/applications/myapp/overlays/production
  destination:
    name: PRODUCTION-K8S
    namespace: production-myapp
  syncPolicy:
    syncOptions:
    - CreateNamespace=true

Comment protéger mes secrets sur un dépot GIT ?

Un secret est un objet Kubernetes qui contient des informations sensibles telles que des jetons d’accès, des informations d’identification de base, un certificat TLS, etc. Dans un workflow GitOps (ou n’importe workflow), il ne faut surtout pas mettre en clair des secrets dans un dépôt git car il sont encodés en base 64 et donc facilement décodable.

Une solution consiste à utiliser Sealed Secrets, anciennement appelé Kubeseal, un outil de bitnami. Son objectif est de chiffrer votre secret Kubernetes en un SealedSecret, qui peut être stocké en toute sécurité, même dans un dépôt GIT public.

L’installation Sealed Secrets se compose de deux parties :

  • Un contrôleur qui s’exécute en cluster.
  • Un CLI kubeseal.

Lorsque vous déployez le contrôleur Sealed Secret dans un cluster, il génère une clé publique et une clé privée. La clé publique est utilisée par kubeseal CLI pour le chiffrement et la clé privée est utilisée pour déchiffrer les CRDs SealedSecrets dans Kubernetes Secrets.

La clé publique peut être stockée en toute sécurité dans le depot GIT et peut être utilisée pour chiffrer les secrets sans accès direct au cluster Kubernetes.
kubeseal utilisera le certificat récupéré pour chiffrer les secrets Kubernetes. C’est ainsi que vous chiffrez un secret avec l’utilitaire kubeseal.

Etre accompagné par un expert DevOps

Pour conclure, GitOps, est une méthode qui apporte un cadre qui peut nettement améliorer la vitesse de déploiement et l’efficacité de votre équipe qui se charge du déploiement. Cela permet également d’avoir une traçabilité de toutes les modifications apportées sur les environnements.

Enfin notre équipe DevOps est disponible pour vous accompagner dans vos projets et assurer l’infogérance de votre cluster Kubernetes. Nous personnalisons chaque projet et chaque infrastructure en fonction des besoins individuels de nos clients. Cela commence par une phase de découverte au cours de laquelle nous identifions et interrogeons toutes les parties prenantes clés du projet. Notre objectif est de décrire l’application existante et l’infrastructure qui l’exécute, ainsi que ce à quoi nous voulons que l’application et l’infrastructure ressemblent à l’avenir. Ensuite, nous créons mettons en œuvre un planning de migration pour mettre en production votre application sur Kubernetes.