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 vankubectl
in de officiële documentatie.Je kunt je connectiviteit testen met het volgende commando:
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:De output zal de beschikbare configuraties weergeven:
OutputHUIDIGE NAAM CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-voorbeeld do-fra1-helm3-voorbeeld do-fra1-helm3-voorbeeld-adminHier geeft het asterisk (
*
) aan dat we verbonden zijn met hetdo-fra1-helm3-voorbeeld
cluster. Om van cluster te wisselen, voer het volgende uit:
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:
Download het script met het volgende commando:
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:
Eindelijk, voer het uit om Helm 3 te installeren:
Je krijgt een uitvoer vergelijkbaar met het volgende:
OutputDownloading 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:
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:
U ontvangt de volgende uitvoer, waaruit blijkt dat de update succesvol was:
OutputHang 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:
Om beschikbare variabelen voor ingress-nginx
weer te geven, vervangt u chart_name
door:
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:
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
:
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:
De uitvoer zal vergelijkbaar zijn met het volgende:
OutputNAME: 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
:
U zult merken dat ingress-nginx
momenteel de enige geïmplementeerde grafiek is:
OutputNAME 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:
De output zal vergelijkbaar zijn met dit:
OutputNAME 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:
Je zult zien dat er slechts één is:
OutputNAME 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:
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:
OutputNAME: 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:
Je zult zien dat er drie pods worden vermeld, in plaats van één:
OutputNAME 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 upgrade
t, 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
:
U kunt het gebruiken om de wijzigingen die u hebt aangebracht in ingress-nginx
ongedaan te maken door terug te rollen naar revisie 1
:
U ontvangt de volgende uitvoer, wat aangeeft dat de actie succesvol was:
OutputRollback was a success! Happy Helming!
U kunt de huidige revisie controleren door de releases op te lijsten:
U zult zien dat de revisie nu 3
is, en niet 1
:
OutputNAME 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:
U zult zien dat er slechts één is:
OutputNAME 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:
Aangezien je het niet meer nodig hebt, verwijder ingress-nginx
door het volgende commando uit te voeren:
De uitvoer zal zijn:
Outputrelease "ingress-nginx" uninstalled
Je kunt de releases vermelden om te controleren dat er geen zijn:
De uitvoertabel zal geen rijen hebben:
OutputNAME 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:
Dit zal een nieuwe directory genaamd example-chart
met de volgende bestanden en structuur creëren:
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:
Je zult zien dat het template-directieven heeft voor het genereren van waarden omgeven door dubbele accolades:
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
:
Om te controleren wat Helm zou implementeren, kun je --dry-run
en --debug
doorgeven aan helm install
wijzend naar de chart directory:
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:
De output zal zijn:
OutputSuccessfully 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:
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.