Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
288 changes: 56 additions & 232 deletions docs/paas_openshift/tutorials/deploy-through-helmfile.md
Original file line number Diff line number Diff line change
@@ -1,297 +1,121 @@
---
title : Déployer au travers d'HelmFile
---

# Déployer à l'aide de Helmfile

---

## Objectifs

L’objectif principal de ce tutoriel est de montrer comment déployer des applications sur notre PaaS OpenShift à l’aide de **Helmfile** en orchestrant plusieurs Helm charts ensemble.

Exposez le service front-end via HTTP/HTTPS.

## Limitations connues

Le contexte de cette démonstration est le suivant :

- Respecte les contraintes OpenShift **(SCC restricted-V2)**.
- Déploiement uniquement de **conteneurs sans privilèges** (UID > 30000).
- Aucun recours aux **CRD personnalisés**.
- Pas d’accès au rôle de la plateforme en tant que **cluster-admin**.
- Pas de déploiement au niveau du cluster (**installation cluster-wide**).
- Pas de **création de namespaces** via Helmfile (pour éviter des conflits de permissions).

## Points forts

- Démonstration du déploiement d’un front-end (Nginx) et d’un back-end (PostgreSQL) à l’aide de Helmfile.

## Versions des logiciels

- OpenShift CLI : 4.17.6
- Helm : v3.16.3
- Helmfile : v0.169.2
- OpenShift : v4.15
- PostgreSQL : v17.2.0-debian-12-r5
- Nginx : v1.27.3

---

## Prérequis

Avant de commencer cette démonstration, assurez-vous d’avoir les outils et ressources suivants :

1. **Outils CLI**
- **OpenShift CLI (`oc`)** : [Documentation](https://docs.openshift.com/container-platform/4.15/cli_reference/openshift_cli/getting-started-cli.html)
- **Helm** : [Documentation](https://helm.sh/docs/)
- **Helmfile** : [Documentation](https://helmfile.readthedocs.io/en/latest/)

2. **Environnement OpenShift**

- Un cluster OpenShift fonctionnel géré par Cloud Temple.

3. **Accès et permissions**
- Rôle de client admin pour créer des projets et déployer des ressources.

---

## Plan de démonstration

### Vue d’ensemble des étapes

1. Préparer l’environnement et les outils.
2. Déployer des applications à l’aide de Helmfile :
- **nginx** : Un serveur web simple.
- **PostgreSQL** : Un serveur de base de données.
3. Vérifier le déploiement :
- Confirmer que les configurations rootless sont appliquées.
- Tester la fonctionnalité des applications.
4. Explorer les cas d’usage avancés et extensions.

---

## Fichiers nécessaires

Pour commencer, vous aurez besoin de notre **Repository de démonstration**
Déployer des applications sur notre PaaS OpenShift avec **Helmfile** en orchestrant plusieurs Helm charts ensemble.

- Récupérez le [ici](https://github.com/Cloud-Temple/product-openshift-how-to/tree/main) dans le répertoire `/examples/deploy-through-helmfile/`.
Ce tutoriel démontre :

Vous y trouverez trois fichiers :

- `Helmfile.yaml` : Manifeste de déploiement permettant à Helmfile de définir et orchestrer le déploiement des charts Helm.
- `nginx-values.yaml` : Spécifie la configuration et le comportement de Nginx.
- `postgres-values.yaml` : Spécifie la configuration et le comportement de PostgreSQL.
- Déploiement d'un **front-end Nginx** avec routes publique et privée
- Déploiement d'un **back-end PostgreSQL** avec stockage persistant
- Utilisation de **charts Helm personnalisés**
- Respect des **contraintes et limitations connues**

---

### `Helmfile.yaml`

Le fichier principal de configuration Helmfile.
Il définit les repositories, les charts Helm et les valeurs personnalisées pour chaque application.

#### Analyse ligne par ligne
## Contraintes et limitations connues

---
### Contraintes OpenShift

#### `helmDefaults`
* Respecte les contraintes OpenShift **(SCC restricted-V2)** appliqué automatiquement.
* Déploiement uniquement de **conteneurs sans privilèges**.
* **UIDs** assignés dynamiquement (> 30000).
* Capabilities droppées (`drop: ALL`).
* Ne jamais spécifier de `fsGroup` fixe (laisser OpenShift l'assigner).
* Aucun recours aux **CRD personnalisés**.
* Pas d’accès au rôle de la plateforme en tant que **cluster-admin**.
* Pas de déploiement au niveau du cluster (**installation cluster-wide**).
* Pas de **création de namespaces** via Helmfile (pour éviter des conflits de permissions).

```yaml
helmDefaults:
createNamespace: false
```
### Labels Cloud Temple

- **Description** : Définit le comportement par défaut des commandes Helm exécutées via Helmfile.
- **Détail** :
- `createNamespace: false` : Évite que Helm tente de créer des namespaces pendant le déploiement.
- **Impact** :
- Assure que le namespace doit exister avant de lancer le déploiement des charts.
- Réduit les erreurs dans les environnements avec des permissions limitées.
- `ct-router-type: public` : Route accessible depuis Internet
- `ct-router-type: private` : Route accessible uniquement depuis le réseau interne

---

#### `repositories`

```yaml
repositories:
- name: bitnami
url: https://charts.bitnami.com/bitnami
```

- **Description** : Définit les repositories Helm contenant les charts nécessaires.
- **Détail** :
- `name` : Alias du repository Helm.
- `url` : URL du repository Bitnami, qui contient des charts couramment utilisés, compatibles avec OpenShift.

---

#### `releases`

```yaml
- name: nginx
namespace: poc-helmfile
chart: bitnami/nginx
values:
- nginx-values.yaml
```

- **Description** : Définit une application Helm nommée **nginx**.
- **Détail** :
- `name` : Nom de la release Helm.
- `namespace` : Namespace Kubernetes dans lequel cette application sera déployée.
- `chart` : Chart Helm utilisé, ici `bitnami/nginx`, récupéré depuis le repository Bitnami.
- `values` : Fichier YAML contenant des configurations spécifiques pour le déploiement, ici `nginx-values.yaml`.

---

### `nginx-values.yaml`

Fichier de configuration pour le déploiement de **Nginx**.

---

### `postgres-values.yaml`
## Prérequis

Fournit la configuration pour le déploiement de **PostgreSQL**.
- **OpenShift CLI (`oc`)** installé
- **Helm** installé
- **Helmfile** installé
- Cluster OpenShift géré par Cloud Temple
- Rôle **client admin**

---

## Déroulement du déploiement

### 1. Installer les prérequis

Assurez-vous que tous les outils mentionnés dans la section sur les logiciels sont installés.
Suivez les guides suivants si besoin :

- [OCP CLI Guide](https://docs.openshift.com/container-platform/4.15/cli_reference/openshift_cli/getting-started-cli.html)
- [Helmfile Guide](https://helmfile.readthedocs.io/en/latest/)

---
## Déploiement

### 2. Connexion au cluster OpenShift
### 1. Récupérer les fichiers

Authentifiez-vous auprès de votre cluster OpenShift avec la commande suivante :
Clonez le repository :

```bash
oc login --server=https://api.openshift.example.com:6443 --web
git clone https://github.com/Cloud-Temple/product-openshift-how-to.git
cd product-openshift-how-to/examples/deploy-through-helmfile
```

> **Attention** :
> Modifiez `--server=url` avec l'url de votre instance Cloud Temple PaaS.

---

### 3. Créer un namespace dédié

Ce namespace isolera les ressources de démonstration :
### 2. Connexion et création du namespace

```bash
oc login --server=https://api.openshift.example.com --web
oc new-project poc-helmfile
```

---
> **Attention** :
> Modifiez `--server=url` avec l'url api de votre cluster Cloud Temple PaaS, récupérable depuis la console Cloud Temple/Shiva.

### 4. Déployer les applications avec Helmfile

Utilisez la commande suivante :
### 3. Déployer avec Helmfile

```bash
helmfile sync
```

---

### 5. Vérification du déploiement

- **Vérifiez les pods** :
### 4. Vérifier le déploiement

```bash
oc get pods -n poc-helmfile
oc get pods,routes,pvc -n poc-helmfile
```

---

### 6. Tester les services

Exposez les services déployés pour tester leur accessibilité et leur bon fonctionnement.

#### 1. Création de routes

Exposez le service Nginx en configurant des routes HTTP ou HTTPS :

- **Pour HTTPS** :
### 5. Tester Nginx

```bash
oc create route edge nginx-tls --service=nginx -n poc-helmfile --port=8080
echo "URL : https://$(oc get route nginx-demo-public -n poc-helmfile -o jsonpath='{.spec.host}')"
curl -k https://$(oc get route nginx-demo-public -n poc-helmfile -o jsonpath='{.spec.host}')
```

- **Pour HTTP** :
### 6. Tester PostgreSQL

```bash
oc create route edge nginx --service=nginx -n poc-helmfile --port=8080
oc apply -f test-postgres-job.yaml
oc wait --for=condition=complete job/postgres-test -n poc-helmfile --timeout=60s
oc logs job/postgres-test -n poc-helmfile
```

#### 2. Ajouter une étiquette pour une exposition publique

Ajoutez un label spécifique au routeur pour que votre service soit accessible publiquement :

- Pour la route HTTPS :

```bash
oc label route nginx-tls ct-router-type=public -n poc-helmfile
```

- Pour la route HTTP :

```bash
oc label route nginx ct-router-type=public -n poc-helmfile
```

Ces étapes garantissent que vos routes sont exposées correctement.

---

### 7. Vérifier les routes et accéder aux applications

#### 1. Liste des routes disponibles

Vérifiez que les routes ont été correctement créées :
## Nettoyage

```bash
oc get routes -n poc-helmfile
helmfile destroy
# ou
oc delete project poc-helmfile
```

Exemple de sortie :

| Nom | Hôte/Port | Service | Port | Résolution TLS | Étiquette |
|-------------|----------------------------------------------------------------------------------|----------|-------|----------------|-------------------------------------------|
| nginx | nginx-poc-helmfile.apps-ocp**number**-**cluster**.paas.cloud-temple.com | nginx | 8080 | Aucun | `ct-router-type=public` |
| nginx-tls | nginx-tls-poc-helmfile.apps-ocp**number**-**cluster**.paas.cloud-temple.com | nginx | 8080 | Edge (TLS) | `ct-router-type=public` |

#### 2. Accédez aux applications

Utilisez les URL listées dans la colonne « Hôte/Port » pour accéder aux applications. Voici un exemple :

- Pour HTTP : `http://nginx-poc-helmfile.apps-ocp{number}-{cluster}.paas.cloud-temple.com`
- Pour HTTPS : `https://nginx-tls-poc-helmfile.apps-ocp{number}-{cluster}.paas.cloud-temple.com`

> Vous devriez voir une réponse de type serveur web à partir du **front-end Nginx** déployé.

---

## Critères de validation

Pour garantir le succès de cette démonstration, vérifiez les éléments suivants :

1. **Les deux applications s’exécutent sans erreur**.
2. Les pods utilisent des UID > 30000, conformément aux contraintes des conteneurs rootless.
3. Aucun CRD personnalisé n’a été déployé.
4. Les services déployés sont accessibles via leurs routes définies (vérifiez Nginx sur HTTP et HTTPS).

---
## Documentation complète

## Conclusion
Pour un guide détaillé avec :

Vous avez maintenant un exemple complet de déploiement d’applications front-end et back-end sur OpenShift avec Helmfile. Cette méthode offre une gestion modulaire et robuste des environnements complexes.
- Architecture et diagrammes
- Configuration détaillée des fichiers
- Explications des charts Helm
- Tests et validation

Vous maîtrisez maintenant le déploiement via **Helmfile** sur OpenShift dans un environnement géré par Cloud Temple. 🚀
**Consultez le [guide complet dans le repository](https://github.com/Cloud-Temple/product-openshift-how-to/blob/main/examples/deploy-through-helmfile/howto.md)**