Wat is Helm en hoe gebruik je charts?
Auteur: Redactie Domeny.ForSale Gepubliceerd
Kort samengevat: Helm is een pakketbeheerder voor Kubernetes: een hulpmiddel dat het installeren, configureren en bijwerken van applicaties in een cluster eenvoudiger maakt. In plaats van allerlei bestanden met applicatiebeschrijvingen afzonderlijk te beheren, gebruik je een pakket dat een chart heet en geef je daar je eigen instellingen aan mee. Helm helpt ook om opeenvolgende uitrolacties bij te houden, maar vervangt Kubernetes niet en garandeert niet dat een update veilig verloopt.
Welk probleem lost Helm op?
Kubernetes is een systeem dat applicaties in containers start en beheert. Een cluster, een omgeving van machines die door Kubernetes worden beheerd, heeft een beschrijving nodig van wat het moet uitvoeren. Die beschrijving leg je meestal vast in manifesten: YAML-bestanden die resources definiëren, zoals een Deployment die applicatie-instanties beheert of een Service die deze bereikbaar maakt.
Eén applicatie kan enkele tot meer dan tien van zulke resources nodig hebben. Als je de applicatie afzonderlijk in een testomgeving en een productieomgeving draait, zijn sommige instellingen gelijk en andere verschillend: het aantal instanties, het domeinadres, de versie van de containerimage of de geheugenlimieten. Handmatig manifesten kopiëren maakt het lastiger om alles consistent te houden.
Met Helm kun je de sjablonen voor deze resources in één pakket bundelen. Op basis van de sjablonen en de configuratie genereert het manifesten, die het vervolgens aan Kubernetes doorgeeft. Het principe lijkt op dat van een pakketbeheerder in een besturingssysteem, maar Helm beheert resources in een cluster in plaats van programma’s die je op een laptop installeert.
Chart, release en values — drie basisbegrippen
Een chart is een pakket voor Helm met sjablonen voor resources van Kubernetes, standaardinstellingen en informatie over het pakket. Het kan één applicatie of een verzameling samenhangende componenten beschrijven. Een chart kan ook afhankelijkheden hebben en dus andere charts gebruiken.
Een release is een specifieke installatie van een chart in een cluster, met een eigen naam. Je kunt dezelfde chart meerdere keren installeren, bijvoorbeeld als winkel-test en winkel-prod, met verschillende instellingen. Een release betekent dus niet alleen een applicatieversie: de naam identificeert een installatie die door Helm wordt beheerd.
Values zijn configuratiewaarden die in de sjablonen worden ingevuld. Een chart bevat meestal een standaardbestand values.yaml, en de gebruiker kan een extra bestand met eigen instellingen meegeven. Welke parameters beschikbaar zijn, hangt af van de chart; Helm schrijft geen universeel configuratieveld voor dat voor elke applicatie geldt.
Een eenvoudige chart kan bijvoorbeeld deze structuur hebben:
mijn-applicatie/
├── Chart.yaml
├── values.yaml
└── templates/
├── deployment.yaml
└── service.yaml
Het bestand Chart.yaml beschrijft het pakket, values.yaml bevat de standaardconfiguratie en de map templates bevat de sjablonen. De versie van een chart en de versie van een applicatie zijn verschillende dingen: een wijziging in de manier van uitrollen hoeft niet te betekenen dat het programma zelf verandert.
Hoe rol je een applicatie uit met Helm?
Stel dat een team een winkelapplicatie beheert. In de testomgeving is één instantie nodig, in productie drie. Het team kan één chart en twee configuratiebestanden gebruiken, in plaats van twee afzonderlijke kopieën van de manifesten te maken.
Als de chart de parameter replicaCount ondersteunt, kan het bestand values-test.yaml het volgende bevatten:
replicaCount: 1
In het onderstaande voorbeeld gaan we ervan uit dat je Helm hebt geïnstalleerd, toegang tot een cluster hebt en een lokale chart in de map mijn-applicatie hebt staan. Je kunt eerst de manifesten genereren zonder de applicatie te installeren:
helm template winkel-test ./mijn-applicatie -f values-test.yaml
Zo kun je het resultaat van de sjablonen controleren. Dat bevestigt echter nog niet dat het cluster alle resources zal accepteren of dat de applicatie zal werken. Om de release te installeren of bij te werken, voer je dit commando uit:
helm upgrade --install winkel-test ./mijn-applicatie \
-f values-test.yaml --namespace test --create-namespace
Een namespace is een logisch afgebakende ruimte voor resources in het cluster. De optie --install maakt installatie mogelijk als de release nog niet bestaat; anders werkt het commando de bestaande release bij. Controleer vóór het uitvoeren de huidige context van Kubernetes, zodat je de applicatie niet per ongeluk naar productie uitrolt.
Updates en de beperkingen van terugdraaien
Helm houdt een geschiedenis bij van opeenvolgende revisies van een release: wijzigingen in de uitgerolde installatie. Het commando helm history winkel-test -n test toont die geschiedenis, en met helm rollback kun je teruggaan naar een eerdere revisie.
Een rollback is geen back-up van de applicatie of haar gegevens. Het terugdraaien van de resourceconfiguratie maakt niet automatisch databasemigraties, wijzigingen in een externe dienst of de gevolgen van het draaien van het programma ongedaan. Voor updates van applicaties die gegevens opslaan, heb je een apart plan nodig voor back-ups en versiecompatibiliteit.
Ook met Helm blijft kennis van Kubernetes nodig. Onjuiste resourcelimieten, ontbrekende rechten of een onjuiste containerimage kunnen verhinderen dat een applicatie start, ongeacht of de manifesten handmatig zijn gemaakt of uit een chart komen.
Wanneer kies je Helm en hoe beoordeel je een bestaande chart?
Helm is nuttig als je applicaties herhaaldelijk uitrolt, meerdere omgevingen beheert of een applicatie installeert die uit veel resources bestaat. Bij een paar eenvoudige manifesten die zelden veranderen, kan het een overbodige sjabloonlaag toevoegen. Kustomize kan een alternatief zijn: het past bestaande manifesten aan in plaats van sjablonen van Helm te gebruiken.
Controleer voordat je een bestaande chart gebruikt de herkomst, de documentatie, de vereiste versies van Kubernetes, de rechten en de manier waarop persistente gegevens worden verwerkt. Bekijk de gegenereerde manifesten, vooral resources die rechten toekennen en services die de applicatie buiten het cluster bereikbaar maken. Wachtwoorden in een values-bestand worden niet veilig doordat je Helm gebruikt: sla ze niet op in een gewone coderepository.
Begin met een testomgeving en één chart. Controleer in de documentatie van de specifieke chartversie welke parameters beschikbaar zijn. Test daarna de installatie, het bijwerken en wat er met de gegevens gebeurt wanneer je wijzigingen terugdraait.
Zie ook: Wat is Brave?
