Hoe u software installeert op Kubernetes-clusters met de Helm 3-pakketbeheerder

Introductie

Helm is een pakketbeheerder voor Kubernetes waarmee ontwikkelaars en beheerders gemakkelijker applicaties kunnen configureren en implementeren op Kubernetes-clusters.

Helm-pakketten worden charts genoemd en ze bevatten sjablonen van brondefinities die apps implementeren en configureren met minimaal vereiste inspanning van de gebruiker. Met sjabloondesign kunt u het chart, de instellingen en het gedrag beheren door variabelendefinities door te geven zonder het daadwerkelijke chart te wijzigen. Aangepaste brondefinities, evenals wijzigingen in reeds geïmplementeerde definities, worden automatisch beheerd door Helm. Een geïmplementeerd chart, met mogelijke aanpassingen, wordt een release genoemd.

In deze tutorial zult u Helm 3 instellen en leren hoe u charts en releases kunt installeren, upgraden, terugdraaien en beheren. U leert ook uw eigen charts maken en verpakken, evenals het opzetten van chart-repositories, die charts hosten die u direct kunt installeren.

Vereisten

  • Een Kubernetes-cluster met role-based access control (RBAC) ingeschakeld. Voor verdere informatie over releases kunt u de Helm-releases pagina raadplegen.

  • De kubectl command-line tool geïnstalleerd op je lokale machine, geconfigureerd om verbinding te maken met je cluster. Je kunt meer lezen over het installeren van kubectl in de officiële documentatie.

    Je kunt je connectiviteit testen met het volgende commando:

    1. kubectl cluster-info

    Als je geen fouten ontvangt, ben je verbonden met het cluster. Als je toegang hebt tot meerdere clusters met kubectl, zorg er dan voor dat je hebt geverifieerd dat je het juiste clustercontext hebt geselecteerd door het volgende uit te voeren:

    1. kubectl config get-contexts

    De output zal de beschikbare configuraties weergeven:

    Output
    HUIDIGE NAAM CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-voorbeeld do-fra1-helm3-voorbeeld do-fra1-helm3-voorbeeld-admin

    Hier geeft het asterisk (*) aan dat we verbonden zijn met het do-fra1-helm3-voorbeeld cluster. Om van cluster te wisselen, voer het volgende uit:

    1. kubectl config use-context context-naam

Wanneer u verbonden bent met het juiste cluster, ga dan verder naar Stap 1 om Helm te installeren.

Stap 1 — Helm 3 installeren

In dit gedeelte zult u Helm 3 installeren met behulp van het officieel meegeleverde shell-script.

Begin door naar /tmp te navigeren, waar u het installatiescript zult opslaan door het volgende uit te voeren:

  1. cd /tmp

Download het script met het volgende commando:

  1. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

U kunt get_helm.sh in uw teksteditor bekijken om ervoor te zorgen dat het veilig is.

Maak het uitvoerbaar door de rechten als volgt in te stellen:

  1. chmod u+x get_helm.sh

Eindelijk, voer het uit om Helm 3 te installeren:

  1. ./get_helm.sh

Je krijgt een uitvoer vergelijkbaar met het volgende:

Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin helm installed into /usr/local/bin/helm

Je hebt Helm 3 geïnstalleerd op je machine. Je leert nu over kaartrepositories en hoe je ze kunt gebruiken.

Stap 2 — Het instellen van kaartrepositories

Helm-kaarten worden opgeslagen in kaartrepositories die door iedereen gehost kunnen worden. Standaard wordt Helm 3 niet vooraf geconfigureerd met een repository. Vorige versies van Helm omvatten een centrale samengestelde kaartrepository; echter, het ontwerp van Helm 3 is opzettelijk geëvolueerd naar kaartontwikkelaars die hun eigen repository beheren, wat meer vrijheid en snellere releases mogelijk maakt. Dit betekent dat je voor elke kaart die je wilt gebruiken, ervoor moet zorgen dat je de hostrepository toevoegt aan je Helm-installatie.

Om je te helpen de juiste repository te vinden, kun je ArtifactHub.io gebruiken, een open source website beheerd door de CNCF die Helm-kaarten en hun repositories catalogiseert. Het houdt ook populaire en nuttige kaarten bij die andere CNCF-projecten gebruiken, dus het verschilt van de stable-repository waar vorige versies van Helm van werkten. Voor veelvoorkomende projecten, zoals Nginx ingangen of bewakingstools, is het een geweldige bron.

Je kunt zoeken naar een kaart die je wilt installeren via de startpagina. Zoeken naar nginx zal alle geïndexeerde kaarten tonen die ermee te maken hebben.

U zult de community-editie installeren beheerd door het Kubernetes-team. Zoek naar ingress-nginx om het te vinden in uw resultaten. Selecteer het om toegang te krijgen tot de pagina ervan.

Elk diagram moet een beschrijving hebben waarin wordt uitgelegd wat het doet, samen met commando’s om de repository aan uw installatie toe te voegen en het diagram te installeren. Als dat niet het geval is, kunt u nog steeds de benodigde commando’s verkrijgen door op de INSTALLEREN-knop aan de rechterkant van de pagina te drukken.

U kunt op de blauwe knop naast een commando klikken om het te kopiëren. Doe dit voor het eerste commando en voer het uit:

  1. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

Om een repository aan Helm toe te voegen, voert u helm repo add uit. De parameters die het accepteert zijn de naam van de repo en de locatie ervan.

De uitvoer zal zijn:

Output
"ingress-nginx" has been added to your repositories

Wanneer u een nieuwe repo toevoegt, moet u Helm laten weten wat het bevat door het volgende uit te voeren:

  1. helm repo update

U ontvangt de volgende uitvoer, waaruit blijkt dat de update succesvol was:

Output
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈Happy Helming!⎈

In deze stap hebt u kennisgemaakt met ArtifactHub en wat het biedt. U hebt ook een nieuwe repo toegevoegd aan uw Helm-installatie. In de volgende stap zult u een Helm-diagram installeren.

Stap 3 — Het installeren van een Helm-diagram

In het vorige gedeelte hebt u de repo toegevoegd voor het ingress-nginx-diagram. U zult het nu installeren op uw cluster.

Elke grafiek heeft configuratievariabelen die u kunt instellen om het gedrag ervan te wijzigen. Deze variabelen worden opgeslagen in een bestand genaamd values.yaml dat deel uitmaakt van de grafiek. Tenzij u de grafiek naar uw machine hebt gedownload, moet u het volgende commando uitvoeren om het te bekijken:

  1. helm show values chart_name

Om beschikbare variabelen voor ingress-nginx weer te geven, vervangt u chart_name door:

  1. helm show values ingress-nginx/ingress-nginx

De uitvoer zal lang zijn en de inhoud van values.yaml voor ingress-nginx tonen.

Om een ​​grafiek te installeren, kunt u helm install gebruiken:

  1. helm install release_name repository/chart_name

A release is a deployed instance of the chart, and here you’re calling it ingress-nginx.

Dit commando zou de grafiek met de standaardwaarden van de variabelen in uw cluster installeren. Als u er enkele van wilt wijzigen, kunt u de nieuwe variabelewaarden doorgeven met --set:

  1. helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

U kunt --set herhalen voor zoveel variabelen als u nodig heeft. Aangezien we het nu niet zullen aanpassen, installeer het zoals het is door het volgende uit te voeren:

  1. helm install ingress-nginx ingress-nginx/ingress-nginx

De uitvoer zal vergelijkbaar zijn met het volgende:

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 10:12:37 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. It may take a few minutes for the LoadBalancer IP to be available. You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller' ...

Merk op dat de NAAM overeenkomt met de naam van de release die u heeft opgegeven. Helm geeft ook algemene informatie weer, zoals de releasestatus en de namespace waarin het is geïmplementeerd. De sectie NOTITIES varieert tussen grafieken en bevat meestal snelstartgidsen of waarschuwt voor veelvoorkomende valkuilen bij het gebruik van de resources van de grafiek. Hier staat dat de Load Balancer wordt gemaakt en dat dit enige tijd kan duren om te voltooien.

Om geïmplementeerde grafieken te controleren, gebruikt u helm list:

  1. helm list

U zult merken dat ingress-nginx momenteel de enige geïmplementeerde grafiek is:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Je kunt de services die het heeft in je cluster vinden door het volgende uit te voeren:

  1. kubectl get services

De output zal vergelijkbaar zijn met dit:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m

Nu je een release naar je cluster hebt gedeployed, zul je de configuratie aanpassen terwijl deze is gedeployed.

Stap 4 — Een release upgraden

Zodra een release is gedeployed, hoef je het niet volledig af te breken en opnieuw te deployen wanneer je de configuratie moet wijzigen. Je kunt het helm upgrade-commando gebruiken om de release te upgraden met een nieuwe versie van de grafiek, of om nieuwe instellingen in te stellen.

De ingress-nginx-grafiek blootstelt de controller.replicaCount-variabele die het aantal ingezette controller pods beheert. Standaard is dit ingesteld op één, wat je kunt verifiëren door de beschikbare pods op te lijsten:

  1. kubectl get pods

Je zult zien dat er slechts één is:

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

Als je wilt dat er meer worden ingezet voor redundantie (bijvoorbeeld drie), kun je de release upgraden en de variabele instellen op 3 door het volgende uit te voeren:

  1. helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

Je geeft ook --reuse-values door, wat Helm instrueert om je wijzigingen te baseren op de geïmplementeerde release, waarbij de vorige configuratie behouden blijft.

In de output zal Helm de revisie verhogen om aan te geven dat de release is geüpgraded:

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 12:07:54 2021 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: ...

Je kunt de beschikbare pods op lijsten door het volgende uit te voeren:

  1. kubectl get pods

Je zult zien dat er drie pods worden vermeld, in plaats van één:

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s

Volgende zult u wijzigingen terugdraaien en releases volledig verwijderen.

Stap 5 — Terugdraaien en Verwijderen van een Release

Wanneer u een release upgradet, wordt het revisienummer verhoogd. Intern slaat Helm alle revisies van een release op, zodat u indien nodig kunt terugkeren naar een vorige revisie.

Om het aantal pods terug te zetten naar slechts één, kunt u opnieuw helm upgrade uitvoeren en handmatig het aantal instellen omdat het een kleine wijziging is. Echter, bij het werken met grotere charts met veel variabelen is handmatig terugdraaien niet haalbaar en moet worden geautomatiseerd.

Om een release terug te draaien, gebruikt u helm rollback:

  1. helm rollback release_name release_revision

U kunt het gebruiken om de wijzigingen die u hebt aangebracht in ingress-nginx ongedaan te maken door terug te rollen naar revisie 1:

  1. helm rollback ingress-nginx 1

U ontvangt de volgende uitvoer, wat aangeeft dat de actie succesvol was:

Output
Rollback was a success! Happy Helming!

U kunt de huidige revisie controleren door de releases op te lijsten:

  1. helm list

U zult zien dat de revisie nu 3 is, en niet 1:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Helm beschouwt elke wijziging, inclusief terugrollen, als een nieuwe revisie van een release. U kunt controleren of revisie 3 gelijk is aan de eerste door het aantal ingezette pods te controleren door te draaien:

  1. kubectl get pods

U zult zien dat er slechts één is:

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

Om een release en al zijn revisies te verwijderen, kunt u helm delete gebruiken:

  1. helm delete release_name

Aangezien je het niet meer nodig hebt, verwijder ingress-nginx door het volgende commando uit te voeren:

  1. helm delete ingress-nginx

De uitvoer zal zijn:

Output
release "ingress-nginx" uninstalled

Je kunt de releases vermelden om te controleren dat er geen zijn:

  1. helm list

De uitvoertabel zal geen rijen hebben:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

Nu de release is verwijderd, kun je de naam opnieuw gebruiken voor toekomstige implementaties.

Stap 6 — (Optioneel) Aanpassen van Aangepaste Grafieken

In deze optionele stap leer je hoe je een aangepaste grafiek maakt, waar je je brondefinities plaatst en hoe je deze verpakt voor verdere distributie.

Je maakt een nieuwe grafiek genaamd example-chart. Voer het volgende commando uit om deze te maken:

  1. helm create example-chart

Dit zal een nieuwe directory genaamd example-chart met de volgende bestanden en structuur creëren:

example-chart/
charts/
templates/
├─ tests/
│  ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml

De brondefinities die je grafiek op doelclusters zal installeren, bevinden zich in de templates directory. De standaarddefinities die Helm heeft aangemaakt als startpunt implementeren een Nginx ingress-controller. Ook al hebben ze de bestandsextensie YAML, ze gebruiken de template-syntaxis van Go om aanpasbaar te blijven via blootgestelde variabelen die je kunt doorgeven. Je kunt de inhoud van service.yaml controleren door het volgende uit te voeren:

  1. cat example-chart/templates/service.yaml

Je zult zien dat het template-directieven heeft voor het genereren van waarden omgeven door dubbele accolades:

Output
apiVersion
: v1 kind: Service metadata: name: {{ include "mychart.fullname" . }} labels: {{- include "mychart.labels" . | nindent 4 }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http selector: {{- include "mychart.selectorLabels" . | nindent 4 }}

De gerefereerde variabelen worden blootgesteld aan de gebruiker en gedefinieerd in values.yaml. De tekst NOTES die Helm toont na implementatie wordt opgeslagen in NOTES.txt, en is ook getemplateerd. Chart metadata, zoals naam, versie, en versie van de software die wordt geïmplementeerd, wordt gespecificeerd in Chart.yaml:

example-chart/Chart.yaml
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes

...
type: application

...
version: 0.1.0

...
appVersion: "1.16.0"

Om te controleren wat Helm zou implementeren, kun je --dry-run en --debug doorgeven aan helm install wijzend naar de chart directory:

  1. helm install example-chart --dry-run --debug ./example-chart

De output zal lang zijn en alle definitieve resource-definities bevatten die zouden worden toegepast op je cluster. Terwijl je aan je chart werkt, kun je helm upgrade gebruiken om nieuwe versies naar Kubernetes te pushen.

Wanneer het tijd is om je voltooide chart te delen, kun je het verpakken voor distributie door te draaien:

  1. helm package ./example-chart

De output zal zijn:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

De verpakte chart kan worden geïnstalleerd net zoals degene uit toegevoegde repositories:

  1. helm install example-chart example-chart-0.1.0.tgz

In deze stap heb je een aangepaste chart gemaakt en geïmplementeerd. Je hebt het ook verpakt en geleerd over de structuur ervan.

Conclusie

Je weet nu hoe je Helm kunt gebruiken om software te installeren en bij te werken die is geïmplementeerd op je Kubernetes-cluster. Je hebt chart repositories toegevoegd, en geleerd waarom ze belangrijk zijn en hoe ArtifactHub je kan helpen ze te vinden. Je hebt ook een nieuwe aangepaste chart gemaakt en geleerd over release-revisies en hoe je indien nodig terug kunt rollen.

Voor meer informatie over het maken van aangepaste grafieken, bezoek de officiële gids.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-3-package-manager