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

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