Aller au contenu

Déployer avec ArgoCD (GitOps)

En complément de Rancher et de kubectl, Kontainers met à votre disposition une instance ArgoCD. Vous décrivez l’état souhaité de vos applications dans votre dépôt Git, ArgoCD le reflète en continu dans votre namespace : plus de kubectl apply manuel, un historique de déploiement complet, et un retour arrière en un clic.


Vous créez dans votre namespace un objet Application qui indique où se trouve votre code de déploiement (dépôt Git ou chart Helm) et quoi déployer. ArgoCD compare en permanence ce qui est décrit dans Git avec ce qui tourne réellement, et vous signale tout écart.

Le déploiement a toujours lieu dans le namespace de l’Application, avec vos propres droits : rien de plus que ce que vous pouvez déjà faire depuis Rancher.


L’interface ArgoCD du cluster Kontainers est accessible à l’adresse :

https://argocd.k-bdkbsh.blackswift.cloud

Vous la retrouvez aussi :

  • dans Rancher, sur le cluster k-bdkbsh : lien ArgoCD du menu de gauche, rubrique BlackSwift ;
  • sur votre page Ma BSphere ;
  • dans Grafana, en tête du dashboard BlackSwift ArgoCD (dossier BlackSwift).

Liste des applications dans l’interface ArgoCD, avec leur état de synchronisation et de santé

  1. Ouvrez l’URL ci-dessus.

  2. Cliquez sur « Log in via Keycloak ».

  3. Authentifiez-vous avec le même compte que Rancher. Si vous ne vous êtes jamais connecté, commencez par la page Première connexion.

Vous retrouvez dans l’interface les applications de votre organisation, et elles seules.


Si votre dépôt est public, vous n’avez rien à faire : passez à l’étape 4.

S’il est privé, ArgoCD a besoin d’un accès en lecture. Vous le déclarez vous-même, sans passer par le support.

  1. Sur GitLab, créez un deploy token sur votre dépôt, avec le seul scope read_repository (Settings › Repository › Deploy tokens). Notez le nom d’utilisateur et le jeton générés.

  2. Enregistrez-les dans un secret, dans votre namespace :

    Fenêtre de terminal
    kubectl -n <votre-namespace> create secret generic gitops-token \
    --from-literal=username='<deploy-token-user>' \
    --from-literal=password='<deploy-token>'
  3. Déclarez le dépôt. Ce manifeste ne contient aucun secret : vous pouvez le committer.

    apiVersion: blackswift.cloud/v1alpha1
    kind: ArgocdRepository
    metadata:
    name: gitops
    namespace: <votre-namespace>
    spec:
    url: https://gitlab.blackswift.cloud/<groupe>/<projet>.git
    secretRef:
    name: gitops-token
  4. Vérifiez la prise en compte :

    Fenêtre de terminal
    kubectl -n <votre-namespace> get argocdrepositories

Supprimer l’objet ArgocdRepository supprime l’accès correspondant.


L’objet Application se crée dans votre namespace.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: mon-app
namespace: <votre-namespace>
spec:
source:
repoURL: https://gitlab.blackswift.cloud/<groupe>/<projet>.git
targetRevision: main
path: manifests/production

Appliquez-le :

Fenêtre de terminal
kubectl apply -f mon-app.yaml

Vous pouvez aussi créer l’Application sans manifeste, avec le bouton + NEW APP de l’interface. Le formulaire demande des champs que la plateforme remplit d’habitude pour vous :

Champ du formulaire Valeur à saisir
Application Name Le nom de votre choix, par exemple mon-app.
Project Name Votre projet, c-<votre-organisation> (seul proposé).
Repository URL, Path / Chart Votre dépôt Git ou votre chart Helm, comme dans les exemples ci-dessus. Pour un chart Helm, saisissez vous-même le nom du chart et sa version : l’interface ne les liste pas.
Cluster URL https://kubernetes.default.svc (ou, au choix, Cluster Name in-cluster).
Namespace (destination) Votre namespace, par exemple c-<votre-organisation>-prod.

Une application créée depuis l’interface est un objet Application comme un autre : elle apparaît dans Rancher et se modifie aussi bien depuis Rancher, kubectl ou l’interface ArgoCD.

L’application apparaît alors dans l’interface. Par défaut, la synchronisation est manuelle : vous relisez les changements, puis vous cliquez sur Sync. Si vous préférez l’automatisme, activez l’auto-sync application par application (spec.syncPolicy.automated).

Pour couvrir plusieurs environnements, créez une Application dans chacun de vos namespaces. Les ApplicationSet ne sont pas encore disponibles.


Depuis l’interface, vous visualisez l’arbre de votre application, vous comparez Git au cluster, vous lisez les logs, vous redémarrez ou redimensionnez un déploiement, vous synchronisez et vous revenez à une version précédente.

Deux gestes ne sont volontairement pas proposés, car ils feraient diverger le cluster de votre dépôt : modifier une ressource directement depuis l’interface, et synchroniser avec un contenu saisi à la main. Pour une intervention ponctuelle hors GitOps, ou pour ouvrir un terminal dans un conteneur, passez par Rancher.


  • ArgoCD déploie exactement ce que vous pourriez créer vous-même dans votre namespace. Un chart qui tente d’installer des composants à l’échelle du cluster (CRD, rôles globaux…) échouera : cherchez l’option qui les désactive, ou contactez le support.
  • Le nombre d’Application par namespace est plafonné. Contactez le support si la limite devient contraignante.
  • Votre console Grafana contient un dashboard BlackSwift ArgoCD (dossier BlackSwift) : nombre d’applications par namespace, état de synchronisation et de santé, historique des synchronisations. Qui a déclenché chaque synchronisation se lit dans l’onglet History de l’application, dans l’interface ArgoCD.

Symptôme Que faire
La création de l’Application est refusée, le message évoque une organisation non activée La fonctionnalité n’est pas encore ouverte pour vous : ouvrez un ticket (voir l’encart en haut de page).
repository not accessible sur un dépôt privé Jeton absent, expiré ou mal scopé, ou suffixe .git manquant. Vérifiez kubectl get argocdrepositories et que l’URL de l’Application est exactement celle déclarée.
La création de l’Application est refusée à cause de sa destination Retirez spec.destination et spec.project de votre manifeste. Depuis l’interface : Cluster URL https://kubernetes.default.svc (ou Cluster Name in-cluster), et votre namespace comme destination.
Création refusée depuis l’interface (permission denied) Le metadata.namespace de l’Application est absent ou n’est pas l’un de vos namespaces. Ajoutez-le via EDIT AS YAML (voir Depuis l’interface ArgoCD).
La synchronisation échoue sur une ressource précise Cette ressource sort de ce que vous pouvez créer dans votre namespace. Voir la section précédente.
L’application reste OutOfSync sans rien appliquer C’est le comportement par défaut : cliquez sur Sync, ou activez syncPolicy.automated.