Installeer software op K8S met Helm

Om software packages op een eenvoudige manier te installeren op een Kubernetes cluster is er de package-manager Helm. Eigenlijk moet ik zeggen de charts-manager want software-packages vanuit Helm worden charts genoemd. Installatie (op een Mac) gaat eenvoudig met brew:

$ brew install kubernetes-helm

Installeren van Helm chart

Het installeren van een helm-chart gaat eenvoudig met het install commando:

$ kubectl create namespace wordpress 
$ helm install wordpress stable/wordpress --namespace wordpress

De ‘namespace’ parameter gebruik ik als voorbeeld omdat deze template anders de ‘default’ namespace gebruikt. Er verschijnt uitvoer op het scherm met variabelen die ge-exporteerd dienen te worden, bijvoorbeeld de gebruikersnaam en het wachtwoord van het WordPress-admin account. Volg de instructies op het scherm om deze te vinden, samen met de URL van de nieuwe WordPress site.

Aangezien we minikube gebruiken op een locale computer gaan we het poort-nummer van de service opvragen:

$ kubectl -n wordpress get svc
NAME                  TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
wordpress-mariadb     ClusterIP      10.101.172.202   <none>        3306/TCP                     51s
wordpress-wordpress   LoadBalancer   10.110.11.194    <pending>     80:30270/TCP,443:32699/TCP   51s

En hier zie je het poortnummer dat gebruikt wordt door de wordpress service, in dit geval TCP-port 30270. Met het commando

$ minikube ip

wordt het IP adres van de minikube cluster getoond en nu kan een browser naar dit adres gevolgd door het poort-nummer de WordPress site benaderen.

Inspect values

De waardes die gebruikt worden voor het installeren van WordPress kunnen bekeken worden met ‘inspect

$ helm inspect values stable/wordpress

Dit geeft een output van de waardes op het scherm en deze kunnen eventueel naar een YAML-bestand gestuurd worden om aan te passen. Het bestand dient dan meegegeven te worden tijdens de installatie met de –values optie.

Upgraden

Met helm kunnen de releases ge-upgrade worden naar een nieuwe versie:

$ helm upgrade wordpress stable/wordpress
$ helm list

Met het commando ‘helm list‘ zie je dat we nu met REVISION 2 werken.

NAME         REVISION    UPDATED                     STATUS      CHART               APP VERSION NAMESPACE
wordpress    2           Wed Jul  3 11:18:09 2019    DEPLOYED    wordpress-5.12.6    5.2.2       wordpress

Rollback

Mocht nu, om wat voor reden dan ook, een nieuwe release niet voldoen dan kan met helm een rollback uitgevoerd worden naar een vorige release:

$ helm rollback wordpress 1
$ helm list
NAME         REVISION    UPDATED                     STATUS      CHART               APP VERSION NAMESPACE
wordpress    3           Wed Jul  3 11:24:26 2019    DEPLOYED    wordpress-5.12.6    5.2.2       wordpress

Opruimen

Verwijderen van de WordPress configuratie gaat nu net zo eenvoudig als het installeren. Aangezien we een naam hebben gegeven tijdens het installeren kunnen we deze ook gebruiken bij het verwijderen:

$ helm del --purge wordpress
$ kubectl delete namespace wordpress

Dat laatste commando is nodig als de namespace geen onderdeel is van de helm template.

Repositories

Helm gebruikt standaard de repositories ‘stable’ en ‘local’ en de locaties kunnen opgevraagd worden met:

$ helm repo list
NAME      URL                                             
stable    https://kubernetes-charts.storage.googleapis.com
local     http://127.0.0.1:8879/charts 

Toevoegen van een nieuwe repo kan bijvoorbeeld met:

$ helm repo add myrepo http://www.digitalinfo.nl/charts
$ helm repo add arm-stable https://peterhuene.github.io/arm-charts/stable

Eigen charts maken

Aanmaken van eigen charts kan gedaan worden met:

$ helm create mychart

Dit zal een directory aanmaken met de templates om een nieuwe chart te maken. Raadpleeg de Chart Development Guide voor informatie hierover.

Als de chart gereed is om geïnstalleerd te worden dient er een pakketje van gemaakt te worden met. Controle en packagen:

$ helm lint
$ helm package mychart

en vervolgens installeren met

$ helm install ./mychart.tgz