Helm Charts
Déploiement
La définition de l'application doit être dans le git https://gitlab.com/olicy/bedigital/infra/applications
Values
Configuration Générale
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
replicaCount | Integer | Nombre de "pods" (instances) de l'application principale à déployer. | 1 |
replicaWorkerCount | Integer | Nombre de "pods" pour les workers (tâches en arrière-plan). | 1 |
imagePullSecrets | String | Nom du secret Kubernetes utilisé pour s'authentifier auprès d'un registre d'images privé. | gitlab-registry-bedigital-projects |
nameOverride | String | Permet de remplacer le nom du chart. | "" (chaîne vide) |
fullnameOverride | String | Permet de remplacer le nom complet de la release. | "" (chaîne vide) |
Configuration de l'Image Docker
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
image.repository | String | L'URL du registre et le nom de l'image Docker à utiliser pour l'application. | registry.gitlab.com/olicy/bedigital/suite-be/becore |
image.pullPolicy | String | La politique de récupération de l'image. IfNotPresent signifie que l'image ne sera téléchargée que si elle n'est pas déjà présente localement. | IfNotPresent |
image.tag | String | La version (tag) de l'image Docker à utiliser. | 1.3.24 |
Configuration de l'Application
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
app.name | String | Le nom de l'application. | 'BeDigital' |
app.modules | String | Permet de spécifier les modules de l'application à activer. * signifie que tous les modules sont activés. | '*' |
app.session.driver | String | Le pilote de session à utiliser. database indique que les sessions sont stockées en base de données. | database |
app.session.lifetime | Integer | La durée de vie d'une session en minutes. | 10080 |
app.queue_connection | String | La connexion de file d'attente à utiliser. database signifie que les tâches en file d'attente sont stockées dans la base de données. | database |
app.worker.enabled | Boolean | Un booléen pour activer ou désactiver les workers. | false |
app.customer.mail | String | L'adresse e-mail du client. | customer@olicy.fr |
Configuration du Stockage et des Services Externes
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
storage.aws.region | String | La région AWS à utiliser pour les services de stockage comme S3. | 'eu-west-3' |
php.memory | String | La limite de mémoire allouée à PHP. | 512M |
php.upload | String | La taille maximale des fichiers autorisée pour l'upload. | 50M |
gotenberg.url | String | L'URL du service Gotenberg, utilisé pour la conversion de documents. | http://default-gotenberg:3000 |
env.app | String | L'environnement de l'application (production, staging, etc.). | production |
Sécurité
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
podSecurityContext | Object | Définit le contexte de sécurité au niveau du pod (par exemple, le groupe de fichiers fsGroup). | {} (objet vide) |
containerSecurityContext | Object | Définit le contexte de sécurité au niveau du conteneur. | {} (objet vide) |
Service et Ingress
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
service.type | String | Le type de service Kubernetes. ClusterIP expose le service sur une adresse IP interne au cluster. | ClusterIP |
service.port | Integer | Le port sur lequel le service est exposé. | 80 |
service.lb | String | Le nom du load balancer (si applicable). | "lb-nexy-c01.be-digital.app" |
ingress.class | String | La classe de l'Ingress Controller à utiliser (ici, Traefik). | traefik |
ingress.enabled | Boolean | Un booléen pour activer ou désactiver la création d'une ressource Ingress. | true |
ingress.entryPoints | String | Les points d'entrée à utiliser pour l'Ingress. | websecure |
ingress.tls.enabled | Boolean | Un booléen pour activer le TLS (HTTPS) pour l'Ingress. | true |
ingress.tls.secretName | String | Le nom du secret Kubernetes contenant le certificat TLS. | wildcard-bedigital-app-cert |
ingress.custom.enabled | Boolean | Permet d'activer une configuration d'Ingress personnalisée. | false |
ingress.custom.entryPoints | String | Points d'entrée pour l'Ingress personnalisé. | websecure |
ingress.custom.tls.enabled | Boolean | Activation du TLS pour l'Ingress personnalisé. | true |
ingress.custom.hosts | List | Une liste d'hôtes personnalisés pour l'Ingress. | [] (liste vide) |
ingress.dns.ttl | String | La durée de vie (TTL) pour les enregistrements DNS. | "3600" |
Mise à l'échelle automatique (Autoscaling)
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
autoscaling.enabled | Boolean | Un booléen pour activer ou désactiver le Horizontal Pod Autoscaler (HPA). | false |
autoscaling.minReplicas | Integer | Le nombre minimum de pods lorsque l'autoscaling est activé. | 1 |
autoscaling.maxReplicas | Integer | Le nombre maximum de pods lorsque l'autoscaling est activé. | 3 |
autoscaling.averageUtilization | Integer | Le pourcentage d'utilisation moyen qui déclenche une mise à l'échelle. | 85 |
Tâches planifiées (CronJob)
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
cronjob.schedule | String | La planification au format cron pour l'exécution des tâches planifiées. | "* * * * *" |
Base de données
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
db.port | String | Le port de la base de données. | "3306" |
Ressources
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
resources | Object | Permet de définir les requêtes et les limites de ressources (CPU, mémoire) pour les conteneurs. | {} (objet vide) |
Ordonnancement des Pods
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
nodeSelector | Object | Permet de spécifier sur quels nœuds les pods doivent être planifiés en fonction des labels des nœuds. | {} (objet vide) |
tolerations | List | Permet aux pods d'être planifiés sur des nœuds avec des "taints" correspondants. | [] (liste vide) |
affinity | Object | Permet de définir des règles d'affinité et d'anti-affinité entre les pods. | {} (objet vide) |
Budget de perturbation des Pods (Pod Disruption Budget)
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
poddisruptionbudget.enabled | Boolean | Un booléen pour activer ou désactiver le Pod Disruption Budget (PDB). | false |
poddisruptionbudget.min | Integer | Le nombre minimum de pods qui doivent rester disponibles lors d'une interruption volontaire. | 1 |
Identifiants du Registre d'Images
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
imageCredentials.registry | String | L'URL du registre d'images. | registry.gitlab.com |
imageCredentials.username | String | Le nom d'utilisateur pour s'authentifier auprès du registre. | null (pas de valeur) |
imageCredentials.password | String | Le mot de passe pour s'authentifier auprès du registre. | null (pas de valeur) |
Configuration Personnalisée
| Clé | Type | Description | Valeur par défaut |
|---|---|---|---|
extraEnv | Object | Permet de définir des variables d'environnement supplémentaires pour les conteneurs. | {} (objet vide, commenté) |
customConfigMaps.enabled | Boolean | Un booléen pour activer le montage de ConfigMaps personnalisés. | false |
customConfigMaps.items | List | Une liste de ConfigMaps à monter, avec leur nom, chemin de montage et contenu. | [] (liste vide, commentée) |
Pipeline et mise à jour
1. Quel est l'objectif ?
Ce pipeline gère un chart Helm nommé bedigital. Ses fonctions sont :
- Valider la syntaxe du chart.
- Mettre à jour la version du chart (manuellement ou en synchronisation avec l'application).
- Publier le chart dans le registre de paquets Helm de GitLab.
2. Comment ça marche ?
Le pipeline est divisé en plusieurs étapes et s'exécute principalement sur la branche main et pour les tags Git.
Étape 1 : lint (Validation)
- Job :
helm:lint - Quoi ? Ce job vérifie que la structure et la syntaxe de votre chart Helm sont correctes et ne contiennent pas d'erreurs.
- Quand ? Automatiquement, à chaque fois qu'une modification est poussée sur la branche
main. - Comment ? Il utilise la commande
helm lint. Si une erreur est trouvée, le pipeline s'arrête.
Étape 2 : chart-versioning (Gestion des versions du Chart)
Cette étape contient deux jobs différents pour la gestion des versions :
Job 1 : bump:version (Mise à jour Manuelle de la Version du Chart)
- Quoi ? Ce job vous permet d'augmenter manuellement le numéro de version du chart lui-même (ex: de
1.2.3à1.2.4ou2.0.0). - Quand ? Manuellement uniquement. Vous devez le déclencher depuis l'interface de GitLab.
- Comment ?
- Il clone le dépôt des charts.
- Il lit la version actuelle du chart dans
bedigital/Chart.yaml. - Il augmente la version (par défaut, il incrémente le dernier chiffre).
- Il crée un commit Git avec la nouvelle version et le pousse sur la branche
main.
Job 2 : update:helm-chart (Synchronisation de la Version de l'Application)
- Quoi ? Ce job met à jour la version de l'application que votre chart va déployer. Il synchronise l'
appVersiondansChart.yamlet l'image.tagdansvalues.yamlavec le tag de l'application Docker fraîchement construite (ex:v1.2.0). - Quand ? Automatiquement, à chaque fois qu'un tag est poussé pour l'application, après que l'image Docker de l'application a été construite et poussée.
- Comment ?
- Il clone le dépôt des charts.
- Il met à jour les fichiers
bedigital/values.yamletbedigital/Chart.yamlpour refléter la nouvelle version de l'application. - Il crée un commit avec ces modifications et le pousse sur la branche
main. - Il inclut une logique de re-tentative (
retry) en cas d'échec de push initial.
Étape 3 : publish (Publication du Chart)
- Job :
helm:publish - Quoi ? Ce job prépare et publie le chart Helm.
- Quand ? Automatiquement, après l'étape
lint(et donc après toute mise à jour de version effectuée parbump:versionouupdate:helm-chart), à chaque fois qu'une modification est poussée surmain. - Où est-il publié ? Dans le Registre de Paquets Helm du projet GitLab, accessible via "Deploy > Package Registry".
- Comment ? Il met à jour les dépendances du chart, compresse le chart dans une archive (
.tgz) et l'envoie au registre GitLab.