Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Kubernetes
  3. Packager son application avec Helm
Extrait - Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées (2e édition)
Extraits du livre
Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées (2e édition)
2 avis
Revenir à la page d'achat du livre

Packager son application avec Helm

Objectifs du chapitre et prérequis

Jusqu’à maintenant, vous avez vu comment gérer un cluster ou déployer une application dans le cluster en vous appuyant sur des fichiers statiques.

La notion d’espace de noms peut permettre de séparer plusieurs versions d’une même application. Toutefois, certains objets ont besoin d’être différenciés, comme par exemple l’adresse de publication (Ingress).

Ce chapitre vous présente la gestion de ces différences à l’aide de Helm. Ce logiciel rend ainsi le déploiement d’une application le plus transparent possible. Une présentation sera également donnée du langage Go template utilisé par Helm pour fonctionner.

Helm

1. Origine du besoin

Même dans le cas d’une application simple comme MailHog, le déploiement réclame un certain nombre de déclarations :

  • Un déploiement (deployment).

  • Une déclaration de service (service).

  • Une demande de volume persistant (persistent volume claim).

  • Une règle de publication (ingress).

Malheureusement, dans le cas où l’on ne souhaiterait pas publier l’application sur l’extérieur ou ajouter de volume persistant, il n’y a pas d’autre solution que d’éditer les fichiers à la main avant de les soumettre au cluster ou de n’envoyer qu’une partie des fichiers vers l’API de Kubernetes.

Afin d’éviter ces opérations manuelles, il est possible de faire appel à des préprocesseurs qui prendront ces fichiers en entrée et y appliqueront des modifications avant de les soumettre à l’API de Kubernetes.

Dans le cas de Helm, ce travail de préparation des fichiers se fait à l’aide du moteur de template du langage Go.

2. Création d’un chart

La création d’un package se fait à l’aide de la commande helm suivie des options suivantes :

  • Le mot-clé create.

  • Le nom du chart à créer.

 Pour créer un chart pour l’application MailHog, lancez la commande suivante :

$ helm create mailhog 

3. Contenu d’un package

a. Structure d’un package

Par défaut, cette commande réalise les opérations suivantes :

  • Création d’un répertoire mailhog.

  • Dépôt d’un ensemble de fichiers par défaut.

Ce répertoire contient les éléments suivants :

  • Fichier .helmignore : liste de fichiers à ignorer.

  • Fichier Chart.yaml : descriptif du chart.

  • Fichier values.yaml : contient les valeurs par défaut du chart.

  • Répertoire charts/ : contient les dépendances réclamées par ce chart.

  • Répertoire templates/ : contient les fichiers YAML à templatiser.

  • Répertoire templates/tests/ : contient les fichiers YAML permettant de réaliser des tests en fin de déploiement.

b. Variables .Values, .Chart et .Release

Le contenu des variables par défaut du fichier values.yaml est disponible à l’aide...

Template Go

1. Principe de fonctionnement

Le mécanisme de template du langage Go part d’une représentation textuelle (un fichier YAML, par exemple) dans laquelle certaines parties sont rendues dynamiques à l’aide des mécanismes suivants :

  • Soit à l’aide de variables.

  • Soit à l’aide de structures de contrôle pour afficher ou non une section (à l’aide d’instructions if/else) ou pour les répéter.

De ce point de vue, la syntaxe de base est assez proche de moteurs existants comme par exemple Jinja pour Python (utilisé notamment par Ansible) ou du moteur de template de Puppet.

Toutes les opérations réalisées par le moteur utilisent des moustaches avec une partie ouvrante ({{) et une partie fermante (}}).

2. Substitution du contenu d’une variable

Pour afficher le contenu de la variable version déclarée dans le fichier values.yaml, l’appel se fera de la manière suivante :

version contient la valeur suivante : {{ .Values.version }} 

Dans le cas où la variable contient la valeur 1.0, le moteur produira la sortie suivante :

La variable version contient la valeur suivante : 1.0 

3. Blocs conditionnels

Le langage supporte les blocs if/then/else. Il est possible d’afficher le contenu d’un bloc en fonction d’une condition.

Ci-dessous un exemple de bloc de conditions :

{{ if .Values.beauTemps }} 
Je sors sans mon parapluie. 
{{ else }} 
Je prends mon parapluie. 
{{ end }} 

Dans le cas où la condition beauTemps est vraie, le moteur renverra le texte suivant :

Je sors sans mon parapluie. 

Dans le cas où beauTemps est faux, le moteur renverra alors le résultat suivant :

Je prends mon parapluie. 

4. Gestion des conditions

a. Les valeurs de vrai ou faux

En Go template, les valeurs suivantes prendront la valeur fausse :

  • Variable non déclarée (ex. : .Values.nonDeclaree).

  • Variable contenant une structure vide (chaîne de caractères vide, tableau ou tableau de hachage).

  • Variable contenant la valeur false, 0 ou nul (valeur nil en Go).

Toutes les autres valeurs sont considérées comme vraies.

b. Opérateurs de comparaison

La comparaison de variables se fait à l’aide...