Helm is een package manager voor Kubernetes. Helm gebruikt een package formaat genaamd 'Charts'. Een Chart is een verzameling bestanden die een gerelateerde set van Kubernetes resources beschrijft. Net zoals apt een packagemanager is die het beheer van software eenvoudiger maakt in Ubuntu en Debian, doet Helm dat voor Kubernetes resources.
In deze handleiding laten we zien hoe je gebruik maakt van de Helm-packagemanager. Zorg ervoor dat je onze Helm-packagemanager installatiehandleiding hebt doorlopen op de computer waarop je je Kubernetes-cluster beheert voordat je deze handleiding gebruikt.
- Op Artifact Hub vind je beschikbare Helm Charts en een aantal alternatieve repositories.
- Voor deze handleiding gaan we ervan uit dat je de Bitnami Helm-repository gebruikt.
Een Helm Chart gebruiken
Stap 1
Update voor je Helm gebruikt eerst (net als in Linux) de beschikbare repositories:
helm repo update
Stap 2
Op de Artifact Hub-website kun je zoeken op beschikbare Helm Charts. Een alternatief is om dit rechtstreeks vanuit command-line te doen met Helm:
helm search hub | grep softwarename
Als je je zoekresultaat niet specificeert met grep, krijg je alle beschikbare charts te zien in alle beschikbare repositories.
Alternatief kun je ook rechtstreeks de op jouw computer beschikbare repositories doorzoeken:
helm search repo
Je krijgt een vrij groot overzicht te zien, maar kunt je zoekopdracht altijd specificeren door een repository te specificeren en/of die te 'pipen' naar een grep-commando als volgt:
helm search repo bitnami | grep mysql
Stap 3
Voor je een Helm-chart installeert wil je allicht eerst de inhoud van de Chart zien. Dit kan eenvoudig met het commando:
helm show chart reponame/chartname
Om bij ons eerdere voorbeeld te blijven, kun je bijvoorbeeld de Helm Chart voor MySQL in de Bitnami-repository als volgt bekijken:
helm show chart bitnami/mysql
De inhoud van de Helm Chart kan bijvoorbeeld als volgt eruit zien:
annotations: category: Database apiVersion: v2 appVersion: 8.0.31 dependencies: - name: common repository: https://charts.bitnami.com/bitnami tags: - bitnami-common version: 2.x.x description: MySQL is a fast, reliable, scalable, and easy to use open source relational database system. Designed to handle mission-critical, heavy-load production applications. home: https://github.com/bitnami/charts/tree/main/bitnami/mysql icon: https://bitnami.com/assets/stacks/mysql/img/mysql-stack-220x234.png keywords: - mysql - database - sql - cluster - high availability maintainers: - name: Bitnami url: https://github.com/bitnami/charts name: mysql sources: - https://github.com/bitnami/containers/tree/main/bitnami/mysql - https://mysql.com version: 9.4.4
Stap 4
Zoals je gewend bent van een goede packagemanager, kun je een Helm Chart eenvoudig installeren. Hiervoor gebruik je het 'helm install'-commando, bijvoorbeeld:
helm install bitnami/mysql --generate-name
De output ziet er als volgt uit:
NAME: mysql-1670407849 LAST DEPLOYED: Wed Dec 7 11:10:51 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: mysql CHART VERSION: 9.4.4 APP VERSION: 8.0.31 ** Please be patient while the chart is being deployed ** Tip: Watch the deployment status using the command: kubectl get pods -w --namespace default Services: echo Primary: mysql-1670407849.default.svc.cluster.local:3306 Execute the following to get the administrator credentials: echo Username: root MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql-1670407849 -o jsonpath="{.data.mysql-root-password}" | base64 -d) To connect to your database: 1. Run a pod that you can use as a client: kubectl run mysql-1670407849-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.31-debian-11-r10 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash 2. To connect to primary service (read/write): mysql -h mysql-1670407849.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
- In dit voorbeeld krijgen we de naam mysql-1670407849 toegewezen. Wanneer je een Chart op deze manier installeert maak je een nieuwe 'release'. Het nummer in de naam is uniek en wordt dankzij de --generate-name flag gegenereerd. Dit betekent dat je meerdere MySQL-releases kunt maken met dezelfde chart binnen hetzelfde Kubernetes-cluster. Deze krijgen een unieke release naam toegewezen dankzij de --generate-name toevoeging en kunnen onafhankelijk van elkaar beheerd worden.
- Eventuele aanvullende stappen, zoals hier nodig zijn om met je database te verbinden, worden normaal gesproken getoond in de output van het installatie-commando.
- Meer informatie over het helm install commando vind je hier.
Alternatief kun je ook zelf een naam kiezen. Dit is handig wanneer je op een eenvoudigere manier wil onthouden welke namen je releases hebben en gebruik maakt van de --keep-history flag, zie de volgende paragraaf.
helm install yourcustomname bitnami/mysql
De installatie van je Helm Chart is daarmee voltooid.
Let op: de MySQL Helm Chart van Bitnami bevat op moment van schrijven een bug waardoor de aangemaakte Pod niet kan starten. Voor enkele oplossingen, zie deze pagina.
Helm Charts bewerken voor installatie
In bepaalde gevallen is het wenselijk om een Helm Chart aan te passen, bijvoorbeeld als je de configuratie wil aanpassen, of er een bug zit in de Helm Chart. Gelukkig kun je Helm Charts relatief eenvoudig downloaden en aanpassen in enkele stappen:
Stap 1
Download de betreffende Helm Chart met het commando:
helm pull repo/chartnaam --untar
- Vervang hier repo door de naam van de repository en chartnaam door de naam van de Helm Chart, bijvoorbeeld bitnami/mysql.
- De Chart wordt opgeslagen in een nieuwe directory binnen de directory waar je op dit moment vanuit werkt, bijvoorbeeld ~/mysql
Stap 2
In de zojuist aangemaakte folder (in ons voorbeeld ~/mysql) vind je alle bestanden die een onderdeel vormen van de Helm Chart. In de praktijk pas je meestal enkel het bestand values.yaml aan dat zich in de root-directory bevindt, in ons voorbeeld is dat ~/mysql/values.yaml.
Stap 3
Na het aanpassen van de Helm Chart pak je deze in met het commando:
helm package chartnaam
- Vervang chartnaam door de naam van de directory die in Stap 1 is aangemaakt, bijvoorbeeld mysql.
- Je krijgt na het uitvoeren van dit commando de directory en naam van de ingepakte Helm Chart te zien. Deze heb je nodig in stap 4.
Stap 4
Installeer de Helm Chart met het commando:
helm install chartnaam /directory/subdirectory/package-versie.tgz
Vervang zoals eerder chartnaam door de naam van de chart en de directory en bestandsnaam door degene die in stap 3 getoond zijn.
Helm releases beheren
Wanneer een Helm Chart geïnstalleerd is, spreekt men over een 'release'. In deze paragraaf doorlopen we een aantal handige beheercommando's voor het managen van Helm Charts op jouw Kubernetes-cluster.
Releases controleren
Alle releases op je cluster zie je eenvoudig terug met het commando:
helm list
De output ziet er als volgt uit (let op de scroll balk):
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql-1670416172 default 1 2022-12-07 13:29:33.9111825 +0100 STD deployed mysql-9.4.4 8.0.31
Specifiekere informatie vergelijkbaar met de output van het 'helm install'-commando vraag je op met:
helm status releasename
Een release verwijderen
Een release verwijder je even eenvoudig als dat je hem installeert:
helm uninstall releasename
Vervang hierbij 'releasename' door de naam van de release zoals zichtbaar onder 'NAME' in de output van het 'helm list'-commando.
Optioneel kun je de flag --keep-history toevoegen. Dit is een handige optie om de informatie over de release te behouden:
helm uninstall releasename --keep-history
Je kunt dan later de history van de release 'releasename' terugbekijken met het commando:
helm history releasename
Helm gaat zelfs nog een stapje verder: je kunt met deze informatie ook een release na de-installatie weer terugrollen met het commando:
helm rollback releasename revision
Het revision nummer zie je terug in de output van het helm history commando.