Skip to content
Snippets Groups Projects
README.md 5.05 KiB
Newer Older
# App of Apps des application du SI Sol kubernétisées
Robert Julien's avatar
Robert Julien committed

Ce dépôt contient toutes les applications du SI sol qui ont été kubernétisées. Il est géré par un administrateur système. Ce README vous aidera à déployer ces applications en utilisant le modèle "App of Apps" avec Argo CD.
Robert Julien's avatar
Robert Julien committed

Robert Julien's avatar
Robert Julien committed
## Utilisation

### Prérequis
Robert Julien's avatar
Robert Julien committed

- Argo CD doit être déjà installé sur votre cluster Kubernetes.
- Vous devez avoir les privilèges administrateur pour créer et gérer les applications dans Argo CD.
Robert Julien's avatar
Robert Julien committed

Robert Julien's avatar
Robert Julien committed
### Structure du Dépôt
Robert Julien's avatar
Robert Julien committed

La structure typique du dépôt Git pour ce modèle est la suivante :
Robert Julien's avatar
Robert Julien committed

```bash
├── Chart.yaml
├── templates
│   ├── app1.yaml
│   ├── app2.yaml
│   ├── app3.yaml
│   └── appN.yaml
└── values.yaml
Robert Julien's avatar
Robert Julien committed
```

- **Chart.yaml** : Fichier boiler-plate pour Helm.
- **templates/** : Contient un fichier pour chaque application enfant.
- **values.yaml** : Contient les valeurs par défaut pour les applications.

Robert Julien's avatar
Robert Julien committed
#### Exemple de fichier `app.yaml` pour une application enfant

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: app1
  namespace: argocd ## BIEN GARDER le namespace argocd ici
  finalizers:
  - resources-finalizer.argocd.argoproj.io
spec:
  destination:
    namespace: monappli-dev ## BIEN METTRE LE namespace où on veut que notre application soit
    server: {{ .Values.spec.destination.server }}
  project: default
  source:
    path: app1
    repoURL: https://github.com/votre-org/votre-repo.git
    targetRevision: HEAD
  syncPolicy:
    automated:
      prune: true
```
Robert Julien's avatar
Robert Julien committed

Robert Julien's avatar
Robert Julien committed
#### Fichier `values.yaml`
Robert Julien's avatar
Robert Julien committed

```yaml
spec:
  destination:
    server: https://kubernetes.default.svc
```
Robert Julien's avatar
Robert Julien committed

Robert Julien's avatar
Robert Julien committed
### Déploiement via la Ligne de Commande
Robert Julien's avatar
Robert Julien committed

Pour créer et synchroniser l'application parent, utilisez les commandes suivantes :
Robert Julien's avatar
Robert Julien committed

```sh
argocd app create apps \
    --dest-namespace argocd \
    --dest-server https://kubernetes.default.svc \
    --repo https://forgemia.inra.fr/sol_k8s/app-of-apps-argocd.git \
    --path apps  
Robert Julien's avatar
Robert Julien committed

argocd app sync apps
```
Robert Julien's avatar
Robert Julien committed

Pour synchroniser les applications enfants via la ligne de commande :
Robert Julien's avatar
Robert Julien committed

```sh
argocd app sync -l app.kubernetes.io/instance=apps
```
Robert Julien's avatar
Robert Julien committed

Robert Julien's avatar
Robert Julien committed
### Déploiement via l'Interface Web

1. **Créer l'Application Parent** :
    - Allez dans l'interface web d'Argo CD.
    - Cliquez sur "NEW APP".
    - Remplissez les champs nécessaires avec les informations suivantes :
        - **Application Name** : `apps`
        - **Project** : `default`
        - **Sync Policy** : `Manual`
        - **Repository URL** : `https://forgemia.inra.fr/sol_k8s/app-of-apps-argocd.git`
        - **Revision** : `HEAD`
        - **Destination Server** : `https://kubernetes.default.svc`
        - **Destination Namespace** : `argocd`
    - Cliquez sur "Create".

2. **Synchroniser les Applications Enfants** :
    - Dans l'interface web, filtrez les applications avec le label correct :
        - **Label** : `app.kubernetes.io/instance=apps`
    - Sélectionnez les applications "out of sync" et cliquez sur "SYNC".

Robert Julien's avatar
Robert Julien committed
### Suppression en Cascade

Pour s'assurer que les applications enfants et toutes leurs ressources sont supprimées lorsque l'application parent est supprimée, ajoutez le finalizer approprié dans votre définition d'application :

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: app1
  namespace: argocd
  finalizers:
  - resources-finalizer.argocd.argoproj.io
spec:
  ...
```
Robert Julien's avatar
Robert Julien committed

Robert Julien's avatar
Robert Julien committed
### Références
Robert Julien's avatar
Robert Julien committed

- [Argo CD Documentation](https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/)
Robert Julien's avatar
Robert Julien committed
## Credentials forgemia
Robert Julien's avatar
Robert Julien committed
Le fichier private-repo-forgemia-creds-sealed.yaml contient le secret permettant de se connecter aux dépots sous <https://forgemia.inra.fr/infosol-sisol/webapps/>, c'est un "credential template" (<https://argo-cd.readthedocs.io/en/release-2.0/user-guide/private-repositories/#credential-templates>) .
Pour le créer, créer un token sur forgemia, puis :

```yaml
apiVersion: v1
stringData:
  password: LE_TOKEN
  type: git
  url: https://forgemia.inra.fr/infosol-sisol/webapps/
Robert Julien's avatar
Robert Julien committed
  username: LE_NOM_DUSER
kind: Secret
metadata:
  creationTimestamp: null
  labels:
    argocd.argoproj.io/secret-type: repo-creds
  name: private-repo-forgemia-creds
  namespace: argocd
```

et :

```bash
kubeseal -f private-repo-forgemia-creds.yaml > private-repo-forgemia-creds-sealed.yaml
Robert Julien's avatar
Robert Julien committed
```

## Divers

### Connexion à argocd

Robert Julien's avatar
Robert Julien committed
Pour rappel, la connexion à argocd est décrite dans le README du dépot forgemia.inra.fr:sol_k8s/infrastructure.git


### Configuration Sonarqube

Une fois installé, dans sonarqube il faut :

* Se connecter et modifier le mot de passe admin
* activer la connexion à forgemia en suivant cette documentation : https://docs.sonarsource.com/sonarqube-server/9.9/instance-administration/authentication/gitlab/ . Dans sonarqube, il faudra renseigner : Gitlab URL : https://forgemia.inra.fr/, APP ID (ce qu'aura donné forgemia), APP Secret (idem), Cocher la case "synchronizer les groupes" et la case "allow users to sign up".
* Créer les groupes manuellement dans sonarque pour refléter ceux de forgemia (typiquement : infosols-sisol/webapps)