Aller au contenu

Helm đŸ› ïž : gestion des charts Kubernetes

Mise Ă  jour :

logo helm

Dans le monde des conteneurs et de l’orchestration, Kubernetes s’est imposĂ© comme le standard pour dĂ©ployer et gĂ©rer des applications conteneurisĂ©es. Cependant, la gestion des configurations et des dĂ©ploiements complexes peut rapidement devenir un casse-tĂȘte. C’est ici qu’intervient Helm souvent dĂ©crit comme le gestionnaire de paquets pour Kubernetes.

Helm simplifie le processus de gestion des applications Kubernetes en permettant de dĂ©finir, installer et mettre Ă  jour des ensembles de ressources Kubernetes de maniĂšre cohĂ©rente et reproductible. Avec Helm, vous pouvez empaqueter vos applications et leurs dĂ©pendances en charts, dĂ©ployer ces applications Ă  l’aide de commandes simples et gĂ©rer leur cycle de vie avec facilitĂ©.

Dans ce guide, je vais vous accompagner pas à pas pour comprendre et utiliser Helm efficacement. Que vous soyez un débutant cherchant à déployer votre premiÚre application Kubernetes ou un administrateur systÚme souhaitant rationaliser ses déploiements, ce guide vous fournira les connaissances et les outils nécessaires pour tirer le meilleur parti de Helm.

Historique

Helm a Ă©tĂ© dĂ©veloppĂ© Ă  l’origine par l’équipe de Deis, une entreprise spĂ©cialisĂ©e dans les plateformes de conteneurs. Le projet a Ă©tĂ© lancĂ© en 2015 avec l’objectif de simplifier le dĂ©ploiement d’applications sur Kubernetes.

Les premiÚres versions de Helm, notamment Helm v1, se concentraient principalement sur la gestion des charts (paquets contenant des définitions Kubernetes). Bien que fonctionnelles, ces versions initiales avaient certaines limitations en termes de gestion des dépendances et de flexibilité dans les déploiements.

En 2016, Helm v2 a Ă©tĂ© publiĂ©, apportant des amĂ©liorations significatives. Parmi les nouveautĂ©s, on peut citer l’introduction de Tiller, un composant serveur chargĂ© d’installer des charts dans le cluster Kubernetes et de gĂ©rer les releases. Cette version a Ă©galement introduit une meilleure gestion des dĂ©pendances et des fonctionnalitĂ©s avancĂ©es comme les hooks.

La popularitĂ© croissante de Helm a conduit Ă  son adoption par la Cloud Native Computing Foundation (CNCF) en 2018. Cette intĂ©gration a permis de bĂ©nĂ©ficier d’un soutien communautaire plus large et de garantir l’évolution continue de l’outil.

Helm v3, lancĂ© en dĂ©cembre 2019, a marquĂ© une Ă©tape importante dans l’évolution de l’outil. L’une des principales modifications a Ă©tĂ© la suppression de Tiller, souvent critiquĂ© pour des problĂšme de sĂ©curitĂ©. DĂ©sormais, Helm interagit directement avec l’API Kubernetes, ce qui Ă©limine la nĂ©cessitĂ© d’exĂ©cuter un composant supplĂ©mentaire dans le cluster.

L’une des forces de Helm rĂ©side dans sa communautĂ© active et engagĂ©e. Des centaines de contributeurs Ă  travers le monde travaillent continuellement pour amĂ©liorer Helm, ajouter de nouvelles fonctionnalitĂ©s et rĂ©soudre les problĂšmes.

Concepts de base de Helm

Pour utiliser efficacement Helm, il est important de comprendre ses concepts fondamentaux. Avec la version 3 de Helm, l’outil est devenu plus intuitif et sĂ©curisĂ©, Ă©liminant la nĂ©cessitĂ© de certains composants comme Tiller. Voici les concepts clĂ©s Ă  maĂźtriser :

Repositories

Les repositories sont des emplacements oĂč les charts sont stockĂ©s et distribuĂ©s. Helm permet d’ajouter des repositories publics ou privĂ©s pour accĂ©der Ă  une multitude de charts prĂ©configurĂ©s. Vous pouvez Ă©galement hĂ©berger vos propres repositories pour partager des charts internes.

Charts

Les charts sont des ensembles de fichiers qui dĂ©crivent un ensemble de ressources Kubernetes. Un chart contient toutes les dĂ©finitions nĂ©cessaires pour dĂ©ployer une application, y compris les services, les dĂ©ploiements et les configurations. Les charts peuvent ĂȘtre partagĂ©s et rĂ©utilisĂ©s, ce qui facilite la gestion des applications complexes.

Releases

Une release est une instance dĂ©ployĂ©e d’un chart. Chaque fois que vous installez un chart avec Helm, une nouvelle release est créée. Les releases permettent de suivre et de gĂ©rer les diffĂ©rentes versions dĂ©ployĂ©es de vos applications.

Values

Le fichier values.yaml contient les valeurs par dĂ©faut utilisĂ©es par les templates du chart. Ces valeurs peuvent ĂȘtre personnalisĂ©es lors de l’installation ou de la mise Ă  jour de la release, permettant une grande flexibilitĂ© et une configuration prĂ©cise des dĂ©ploiements.

Templates

Les templates sont des fichiers YAML contenant des définitions de ressources Kubernetes. Ils utilisent le moteur de templates Go pour permettre des configurations dynamiques basées sur les valeurs définies dans le fichier values.yaml.

Helmfile

Helmfile est un outil complémentaire qui permet de gérer plusieurs charts et releases avec un fichier unique. Il est particuliÚrement utile pour orchestrer des déploiements complexes et gérer les dépendances entre différents charts.

Helm Hooks

Les hooks permettent d’exĂ©cuter des actions Ă  des moments spĂ©cifiques du cycle de vie des releases, comme avant ou aprĂšs l’installation, la mise Ă  jour ou la suppression d’une release. Ils sont utilisĂ©s pour gĂ©rer des tĂąches supplĂ©mentaires, telles que les migrations de bases de donnĂ©es ou la configuration prĂ©alable de l’environnement.

Fonctionnement général

Helm V3 est conçu pour simplifier le déploiement, la gestion et la mise à jour des applications sur Kubernetes. Le fonctionnement général de Helm repose sur une série de concepts et de processus bien définis qui facilitent la gestion des configurations complexes.

Le cƓur du fonctionnement de Helm repose sur les charts, qui sont des paquets contenant toutes les ressources nĂ©cessaires pour dĂ©ployer une application Kubernetes. Un chart peut inclure des fichiers de configuration, des templates Kubernetes et des fichiers de valeurs par dĂ©faut. Les charts permettent de dĂ©finir des configurations standardisĂ©es et rĂ©utilisables pour des applications.

Processus de Déploiement

Lorsqu’un utilisateur souhaite dĂ©ployer une application, il utilise un chart. Helm package les ressources dĂ©finies dans le chart et interagit avec l’API Kubernetes pour crĂ©er les ressources nĂ©cessaires dans le cluster. Chaque dĂ©ploiement crĂ©e une release, qui est une instance spĂ©cifique de l’application dĂ©ployĂ©e. Helm suit ces releases pour permettre une gestion facile des mises Ă  jour et des rollbacks.

Helm permet de personnaliser les dĂ©ploiements grĂące aux fichiers values.yaml. Ces fichiers contiennent des valeurs par dĂ©faut qui peuvent ĂȘtre surchargĂ©es par l’utilisateur au moment du dĂ©ploiement. Cela permet de configurer les paramĂštres spĂ©cifiques de l’application sans modifier directement les fichiers de templates du chart. Les valeurs peuvent ĂȘtre ajustĂ©es pour rĂ©pondre Ă  diffĂ©rents environnements (dĂ©veloppement, test, production).

Mise Ă  Jour et Rollback

Un des avantages majeurs de Helm est sa capacitĂ© Ă  gĂ©rer facilement les mises Ă  jour des applications. Lorsqu’une nouvelle version d’un chart est disponible ou que les configurations doivent ĂȘtre modifiĂ©es, Helm permet de mettre Ă  jour la release existante. Si un problĂšme survient aprĂšs une mise Ă  jour, Helm offre Ă©galement la possibilitĂ© de revenir Ă  une version prĂ©cĂ©dente de la release grĂące Ă  la fonctionnalitĂ© de rollback.

Gestion des Dépendances

Helm gĂšre Ă©galement les dĂ©pendances entre les charts. Un chart peut dĂ©clarer des dĂ©pendances vers d’autres charts, qui seront automatiquement installĂ©es ou mises Ă  jour lorsque le chart principal est dĂ©ployĂ©. Cette gestion des dĂ©pendances permet de composer des applications complexes Ă  partir de composants rĂ©utilisables et indĂ©pendants.

Automatisation et CI/CD

Helm s’intĂšgre bien avec les outils d’automatisation et les pipelines CI/CD. GrĂące Ă  des fichiers de configuration dĂ©claratifs et des commandes scriptables, Helm peut ĂȘtre intĂ©grĂ© dans des workflows automatisĂ©s pour dĂ©ployer des applications de maniĂšre cohĂ©rente et fiable Ă  chaque commit ou mise Ă  jour de code. Cela permet d’atteindre des dĂ©ploiements continus (CD) et d’amĂ©liorer l’efficacitĂ© des Ă©quipes de dĂ©veloppement et des opĂ©rations.

Installation de Helm

Pour commencer à utiliser Helm, la premiÚre étape consiste à installer la CLI (Command Line Interface) Helm sur votre machine.

Avant d’installer Helm, assurez-vous que vous avez un cluster kubernetes et une version rĂ©cente de kubectl installĂ©e sur votre machine. Helm interagit avec Kubernetes via l’API, donc kubectl est nĂ©cessaire pour certaines opĂ©rations.

Installation sur Linux

Pour installer Helm sur Linux, vous pouvez utiliser le script d’installation fourni par l’équipe Helm ou tĂ©lĂ©charger directement les binaires.

asdf-vm est un gestionnaire de versions qui permet d’installer et de gĂ©rer plusieurs versions d’outils de dĂ©veloppement, y compris Helm. Voici comment installer Helm avec asdf-vm :

  1. Ajoutez le plugin Helm Ă  asdf :
    Terminal window
    asdf plugin-add helm
  2. Installez Helm en utilisant asdf :
    Terminal window
    asdf install helm latest
  3. Définissez la version installée comme version globale par défaut :
    Terminal window
    asdf global helm latest

Installation sur macOS

Pour installer Helm sur macOS, vous pouvez utiliser Homebrew, un gestionnaire de paquets populaire pour macOS. Comme pour Linux, vous pouvez Ă©galement installer Helm manuellement sur macOS en tĂ©lĂ©chargeant les binaires depuis GitHub et en suivant les mĂȘmes Ă©tapes que pour l’installation manuelle sur Linux.

Si Homebrew est déjà installé sur votre machine, exécutez simplement la commande suivante dans votre terminal :

Terminal window
brew install helm

Cette commande tĂ©lĂ©charge et installe la derniĂšre version de Helm. Vous pouvez vĂ©rifier l’installation avec :

Terminal window
helm version

Installation sur Windows

Pour installer Helm sur Windows, vous pouvez utiliser Chocolately, un gestionnaire de paquets pour Windows, ou installer manuellement les binaires.

Utilisation de Chocolately

Si Chocolately est installé sur votre machine, exécutez la commande suivante dans votre PowerShell en mode administrateur :

Terminal window
choco install kubernetes-helm

AprĂšs l’installation, vĂ©rifiez-la avec :

Terminal window
helm version

Installation manuelle

Pour une installation manuelle :

  1. TĂ©lĂ©chargez la derniĂšre version de Helm depuis la page des releases GitHub : Releases Helm ↗
  2. Extrayez le contenu du fichier téléchargé.
  3. DĂ©placez l’exĂ©cutable helm vers un rĂ©pertoire inclus dans votre PATH.

VĂ©rification de l’installation

Pour vérifier que Helm est correctement installé et configuré, utilisez la commande suivante :

Terminal window
helm version
version.BuildInfo{Version:"v3.15.1", GitCommit:"e211f2aa62992bd72586b395de50979e31231829", GitTreeState:"clean", GoVersion:"go1.22.3"}

Cette commande doit retourner la version de Helm installĂ©e, confirmant que l’installation a Ă©tĂ© effectuĂ©e avec succĂšs.

Configuration de la complétion

La complétion est une fonctionnalité utile qui permet de compléter automatiquement les commandes et les options dans le terminal. Helm offre la complétion automatique pour Bash, Zsh, Fish et PowerShell. Configurer la complétion automatique vous permet de gagner du temps et de réduire les erreurs de saisie lorsque vous utilisez la CLI Helm.

Configuration pour Bash

Pour activer la complĂ©tion automatique pour Bash, vous devez gĂ©nĂ©rer le script de complĂ©tion et l’ajouter Ă  votre fichier de configuration de shell (~/.bashrc ou ~/.bash_profile).

Exécutez la commande suivante pour générer le script de complétion pour Helm :

Terminal window
helm completion bash > /etc/bash_completion.d/helm

Si vous n’avez pas les permissions nĂ©cessaires pour Ă©crire dans /etc/bash_completion.d/, vous pouvez utiliser un rĂ©pertoire local :

Terminal window
helm completion bash > ~/.helm-completion.bash

Ajoutez la ligne suivante à votre fichier ~/.bashrc ou ~/.bash_profile pour charger le script de complétion à chaque démarrage de shell :

Terminal window
source ~/.helm-completion.bash

Rechargez votre shell pour appliquer les modifications :

Terminal window
source ~/.bashrc

Configuration pour Zsh

Pour Zsh, vous devez ajouter le script de complétion à votre fichier de configuration Zsh (~/.zshrc).

Exécutez la commande suivante pour générer le script de complétion pour Helm :

Terminal window
helm completion zsh > "${fpath[1]}/_helm"

Assurez-vous que la complétion automatique est activée dans votre fichier ~/.zshrc en ajoutant ou en vérifiant les lignes suivantes :

Terminal window
autoload -Uz compinit
compinit

Rechargez votre shell pour appliquer les modifications :

Terminal window
source ~/.zshrc

Configuration pour Fish

Pour Fish, vous devez ajouter le script de complétion dans le répertoire des fonctions de Fish.

Exécutez la commande suivante pour générer et installer le script de complétion pour Helm :

Terminal window
helm completion fish > ~/.config/fish/completions/helm.fish

Configuration pour PowerShell

Pour PowerShell, vous devez ajouter le script de complétion à votre profil PowerShell.

Exécutez la commande suivante pour générer le script de complétion pour Helm :

Terminal window
helm completion powershell > helm-completion.ps1

Ajoutez la ligne suivante à votre profil PowerShell ($PROFILE) pour charger le script de complétion à chaque démarrage de PowerShell :

Terminal window
. .\helm-completion.ps1

Rechargez votre session PowerShell pour appliquer les modifications :

Terminal window
. $PROFILE

Premier déploiement avec Helm

AprĂšs avoir installĂ© Helm, il est temps de l’utiliser pour dĂ©ployer votre premiĂšre application sur Kubernetes. Dans ce chapitre, je vais vous guider Ă  travers les Ă©tapes nĂ©cessaires pour ajouter un repository de charts, rechercher un chart et dĂ©ployer une application en utilisant Helm.

Ajouter un Repository de Charts

Avant de pouvoir déployer une application avec Helm, vous devez ajouter un repository de charts. Les repositories contiennent des collections de charts Helm que vous pouvez utiliser pour déployer des applications. Un des repositories les plus populaires est le repository Bitnami, qui contient de nombreux charts pour des applications couramment utilisées.

Pour ajouter le repository Bitnami, utilisez la commande suivante :

Terminal window
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

Ces commandes ajoutent le repository Bitnami Ă  Helm et mettent Ă  jour la liste des charts disponibles.

Rechercher un Chart

Une fois le repository ajouté, vous pouvez rechercher un chart spécifique. Par exemple, pour rechercher le chart pour Nginx, utilisez la commande suivante :

Terminal window
helm search repo nginx

Cette commande affiche une liste de tous les charts disponibles contenant “nginx” dans leur nom ou description.

Installer une Version SpĂ©cifique d’un Chart

Dans une approche DevOps, il est recommandĂ© d’installer une version spĂ©cifique d’un chart pour garantir la stabilitĂ© et la reproductibilitĂ© des dĂ©ploiements. Pour installer une version spĂ©cifique, utilisez l’option --version lors de l’installation du chart.

Par exemple, pour installer la version 8.8.0 du chart Nginx Ă  partir du repository Bitnami, utilisez la commande suivante :

Terminal window
helm install my-release bitnami/nginx --version 8.8.0

Cette commande dĂ©ploie le chart Nginx en version 8.8.0 sur votre cluster Kubernetes en utilisant le chart fourni par Bitnami. my-release est le nom que vous donnez Ă  cette instance dĂ©ployĂ©e de l’application, Ă©galement appelĂ©e une release.

Vérifier le Déploiement

AprĂšs avoir installĂ© le chart, vous pouvez vĂ©rifier que l’application a Ă©tĂ© correctement dĂ©ployĂ©e en utilisant la commande suivante :

Terminal window
kubectl get all -l app.kubernetes.io/instance=my-release

Cette commande affiche toutes les ressources Kubernetes associées à la release my-release, y compris les pods, les services et les déploiements.

Personnaliser l’Installation

Helm vous permet de personnaliser l’installation d’un chart en passant des valeurs spĂ©cifiques. Par exemple, pour changer le nombre de rĂ©pliques du dĂ©ploiement Nginx, vous pouvez utiliser un fichier de valeurs personnalisĂ© ou passer les valeurs directement en ligne de commande.

Utilisation d’un fichier de valeurs personnalisĂ©

Créez un fichier custom-values.yaml avec le contenu suivant :

replicaCount: 3

Ensuite, installez le chart en utilisant ce fichier de valeurs :

Terminal window
helm install my-release bitnami/nginx --version 8.8.0 -f custom-values.yaml

Passer les valeurs en ligne de commande

Vous pouvez également passer les valeurs directement en ligne de commande :

Terminal window
helm install my-release bitnami/nginx --version 8.8.0 --set replicaCount=3

Création de vos propres Charts

Créer votre propre chart Helm vous permet de packager vos applications et leurs configurations pour les déployer de maniÚre cohérente et réutilisable sur Kubernetes. Dans ce chapitre, je vais vous montrer comment créer un chart personnalisé, le structurer correctement et définir les fichiers nécessaires pour déployer votre application.

Initialisation d’un nouveau Chart

Pour créer un nouveau chart, utilisez la commande helm create suivie du nom de votre chart. Par exemple, pour créer un chart nommé mychart, exécutez :

Terminal window
helm create mychart

Cette commande génÚre une structure de répertoire de base pour votre chart, avec des fichiers de configuration et des templates par défaut.

Structure d’un Chart

La structure d’un chart Helm gĂ©nĂ©rĂ© par la commande helm create ressemble Ă  ceci :

mychart/
Chart.yaml # Contient des informations sur le chart (nom, version, description)
values.yaml # Contient les valeurs par défaut pour les templates
charts/ # Répertoire pour les dépendances de chart
templates/ # Contient les fichiers de templates Kubernetes
deployment.yaml
service.yaml
_helpers.tpl
.helmignore # Liste des fichiers Ă  ignorer lors de l'archivage du chart

Fichier Chart.yaml

Le fichier Chart.yaml contient des informations importantes sur votre chart, telles que le nom, la version et une description. Voici un exemple de Chart.yaml :

apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"

Fichier values.yaml

Le fichier values.yaml contient les valeurs par dĂ©faut utilisĂ©es par les templates. Les utilisateurs peuvent remplacer ces valeurs lors du dĂ©ploiement pour personnaliser la configuration de l’application. Voici un exemple de values.yaml :

replicaCount: 1
repository: nginx
tag: stable
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
resources: {}

Templates Kubernetes

Les templates dans le répertoire templates/ définissent les ressources Kubernetes nécessaires pour déployer votre application. Ces fichiers utilisent le moteur de templates Go pour générer des manifestes Kubernetes dynamiques en fonction des valeurs spécifiées dans values.yaml.

Exemple de Template de Déploiement (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-nginx
labels:
app: {{ .Release.Name }}-nginx
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-nginx
template:
metadata:
labels:
app: {{ .Release.Name }}-nginx
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80

Exemple de Template de Service (service.yaml)

apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-nginx
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: 80
selector:
app: {{ .Release.Name }}-nginx

Utilisation des Helpers

Le fichier _helpers.tpl est utilisé pour définir des fonctions de template réutilisables, ce qui permet de rendre les templates plus propres et plus maintenables. Voici un exemple de _helpers.tpl :

{{- define "mychart.labels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}

Packaging et Distribution

Une fois que votre chart est prĂȘt, vous pouvez le packager pour le distribuer. Utilisez la commande suivante pour crĂ©er un paquet .tgz de votre chart :

Terminal window
helm package mychart

Ce paquet peut ĂȘtre stockĂ© dans un repository Helm, partagĂ© avec d’autres utilisateurs ou dĂ©ployĂ© directement.

Déploiement de votre Chart

Pour déployer votre chart personnalisé, utilisez la commande helm install :

Terminal window
helm install my-release ./mychart

Gestion des dépendances

Lors de la crĂ©ation de charts Helm complexes, il est courant d’avoir des dĂ©pendances vers d’autres charts. Helm facilite la gestion de ces dĂ©pendances grĂące Ă  un fichier spĂ©cifique nommĂ© Chart.yaml et Ă  des commandes dĂ©diĂ©es. Dans ce chapitre, je vais vous montrer comment dĂ©finir et gĂ©rer les dĂ©pendances de vos charts Helm.

Définir les dépendances dans Chart.yaml

Pour dĂ©finir des dĂ©pendances pour votre chart, vous devez les spĂ©cifier dans le fichier Chart.yaml. Chaque dĂ©pendance est dĂ©finie avec son nom, sa version et le repository oĂč elle se trouve. Voici un exemple de Chart.yaml avec des dĂ©pendances :

apiVersion: v2
name: mychart
description: A Helm chart with dependencies
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: mysql
version: 8.0.0
repository: https://charts.bitnami.com/bitnami
- name: redis
version: 6.0.0
repository: https://charts.bitnami.com/bitnami

Dans cet exemple, mychart dépend des charts mysql et redis qui sont hébergés dans le repository Bitnami.

Mise à jour des dépendances

AprÚs avoir défini les dépendances dans Chart.yaml, vous devez mettre à jour les dépendances pour les télécharger et les ajouter à votre chart. Utilisez la commande suivante pour cela :

Terminal window
helm dependency update

Cette commande télécharge les charts spécifiés et les place dans le répertoire charts/ de votre chart. Le répertoire charts/ contiendra alors les packages des dépendances nécessaires.

Gestion des versions des dépendances

SpĂ©cifier des versions prĂ©cises pour vos dĂ©pendances est important pour garantir la stabilitĂ© et la reproductibilitĂ© de vos dĂ©ploiements. Utilisez les versions sĂ©mantiques pour dĂ©finir les versions exactes des charts dont vous dĂ©pendez. Cela vous permet de contrĂŽler les mises Ă  jour et d’éviter les incompatibilitĂ©s.

Installation des charts avec dépendances

Lorsque vous installez un chart avec des dĂ©pendances, Helm gĂšre automatiquement l’installation des dĂ©pendances dĂ©finies. Par exemple, pour installer mychart avec ses dĂ©pendances, utilisez la commande suivante :

Terminal window
helm install my-release ./mychart

Helm dĂ©ploiera d’abord les charts de dĂ©pendances (comme mysql et redis), puis dĂ©ploiera mychart.

Mise Ă  jour des dĂ©pendances lors de l’upgrade

Lorsque vous mettez Ă  jour votre chart ou ses dĂ©pendances, assurez-vous de mettre Ă  jour les dĂ©pendances avec la commande helm dependency update avant de procĂ©der Ă  l’upgrade de la release. Ensuite, utilisez la commande helm upgrade pour appliquer les mises Ă  jour :

Terminal window
helm upgrade my-release ./mychart

Exemple pratique

Imaginons que vous ayez un chart nommé myapp qui dépend de postgresql pour la base de données. Voici comment vous pouvez définir et gérer cette dépendance :

  1. Ajoutez la dépendance dans Chart.yaml :

    dependencies:
    - name: postgresql
    version: 10.3.11
    repository: https://charts.bitnami.com/bitnami
  2. Mettez à jour les dépendances :

    Terminal window
    helm dependency update
  3. Installez le chart avec ses dépendances :

    Terminal window
    helm install myapp-release ./myapp
  4. Pour mettre à jour le chart ou ses dépendances, mettez à jour les dépendances et utilisez helm upgrade :

    Terminal window
    helm dependency update
    helm upgrade myapp-release ./myapp

Mise Ă  jour et suppression des releases

Une des forces de Helm est sa capacitĂ© Ă  gĂ©rer facilement les mises Ă  jour et les suppressions des applications dĂ©ployĂ©es. Dans ce chapitre, je vais vous guider Ă  travers les Ă©tapes nĂ©cessaires pour mettre Ă  jour une release existante et la supprimer lorsqu’elle n’est plus nĂ©cessaire.

Mise à jour d’une release

Mettre Ă  jour une release Helm est une opĂ©ration courante, que ce soit pour appliquer des correctifs, mettre Ă  jour des configurations ou dĂ©ployer de nouvelles versions de l’application.

Pour mettre à jour une release, utilisez la commande helm upgrade. Par exemple, pour mettre à jour une release nommée my-release avec un chart local nommé mychart, exécutez :

Terminal window
helm upgrade my-release ./mychart

Cette commande applique les modifications du chart Ă  la release existante my-release.

Lors de la mise à jour, vous pouvez également passer un fichier de valeurs personnalisé ou des valeurs en ligne de commande pour modifier les configurations spécifiques :

Terminal window
helm upgrade my-release ./mychart -f custom-values.yaml

Ou :

Terminal window
helm upgrade my-release ./mychart --set replicaCount=5

Rollback d’une release

Helm permet de revenir Ă  une version prĂ©cĂ©dente d’une release si une mise Ă  jour provoque des problĂšmes. Cette fonctionnalitĂ© est essentielle pour maintenir la stabilitĂ© des applications en production.

Pour effectuer un rollback, utilisez la commande helm rollback suivie du nom de la release et du numéro de la révision. Par exemple, pour revenir à la révision 1 de my-release, utilisez :

Terminal window
helm rollback my-release 1

Helm restaurera la release Ă  l’état de la rĂ©vision spĂ©cifiĂ©e, annulant ainsi les modifications apportĂ©es par les mises Ă  jour ultĂ©rieures.

Helm conserve un historique des rĂ©visions de chaque release, ce qui vous permet de suivre les modifications au fil du temps et d’effectuer des rollbacks en cas de besoin.

Pour afficher l’historique des rĂ©visions d’une release, utilisez la commande helm history :

Terminal window
helm history my-release

Cette commande affiche une liste des rĂ©visions, avec des informations sur chaque mise Ă  jour, telles que le numĂ©ro de rĂ©vision, la date et l’état.

Suppression d’une release

Lorsque vous n’avez plus besoin d’une application, vous pouvez supprimer la release associĂ©e pour libĂ©rer les ressources du cluster Kubernetes.

Pour supprimer une release, utilisez la commande helm uninstall :

Terminal window
helm uninstall my-release

Cette commande supprime toutes les ressources Kubernetes associées à la release my-release.

Dans certains cas, il peut ĂȘtre nĂ©cessaire de forcer la suppression d’une release, par exemple si des ressources sont restĂ©es bloquĂ©es. Utilisez l’option --force pour forcer la suppression :

Terminal window
helm uninstall my-release --force

Nettoyage des ressources

AprĂšs la suppression d’une release, il est recommandĂ© de vĂ©rifier que toutes les ressources associĂ©es ont bien Ă©tĂ© supprimĂ©es. Utilisez kubectl pour lister et vĂ©rifier les ressources restantes :

Terminal window
kubectl get all -l app.kubernetes.io/instance=my-release

Utilisation avancée de Helm

Helm offre une variĂ©tĂ© de fonctionnalitĂ©s avancĂ©es qui permettent de gĂ©rer les dĂ©ploiements Kubernetes de maniĂšre encore plus flexible et puissante. Dans ce chapitre, nous explorerons les hooks, les tests de charts et les meilleures pratiques de sĂ©curitĂ© pour maximiser l’efficacitĂ© et la sĂ©curitĂ© de vos dĂ©ploiements Helm.

Helm Hooks

Les hooks permettent d’exĂ©cuter des actions spĂ©cifiques Ă  des moments particuliers du cycle de vie d’une release Helm. Ils peuvent ĂȘtre utilisĂ©s pour gĂ©rer des tĂąches comme les migrations de bases de donnĂ©es, les prĂ©-requis ou les configurations post-dĂ©ploiement.

Les hooks Helm :

  • pre-install
  • post-install
  • pre-delete
  • post-delete
  • pre-upgrade
  • post-upgrade

Exemple de hook pre-install

Voici un exemple de configuration d’un hook qui exĂ©cute une tĂąche avant l’installation de la release :

apiVersion: v1
kind: Pod
metadata:
name: "{{ .Release.Name }}-pre-install-hook"
annotations:
"helm.sh/hook": pre-install
spec:
containers:
- name: pre-install-task
image: alpine
command: ["/bin/sh", "-c", "echo Pre-install hook executed"]

Tests de Charts

Helm permet Ă©galement de dĂ©finir des tests pour vĂ©rifier que les applications dĂ©ployĂ©es fonctionnent correctement. Ces tests sont des pods spĂ©ciaux qui s’exĂ©cutent aprĂšs le dĂ©ploiement pour valider que tout fonctionne comme prĂ©vu.

Exemple de test

Voici un exemple de configuration d’un test Helm :

apiVersion: v1
kind: Pod
metadata:
name: "{{ .Release.Name }}-test-connection"
labels:
helm.sh/hook: test
spec:
containers:
- name: curl
image: busybox
command: ["curl"]
args: ["{{ .Release.Name }}-nginx:80"]

Pour exécuter les tests, utilisez la commande suivante :

Terminal window
helm test my-release

Pratiques de Sécurité

La sécurité est un aspect important de la gestion des déploiements Kubernetes avec Helm. Voici quelques meilleures pratiques pour sécuriser vos déploiements Helm :

Assurez-vous que les utilisateurs qui exĂ©cutent les commandes Helm disposent des permissions Kubernetes appropriĂ©es. Configurez les RBAC (Role-Based Access Control) pour contrĂŽler l’accĂšs et les actions possibles.

Helm permet de signer les charts pour garantir leur intégrité et leur authenticité. Utilisez les commandes helm package --sign pour signer un chart et helm verify pour vérifier les signatures.

Évitez de stocker des informations sensibles directement dans les fichiers values.yaml. Utilisez des Kubernetes Secrets pour stocker et gĂ©rer des informations sensibles de maniĂšre sĂ©curisĂ©e.

Intégration avec CI/CD

L’intĂ©gration de Helm dans vos pipelines CI/CD permet d’automatiser le dĂ©ploiement et la gestion des applications. Utilisez des outils comme Jenkins, GitLab CI, ou GitHub Actions pour intĂ©grer Helm dans vos workflows CI/CD.

Voici un exemple de configuration GitLab CI pour déployer une application avec Helm :

stages:
- deploy
deploy:
stage: deploy
script:
- helm repo add bitnami https://charts.bitnami.com/bitnami
- helm repo update
- helm upgrade --install my-release bitnami/nginx --version 8.8.0
environment:
name: production
url: http://my-release.example.com

Utilisation des Environnements

Helm permet de gérer les déploiements pour différents environnements (développement, test, production) en utilisant des fichiers de valeurs spécifiques à chaque environnement.

Créez des fichiers de valeurs pour chaque environnement, par exemple values-dev.yaml, values-prod.yaml, puis utilisez ces fichiers lors des déploiements :

Terminal window
helm install my-release ./mychart -f values-prod.yaml

Conclusion

En conclusion, Helm est un outil essentiel pour gĂ©rer les dĂ©ploiements d’applications sur Kubernetes. Il simplifie la gestion des configurations, des dĂ©ploiements, des mises Ă  jour et des rollbacks, tout en offrant des fonctionnalitĂ©s avancĂ©es pour des environnements de production robustes et sĂ©curisĂ©s. GrĂące Ă  Helm, vous pouvez dĂ©finir des configurations standardisĂ©es et reproductibles pour vos applications, ce qui facilite leur gestion Ă  grande Ă©chelle.

Helm est plus qu’un simple outil de gestion de paquets pour Kubernetes. Il reprĂ©sente une approche systĂ©matique et structurĂ©e pour gĂ©rer les dĂ©ploiements d’applications conteneurisĂ©es, rendant le processus plus cohĂ©rent et prĂ©visible. En maĂźtrisant Helm, vous amĂ©liorez non seulement l’efficacitĂ© de vos dĂ©ploiements, mais aussi la rĂ©silience et la sĂ©curitĂ© de vos applications en production.

En adoptant Helm et en suivant les meilleures pratiques, vous serez bien équipé pour gérer vos déploiements Kubernetes de maniÚre efficace et sécurisée, tout en restant agile face aux évolutions de vos applications et de votre infrastructure.

Plus d’infos

Pour approfondir vos connaissances sur Helm, voici quelques ressources essentielles :

Ces ressources offrent des guides détaillés, des exemples et des informations à jour pour vous aider à tirer le meilleur parti de Helm.