Skip to main content

Helm Charts

Déploiement

La définition de l'application doit être dans le git https://gitlab.com/olicy/bedigital/infra/applications

Voir documentation

Values

Configuration Générale

CléTypeDescriptionValeur par défaut
replicaCountIntegerNombre de "pods" (instances) de l'application principale à déployer.1
replicaWorkerCountIntegerNombre de "pods" pour les workers (tâches en arrière-plan).1
imagePullSecretsStringNom du secret Kubernetes utilisé pour s'authentifier auprès d'un registre d'images privé.gitlab-registry-bedigital-projects
nameOverrideStringPermet de remplacer le nom du chart."" (chaîne vide)
fullnameOverrideStringPermet de remplacer le nom complet de la release."" (chaîne vide)

Configuration de l'Image Docker

CléTypeDescriptionValeur par défaut
image.repositoryStringL'URL du registre et le nom de l'image Docker à utiliser pour l'application.registry.gitlab.com/olicy/bedigital/suite-be/becore
image.pullPolicyStringLa 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.tagStringLa version (tag) de l'image Docker à utiliser.1.3.24

Configuration de l'Application

CléTypeDescriptionValeur par défaut
app.nameStringLe nom de l'application.'BeDigital'
app.modulesStringPermet de spécifier les modules de l'application à activer. * signifie que tous les modules sont activés.'*'
app.session.driverStringLe pilote de session à utiliser. database indique que les sessions sont stockées en base de données.database
app.session.lifetimeIntegerLa durée de vie d'une session en minutes.10080
app.queue_connectionStringLa 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.enabledBooleanUn booléen pour activer ou désactiver les workers.false
app.customer.mailStringL'adresse e-mail du client.customer@olicy.fr

Configuration du Stockage et des Services Externes

CléTypeDescriptionValeur par défaut
storage.aws.regionStringLa région AWS à utiliser pour les services de stockage comme S3.'eu-west-3'
php.memoryStringLa limite de mémoire allouée à PHP.512M
php.uploadStringLa taille maximale des fichiers autorisée pour l'upload.50M
gotenberg.urlStringL'URL du service Gotenberg, utilisé pour la conversion de documents.http://default-gotenberg:3000
env.appStringL'environnement de l'application (production, staging, etc.).production

Sécurité

CléTypeDescriptionValeur par défaut
podSecurityContextObjectDéfinit le contexte de sécurité au niveau du pod (par exemple, le groupe de fichiers fsGroup).{} (objet vide)
containerSecurityContextObjectDéfinit le contexte de sécurité au niveau du conteneur.{} (objet vide)

Service et Ingress

CléTypeDescriptionValeur par défaut
service.typeStringLe type de service Kubernetes. ClusterIP expose le service sur une adresse IP interne au cluster.ClusterIP
service.portIntegerLe port sur lequel le service est exposé.80
service.lbStringLe nom du load balancer (si applicable)."lb-nexy-c01.be-digital.app"
ingress.classStringLa classe de l'Ingress Controller à utiliser (ici, Traefik).traefik
ingress.enabledBooleanUn booléen pour activer ou désactiver la création d'une ressource Ingress.true
ingress.entryPointsStringLes points d'entrée à utiliser pour l'Ingress.websecure
ingress.tls.enabledBooleanUn booléen pour activer le TLS (HTTPS) pour l'Ingress.true
ingress.tls.secretNameStringLe nom du secret Kubernetes contenant le certificat TLS.wildcard-bedigital-app-cert
ingress.custom.enabledBooleanPermet d'activer une configuration d'Ingress personnalisée.false
ingress.custom.entryPointsStringPoints d'entrée pour l'Ingress personnalisé.websecure
ingress.custom.tls.enabledBooleanActivation du TLS pour l'Ingress personnalisé.true
ingress.custom.hostsListUne liste d'hôtes personnalisés pour l'Ingress.[] (liste vide)
ingress.dns.ttlStringLa durée de vie (TTL) pour les enregistrements DNS."3600"

Mise à l'échelle automatique (Autoscaling)

CléTypeDescriptionValeur par défaut
autoscaling.enabledBooleanUn booléen pour activer ou désactiver le Horizontal Pod Autoscaler (HPA).false
autoscaling.minReplicasIntegerLe nombre minimum de pods lorsque l'autoscaling est activé.1
autoscaling.maxReplicasIntegerLe nombre maximum de pods lorsque l'autoscaling est activé.3
autoscaling.averageUtilizationIntegerLe pourcentage d'utilisation moyen qui déclenche une mise à l'échelle.85

Tâches planifiées (CronJob)

CléTypeDescriptionValeur par défaut
cronjob.scheduleStringLa planification au format cron pour l'exécution des tâches planifiées."* * * * *"

Base de données

CléTypeDescriptionValeur par défaut
db.portStringLe port de la base de données."3306"

Ressources

CléTypeDescriptionValeur par défaut
resourcesObjectPermet de définir les requêtes et les limites de ressources (CPU, mémoire) pour les conteneurs.{} (objet vide)

Ordonnancement des Pods

CléTypeDescriptionValeur par défaut
nodeSelectorObjectPermet de spécifier sur quels nœuds les pods doivent être planifiés en fonction des labels des nœuds.{} (objet vide)
tolerationsListPermet aux pods d'être planifiés sur des nœuds avec des "taints" correspondants.[] (liste vide)
affinityObjectPermet 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éTypeDescriptionValeur par défaut
poddisruptionbudget.enabledBooleanUn booléen pour activer ou désactiver le Pod Disruption Budget (PDB).false
poddisruptionbudget.minIntegerLe nombre minimum de pods qui doivent rester disponibles lors d'une interruption volontaire.1

Identifiants du Registre d'Images

CléTypeDescriptionValeur par défaut
imageCredentials.registryStringL'URL du registre d'images.registry.gitlab.com
imageCredentials.usernameStringLe nom d'utilisateur pour s'authentifier auprès du registre.null (pas de valeur)
imageCredentials.passwordStringLe mot de passe pour s'authentifier auprès du registre.null (pas de valeur)

Configuration Personnalisée

CléTypeDescriptionValeur par défaut
extraEnvObjectPermet de définir des variables d'environnement supplémentaires pour les conteneurs.{} (objet vide, commenté)
customConfigMaps.enabledBooleanUn booléen pour activer le montage de ConfigMaps personnalisés.false
customConfigMaps.itemsListUne 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 :

  1. Valider la syntaxe du chart.
  2. Mettre à jour la version du chart (manuellement ou en synchronisation avec l'application).
  3. 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.4 ou 2.0.0).
  • Quand ? Manuellement uniquement. Vous devez le déclencher depuis l'interface de GitLab.
  • Comment ?
    1. Il clone le dépôt des charts.
    2. Il lit la version actuelle du chart dans bedigital/Chart.yaml.
    3. Il augmente la version (par défaut, il incrémente le dernier chiffre).
    4. 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'appVersion dans Chart.yaml et l'image.tag dans values.yaml avec 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 ?
    1. Il clone le dépôt des charts.
    2. Il met à jour les fichiers bedigital/values.yaml et bedigital/Chart.yaml pour refléter la nouvelle version de l'application.
    3. Il crée un commit avec ces modifications et le pousse sur la branche main.
    4. 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 par bump:version ou update:helm-chart), à chaque fois qu'une modification est poussée sur main.
  • 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.