Helm Values
Ziel
In diesem Projekt geht es um das Anpassen von Helm Releases über Values. Sie werden:
- die Default Values eines Charts anzeigen
- Values mit
--setüberschreiben - Values über eine eigene YAML-Datei setzen
- angepasste Values wieder zurücksetzen
- mit
helm templateKubernetes-Manifeste rendern, ohne sie zu installieren
Hilfsmittel
- Dieses Lab baut auf dem Lab
03-helm-grundlagen.md.jinjaauf. - Das Release
docker-demoappwurde bereits im vorherigen Lab im Namespacehelm-demoinstalliert. - Verwenden Sie weiterhin das Chart
corewire/docker-demoapp. - Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Aufgabe 1 - Ausgangszustand prüfen
Das Chart wurde bereits im vorherigen Lab als Release docker-demoapp im Namespace
helm-demo installiert. In dieser Aufgabe prüfen Sie zunächst den aktuellen Zustand.
1.1: Release anzeigen
- Lassen Sie sich alle Releases im Namespace
helm-demoanzeigen. - Prüfen Sie, ob das Release
docker-demoappvorhanden ist.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm list --namespace helm-demo - Die Ausgabe sollte das Release
docker-demoappenthalten. - Der Status sollte
deployedsein.
1.2: Release-Status anzeigen
- Lassen Sie sich den Status des Releases
docker-demoappanzeigen.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm status docker-demoapp --namespace helm-demo - Die Ausgabe zeigt unter anderem:
- den Release-Namen
- den Namespace
- den Status
- die Revision
- Hinweise aus den Chart-Notes, falls vorhanden
Aufgabe 2 - Default Values anzeigen
Helm Charts enthalten Standardwerte. Diese Werte werden verwendet, wenn Sie bei der Installation oder beim Upgrade keine eigenen Werte übergeben.
2.1: Default Values des Charts anzeigen
- Lassen Sie sich die Default Values des Charts
corewire/docker-demoappanzeigen. - Suchen Sie in der Ausgabe nach folgenden Bereichen:
replicaCountimageserviceingressdatabase
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm show values corewire/docker-demoapp - Die Ausgabe ist eine YAML-Datei mit den Standardwerten des Charts.
- Diese Werte können bei einem späteren
helm upgradeüberschrieben werden.
Aufgabe 3 - Aktive Values eines Releases anzeigen
Die Default Values des Charts sind nicht automatisch dasselbe wie die Values eines installierten Releases. Ein Release kann mit eigenen Werten installiert oder später angepasst worden sein.
3.1: Explizit gesetzte Values anzeigen
- Lassen Sie sich anzeigen, welche Values beim Release
docker-demoappexplizit gesetzt wurden.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm get values docker-demoapp --namespace helm-demo - Da bisher keine eigenen Werte gesetzt wurden, sollte die Ausgabe
nullsein.
3.2: Alle aktiven Values anzeigen
- Lassen Sie sich alle aktiven Values des Releases anzeigen.
- Achten Sie darauf, wie sich die Ausgabe von
helm get valuesunterscheidet.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm get values docker-demoapp --namespace helm-demo --all - Mit
--allzeigt Helm auch die Default Values an, die für das Release gelten. - Ohne
--allzeigt Helm nur Werte an, die explizit gesetzt wurden.
Release Values
Helm unterscheidet zwischen den Default Values eines Charts und den Values, die für ein konkretes Release gesetzt wurden.
Aufgabe 4 - Values mit --set anpassen
Mit --set können Sie einzelne Values direkt auf der Kommandozeile überschreiben.
Das ist praktisch für kleine Änderungen.
4.1: Anzahl der Replicas ändern
- Aktualisieren Sie das Release
docker-demoapp. - Setzen Sie
replicaCountauf5. - Verwenden Sie dafür
helm upgradeund--set.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm upgrade docker-demoapp corewire/docker-demoapp \ --namespace helm-demo \ --set replicaCount=5 - Helm erstellt dabei eine neue Revision des Releases.
4.2: Änderung prüfen
- Prüfen Sie, ob das Deployment nun auf drei Replicas konfiguriert ist.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
kubectl get deployment --namespace helm-demo -
Sie sollten sehen, dass das Deployment drei gewünschte Replicas hat.
-
Alternativ können Sie das konkrete Deployment genauer untersuchen:
kubectl describe deployment docker-demoapp --namespace helm-demo
4.3: Gesetzte Values anzeigen
- Lassen Sie sich anzeigen, welche Values nun explizit für das Release gesetzt wurden.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm get values docker-demoapp --namespace helm-demo - Die Ausgabe sollte ungefähr so aussehen:
USER-SUPPLIED VALUES: replicaCount: 5
4.4: Release-Historie anzeigen
- Lassen Sie sich die Historie des Releases anzeigen.
- Prüfen Sie, ob durch das Upgrade eine neue Revision entstanden ist.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm history docker-demoapp --namespace helm-demo - Sie sollten sehen, dass eine neue Revision angelegt wurde.
--set
Mit --set können einzelne Values direkt auf der Kommandozeile gesetzt werden.
Das eignet sich gut für einfache Werte wie Zahlen, Strings oder Booleans.
Aufgabe 5 - Values über eine YAML-Datei anpassen
Für mehrere oder komplexere Werte ist eine eigene Values-Datei übersichtlicher.
Diese Datei kann mit -f oder --values an Helm übergeben werden.
5.1: Eigene Values-Datei erstellen
- Erstellen Sie eine Datei mit dem Namen
custom-values.yaml. - Setzen Sie darin folgende Werte:
replicaCountauf7database.enabledauftrue
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
-
Erstellen Sie die Datei mit folgendem Inhalt:
replicaCount: 7 database: enabled: true -
Sie können die Datei zum Beispiel mit
caterstellen:cat > custom-values.yaml <<'EOF' replicaCount: 1 service: type: ClusterIP database: enabled: true EOF
5.2: Release mit Values-Datei aktualisieren
- Aktualisieren Sie das Release
docker-demoapp. - Verwenden Sie die Datei
custom-values.yaml.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm upgrade docker-demoapp corewire/docker-demoapp \ --namespace helm-demo \ --values custom-values.yaml
5.3: Änderung prüfen
- Prüfen Sie, ob das Deployment nun 7 Replicas verwendet.
- Prüfen Sie außerdem, ob zusätzliche Datenbank-Ressourcen erstellt wurden.
- Rufen Sie die Anwendung im Browser auf und prüfen Sie, dass die Datenbankverbindung funktioniert.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgende Befehle aus:
kubectl get deployment --namespace helm-demo kubectl get pods --namespace helm-demo - Sie sollten sehen, dass:
- die Demo-App auf 7 Replicas skaliert wurde
- zusätzliche Ressourcen für die Datenbank vorhanden sind
- Rufen Sie die Anwendung im Browser auf:
kubectl get service docker-demoapp --namespace helm-demo - Suchen Sie die externe IP-Adresse und den Port des Services und rufen Sie die Anwendung auf.
5.4: Gesetzte Values anzeigen
- Lassen Sie sich die explizit gesetzten Values anzeigen.
- Vergleichen Sie die Ausgabe mit Ihrer Datei
custom-values.yaml.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm get values docker-demoapp --namespace helm-demo - Die Ausgabe sollte die Werte aus Ihrer Datei enthalten.
Values-Dateien
Values-Dateien eignen sich besser als --set, wenn mehrere Werte geändert
werden sollen oder wenn eine Konfiguration versioniert werden soll.
5.5: Values Datei erweitern
Im folgenden wollen wir eine Ingress route eirichten und den externen Loadbalancer des Services entfernen.
- Erweitern Sie die Datei
custom-values.yamlum folgende Werte:service.typeaufClusterIPingress.enabledauftrueingress.hostaufdemoapp.cluster.<vscode-domain>
- Aktualisieren Sie das Release erneut mit der erweiterten Datei.
- Rufen Sie die Anwendung im Browser über die neue Ingress-Route auf und prüfen Sie, dass sie erreichbar ist.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
-
Erweitern Sie die Datei
custom-values.yamlum folgende Werte:service: type: ClusterIP ingress: enabled: true host: demoapp.cluster.<vscode-domain> -
Aktualisieren Sie das Release erneut:
helm upgrade docker-demoapp corewire/docker-demoapp \ --namespace helm-demo \ --values custom-values.yaml - Sie sollten nun sehen, dass der Service-Typ auf
ClusterIPgeändert wurde und eine Ingress-Route eingerichtet wurde.
Aufgabe 6 - Kubernetes YAML mit helm template rendern
Mit helm template können Sie sich anzeigen lassen, welche Kubernetes-Manifeste Helm
erzeugen würde. Dabei wird nichts im Cluster installiert oder verändert.
6.1: Manifeste aus dem Chart rendern
- Rendern Sie das Chart lokal mit
helm template. - Verwenden Sie als Release-Namen
docker-demoapp. - Verwenden Sie den Namespace
helm-demo. - Speichern Sie die gerenderten Manifeste in einer Datei.
- Öffnen Sie die Datei anschließend und sehen Sie sich die erzeugten Kubernetes-Ressourcen an.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm template docker-demoapp corewire/docker-demoapp --namespace helm-demo > rendered.yaml - Die Ausgabe enthält Kubernetes YAML.
- Diese Ressourcen werden nur angezeigt, aber nicht im Cluster erstellt.
6.2: Template-Ausgabe mit --set verändern
- Rendern Sie das Chart erneut.
- Setzen Sie dabei
replicaCountauf4. - Suchen Sie in der Ausgabe nach dem Feld
replicas.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm template docker-demoapp corewire/docker-demoapp \ --namespace helm-demo \ --set replicaCount=4 > rendered.yaml - Sie sollten in der Datei einen Abschnitt ähnlich zu diesem finden:
spec: replicas: 4
6.3: Template-Ausgabe mit Values-Datei verändern
- Rendern Sie das Chart mit der Datei
custom-values.yaml. - Vergleichen Sie die Ausgabe mit der vorherigen Template-Ausgabe.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm template docker-demoapp corewire/docker-demoapp \ --namespace helm-demo \ --values custom-values.yaml > rendered.yaml - Sie sollten sehen, dass die Werte aus
custom-values.yamlin die generierten Manifeste übernommen werden. - Wenn
database.enabled: truegesetzt ist, sollten auch Datenbank-Manifeste gerendert werden.
helm template
helm template rendert ein Chart lokal zu Kubernetes YAML.
Dabei wird kein Release erstellt und der Cluster wird nicht verändert.
Der Befehl eignet sich gut, um Änderungen vor einem helm install oder
helm upgrade zu prüfen.
Aufgabe 7 - Abschluss
7.1: Release-Historie anzeigen
- Prüfen Sie, welche Revisionen durch die Upgrades entstanden sind.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Führen Sie folgenden Befehl aus:
helm history docker-demoapp --namespace helm-demo
- Sie haben nun die Default Values eines Helm Charts angezeigt.
- Sie haben Values mit
--setangepasst. - Sie haben Values über eine eigene YAML-Datei gesetzt.
- Sie haben mit
helm templateKubernetes-Manifeste gerendert, ohne den Cluster zu verändern.