---
title: "Déployer avec ArgoCD (GitOps)"
description: "Déployer vos applications en GitOps depuis votre dépôt Git, avec l'instance ArgoCD self-service de votre cluster Kontainers."
source_url:
  html: https://docs.blackswift.cloud/deployer/deployer-avec-argocd/
  md: https://docs.blackswift.cloud/deployer/deployer-avec-argocd.md
---

# Déployer avec ArgoCD (GitOps)

> Déployer vos applications en GitOps depuis votre dépôt Git, avec l'instance ArgoCD self-service de votre cluster Kontainers.

En complément de Rancher et de `kubectl`, Kontainers met à votre disposition une
instance **[ArgoCD](https://argo-cd.readthedocs.io/)**. 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.

:::caution[Fonctionnalité en beta]
ArgoCD est déployé progressivement et doit être **activé pour votre organisation**.
Pour en bénéficier, ouvrez un ticket au support (`support@blackswift.fr`). Une fois
activé, ArgoCD couvre tous les namespaces de votre organisation, y compris ceux que
vous créerez plus tard.
:::

---

## 1. Le principe

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.

---

## 2. Se connecter à l'interface

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

**[https://argocd.k-bdkbsh.blackswift.cloud](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](https://www.blackswift.fr/bsphere)** ;
* dans **Grafana**, en tête du dashboard *BlackSwift ArgoCD* (dossier *BlackSwift*).

*(capture d'écran : Liste des applications dans l'interface ArgoCD, avec leur état de synchronisation et de santé)*

<Steps>

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](https://docs.blackswift.cloud/demarrer/premiere-connexion.md).

</Steps>

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

---

## 3. Déclarer votre dépôt Git

**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.

<Steps>

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 :

   ```bash
   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.

   ```yaml
   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 :

   ```bash
   kubectl -n <votre-namespace> get argocdrepositories
   ```

</Steps>

<Aside type="caution">
**Le suffixe `.git` est obligatoire** dans l'`url`, ici comme dans le `repoURL` de vos
`Application`. Sans lui, le dépôt reste signalé *« not accessible »*.
</Aside>

Supprimer l'objet `ArgocdRepository` supprime l'accès correspondant.

---

## 4. Votre première `Application`

L'objet `Application` se crée **dans votre namespace**.

<Tabs>
<TabItem label="Manifests / Kustomize">

```yaml
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
```

</TabItem>
<TabItem label="Chart Helm">

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mon-app
  namespace: <votre-namespace>
spec:
  source:
    repoURL: https://stefanprodan.github.io/podinfo
    chart: podinfo
    targetRevision: 6.15.0
    helm:
      values: |
        service:
          type: ClusterIP
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            memory: 128Mi
```

Les charts publics sont écrits pour un cluster générique : pensez à adapter
`service.type`, les `resources` et la classe de stockage. Le détail des values à
surveiller est dans [Déployer avec Helm](https://docs.blackswift.cloud/deployer/deployer-avec-helm.md).

</TabItem>
</Tabs>

Appliquez-le :

```bash
kubectl apply -f mon-app.yaml
```

<Aside type="note">
Ne renseignez ni `spec.project` ni `spec.destination` : la plateforme les remplit
pour vous avec votre namespace.
</Aside>

### Depuis l'interface ArgoCD

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`. |

<Aside type="caution">
**Le formulaire ne permet pas de choisir le namespace de l'`Application` elle-même.**
Sans lui, ArgoCD tente de la créer dans son propre namespace, et la création est
refusée (*permission denied*). Avant de cliquer sur **CREATE**, cliquez sur
**EDIT AS YAML** en haut du formulaire et ajoutez `namespace` sous `metadata`, avec
le même namespace que la destination :

```yaml
metadata:
  name: mon-app
  namespace: c-<votre-organisation>-prod   # à ajouter
spec:
  destination:
    name: in-cluster
    namespace: c-<votre-organisation>-prod
```

C'est aussi ce qui rend l'application visible dans Rancher, dans votre namespace.
</Aside>

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.

---

## 5. Au quotidien dans l'interface

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.

---

## 6. Bon à savoir

* 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.

---

## 7. Dépannage

| 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](#depuis-linterface-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`. |

<LinkCard
  title="Documentation officielle ArgoCD"
  description="Référence complète des champs d'une Application, des stratégies de synchronisation et des hooks."
  href="https://argo-cd.readthedocs.io/en/stable/user-guide/"
/>
