Kubernetes permet de déployer des conteneurs et des services dans un cluster, mais ne propose pas par défaut une solution simple pour déployer et personnaliser des applications.
C’est pour répondre en partie à ce besoin que Helm a été créé lors d’un hackathon en 2015, initialement développé pour la solution Fleet, mais très vite adapté pour Kubernetes.
Depuis, Helm est devenu en quelque sorte le gestionnaire de paquets pour Kubernetes et permet le partage et la réutilisation de catalogues applicatifs sous la forme de conteneurs.
Helm, les bases
Dans les faits, il s’agit d’une arborescence définie de fichier Kubernetes classiques. Chaque fichier permet de déployer un object dans Kubernetes (un conteneur, un volume, etc).
Un fichier « Chart.yaml » à la racine pour décrire le catalogue.
Un moteur de templating
Les fichiers Kubernetes sont dotés d’une syntaxe un peu plus évoluée :
- paramétrable grâce au langage de template GO ;
- extensible avec des fonctions de templating réutilisable Sprig ;
- permet de définir des variables dans le fichier values.yaml ;
- permet d’utiliser des structures conditionnelles.
Gestion des dépendances
Helm permet aussi de définir des dépendances vers d’autres catalogues grâce aux requirements :
Un fichier de variables
A la racine se trouve un fichier values.yaml qui contient l’ensemble des variables définit dans notre catalogue. C’est en dupliquant ce fichier avec des réponses différentes que Helm permet la répétabilité et la réutilisation d’un catalogue :
helm install -f myvalues.yaml myredis ./redis
Un catalogue open-source
Comme les catalogues sont définis par de simples fichiers, il est très facile de les versionner dans git pour les partager avec le reste de la communauté.
Sur le github Helm, un repository git open-source propose plus de 200 applications. Le même catalogue est d’ailleurs repris sur kubeapps avec en plus une belle interface de recherche :
Le repository git est surtout l’occasion de trouver des centaines d’exemples et de bonnes pratiques pour développer vos propres catalogues.