Dans ce post, je présente le gestionnaire de package Helm ainsi que son intégration dans notre Usine Logicielle.
L’utilisation de Helm simplifie le déploiement d’applications dans Kubernetes (K8S).
Helm permet notamment de variabiliser les fichiers de configuration K8S moins statiques via une solution de templating.
- Un package Helm contient des fichiers de configuration K8S “templatisés” ainsi que les valeurs des variables utilisées.
- Ceci permet au moment du déploiement d’une release d’un package Helm, de modifier les valeurs des variables utilisées (exemple : URL d’un service, ressources CPU, …).
Le site kubeapps référence des packages (charts) prêts à l’emploi.
Package Helm
Le format de package Helm est appelé Chart.
Un chart contient :
- Un fichier Chart.yaml de description du package (nom, numéro de version, tag docker, etc.)
Extrait du Fichier Chart.yaml
apiVersion: v1
appVersion: "1.1"
description: A Helm chart for K8S
name: api-gateway-chart
version: 20180319204019
- Une collection de templates de fichiers de configuration K8S (dans le répertoire templates)
Le fichier service.yaml référence par exemple le port du service via .
apiVersion: v1
kind: Service
spec:
type:
ports:
- port:
targetPort: http
protocol: TCP
name: http
selector:
app:
release:
- Un fichier values.yaml contenant les valeurs des variables utilisées par les templates
image:
repository: registry.k8.wildwidewest.xyz/repository/docker-repository/pocs/meltingpoc-api-gateway
tag: "20180319204019"
pullPolicy: IfNotPresent
Client Helm
Les étapes d’installation du client Helm sont décrits ici.
Le client Helm est nécessaire sur le poste de développeur (pour développer, valider les templates) ainsi que sur le cluster pour le déploiement des applications.
Création d’un chart
La création d’un chart peut de faire via la ligne de commande helm (qu’il faut donc installer sur son poste)
helm create api-gateway-chart
Adaptation
Pour l’application api-gateway, l’adaptation du contenu généré a été réalisé par modification du fichier values.yaml
Validation
La validation du contenu du package (après valorisation des variables dans les templates) se fait par appel ‘helm template’
helm template api-gateway-chart
Helmet
Comme indiqué par le ticket, notre gestionnaire de d’artefacts (i.e. nexus) ne gère pas encore le format Helm.
En attendant, le gestionnaire de package mis en place est Helmet.
Helmet est un gestionnaire de package très simple : il fournit une API qui liste les packages et une API d’upload de packages.
- Helmet ne gère pas par exemple de persistance des packages après panne (les packages sont stockés dans le conteneur Docker).
Notre instance Helmet, déployée dans notre Usine Logicielle, est accessible via cette URL.
Liste des packages
Le service helmet qui liste les packages installés est helmet/charts/index.yaml.
Upload de package
Le service helmet d’upload de packages est helmet/upload/
Extrait du Jenkinsfile (projet api-gateway-run
sh "curl -T api-gateway-chart-${params.image}.tgz -X PUT https://helmet.k8.wildwidewest.xyz/upload/"
Intégration de Helm & Helmet au BUILD
Le projet api-gateway-run
- Contient le Chart de l’api-gateway.
Le JOB api-gateway-run
- Construit une Release du Chart (après injection du tag de l’image docker dans les sources du Chart)
helm package api-gateway-chart
- Déploie le Chart dans Helmet (appel du service d’upload)
- Déploie le Chart dans le cluster K8S
helm upgrade inky-jaguar api-gateway-chart (inky-jaguar est le nom de la release)
Après déploiement, il est possible de vérifier la versions des packages installés en utilisant le client helm
[root@ma-vm ~]# helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
inky-jaguar 6 Mon Mar 19 21:43:19 2018 DEPLOYED api-gateway-chart-20180319204019 default