Správa verze Helm
Jak používat funkce v šabloně Helm
Jazyk šablony Helm definuje funkce, které slouží k transformaci hodnot ze souboru values.yaml
. Syntaxe funkce se řídí strukturou {{ názevFunkce arg1 arg2 ... }}. Pojďme se podívat na funkci quote
, která nám bude sloužit jako příklad použití této syntaxe.
Funkce quote
uzavře hodnotu do uvozovek, aby určila použití string
. Řekněme, že definujete následující values.yaml
soubor:
apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes
ingress:
enabled: true
Rozhodnete se, že při určování toho, jestli se má vygenerovat manifest příchozího přenosu dat, chcete použít hodnotu ingress.enabled
jako logickou hodnotu. Pokud chcete použít hodnotu enabled
jako logickou hodnotu, budete na ni odkazovat pomocí {{ .Values.ingress.enabled }}
.
Později se rozhodnete zobrazit pole jako řetězec v souboru templates/Notes.txt
. Vzhledem k tomu, že pravidla převodu typů YAML můžou vést k těžko najít chybám v šablonách, rozhodnete se postupovat podle pokynů a být explicitní při zahrnutí řetězců do šablon. Například enabled: false
se nerovná enabled: "false"
.
Pokud chcete zobrazit hodnotu jako řetězec, použijte pro odkazování na logickou hodnotu jako řetězec {{ quote .Values.ingress.enabled }}
.
Jak používat kanály v šabloně Helm
Kanály použijete, když s hodnotou potřebuje pracovat více funkcí. Kanál umožňuje odeslat hodnotu nebo výsledek funkce do jiné funkce. Můžete například přepsat výše uvedenou funkci quote
jako {{ .Values.ingress.enabled | quote }}
. Všimněte si, jak |
indikuje, že je hodnota odeslána do funkce quote
.
Tady je další příklad. Řekněme, že chcete převést hodnotu na velká písmena a zabalit ji do uvozovek. Příkaz můžete napsat jako {{ .Values.ingress.enabled | upper | quote }}
. Všimněte si, jak hodnotu zpracuje funkce upper
a potom funkce quote
.
Jazyk šablony zahrnuje více než 60 funkcí, které umožňují vystavovat, vyhledávat a transformovat hodnoty a objekty v šablonách.
Jak používat řízení podmíněného toku v šabloně Helm
Řízení podmíněného toku umožňuje zvolit strukturu nebo data zahrnutá ve vygenerovaném souboru manifestu. Můžete například chtít zahrnout různé hodnoty na základě cíle nasazení nebo ovládacího prvku, pokud se vygeneruje soubor manifestu.
Blok if / else
je taková struktura toku řízení a odpovídá následujícímu rozložení:
{{ if | pipeline | }}
# Do something
{{ else if | other pipeline | }}
# Do something else
{{ else }}
# Default case
{{ end }}
Řekněme, že se rozhodnete, že se soubor manifestu příchozího přenosu dat pro graf vytvoří jenom v konkrétních případech. Následující příklad ukazuje, jak toho dosáhnout pomocí if
příkazu:
{{ if .Values.ingress.enabled }}
apiVersion: extensions/v1
kind: Ingress
metadata:
name: ...
labels:
...
annotations:
...
spec:
rules:
...
{{ end }}
Nezapomeňte, že k naplnění metadat v šabloně můžete použít zástupné symboly. Soubory šablony se analyzují a následně vyhodnocují shora dolů jazykem šablony. V předchozím příkladu modul šablony generuje pouze obsah souboru manifestu, pokud .Values.ingress.enabled
je true
hodnota .
Když modul šablony zpracuje příkaz, odebere obsah deklarovaný uvnitř {{ }}
syntaxe a ponechá zbývající prázdné znaky. Tato syntaxe způsobí, že modul šablony zahrne nový řádek pro řádek příkazu if
. Pokud ponecháte obsah předchozího souboru tak, jak je, všimnete si prázdných řádků v YAML a vygeneruje se soubor manifestu příchozího přenosu dat.
YAML dává prázdnému znaku význam. Proto jsou tabulátory, mezery a znaky nového řádku považovány za důležité. Pokud chcete odstranit problém nechtěného prázdného znaku, můžete soubor přepsat následovně:
{{- if .Values.ingress.enabled -}}
apiVersion: extensions/v1
kind: Ingress
metadata:
name: ...
labels:
...
annotations:
...
spec:
rules:
...
{{- end }}
Všimněte si použití znaku -
jako součásti spouštěcí {{-
a koncové -}}
sekvence příkazu. Znak -
dává pokyn analyzátoru, aby odebral prázdné znaky. {{-
odstraní prázdné znaky na začátku řádku a -}}
na konci řádku, včetně znaku nového řádku.
Postup iterace kolekcí hodnot v šabloně Helm
YAML umožňuje definovat kolekce položek a použít jednotlivé položky jako hodnoty v šablonách. Přístup k položkám v kolekci je možný pomocí indexeru. Jazyk šablony Helm ale podporuje iteraci kolekce hodnot pomocí operátoru range
.
Řekněme, že definujete seznam hodnot v values.yaml
souboru, který indikuje další hostitele příchozího přenosu dat. Tady je příklad hodnot:
ingress:
enabled: true
extraHosts:
- name: host1.local
path: /
- name: host2.local
path: /
- name: host3.local
path: /
Pomocí operátoru rozsahu umožníte, aby modul šablony provedl iteraci v .Values.ingress.extraHosts
. Následující fragment kódu ukazuje zhuštěný příklad pomocí operátoru range
:
{{- if .Values.ingress.enabled -}}
apiVersion: extensions/v1
kind: Ingress
metadata:
...
spec:
rules:
...
{{- range .Values.ingress.extraHosts }}
- host: {{ .name }}
http:
paths:
- path: {{ .path }}
...
{{- end }}
...
{{- end }}
Řízení rozsahu hodnot v šabloně Helm
Pokud máte definované hodnoty v několika vrstvách hluboko, může být syntaxe zdlouhavá a těžkopádná, když tyto hodnoty zahrnete do šablony. Akce with
vám umožňuje rozsah proměnných v šabloně omezit.
Nezapomeňte, že .
použitý v šabloně Helm odkazuje na aktuální obor. Například .Values
dává modulu šablony pokyn, aby vyhledal objekt hodnot v aktuálním rozsahu. Řekněme, že k vytvoření souboru manifestu values.yaml
mapy konfigurace používáte soubor z předchozích verzí:
ingress:
enabled: true
extraHosts:
- name: host1.local
path: /
- name: host2.local
path: /
- name: host3.local
path: /
K hodnotám cesty jednotlivých položek nemusíte přistupovat pomocí {{ .Values.ingress.extraHosts.path }}
, můžete použít akci with
. Následující fragment kódu ukazuje příklad použití operátoru range
k vygenerování souboru manifestu mapování konfigurace:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
{{- with .Values.ingress.extraHosts }}
hostname: {{ .name }}
path: {{ .path }}
{{ end }}
{{- with .Values.ingress.extraHosts }}
omezuje rozsah hodnot na pole .Values.ingress.extraHosts
.
Akce with
omezuje rozsah. Z nadřazeného rozsahu nemůžete přistupovat k ostatním objektům. Řekněme, že chcete také získat přístup k {{ .Release.Name }}
grafu v with
bloku kódu. Pokud chcete získat přístup k nadřazeným objektům, musíte určit kořenový rozsah pomocí znaku $
nebo přepsat kód. Tady je aktualizovaný kód, který ukazuje, jak pomocí znaku $
zahrnout nadřazené objekty:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
{{- with .Values.ingress.extraHosts }}
hostname: {{ .name }}
path: {{ .path }}
release: {{ $.Release.Name}}
{{ end }}
Poznámka:
Jazyk šablony Helm obsahuje několik konstruktorů pro řízení toku. Souhrnná lekce tohoto modulu obsahuje oddíl s odkazy na dokumentaci k nástroji Helm, ve které se dozvíte další informaci.
Jak helm definovat závislosti grafu
Chart umožňuje deklaraci závislostí pro podporu hlavní aplikace a tvoří součást nainstalované verze.
Můžete buď vytvořit dílčí chart pomocí příkazu helm create
a určit umístění nového chartu ve složce /charts
, nebo použít příkaz helm dependency
. Nezapomeňte, že /charts
složka může obsahovat dílčí grafy nasazené v rámci vydání hlavního grafu.
Příkaz helm dependency
umožňuje spravovat závislosti zahrnuté z úložiště Helm. Příkaz používá metadata definovaná v části dependencies
souboru hodnot chartu. Zadáte název, číslo verze a úložiště, ze kterého se má dílčí graf nainstalovat. Tady je extrakce values.yaml
souboru, který obsahuje graf MongoDB uvedený jako závislost:
apiVersion: v2
name: my-app
description: A Helm chart for Kubernetes
...
dependencies:
- name: mongodb
version: 10.27.2
repository: https://marketplace.azurecr.io/helm/v1/repo
Po definování metadat závislosti spustíte příkaz helm dependency build
, který načte chart zabalený v souboru TAR. Příkaz pro sestavení chartu stáhne chart do složky charts/
.
helm dependency build ./app-chart
Dílčí grafy se spravují odděleně od hlavního grafu a můžou potřebovat aktualizace, jakmile budou k dispozici nové verze. Příkaz pro aktualizaci dílčích chartů je helm dependency update
. Tento příkaz načte nové verze dílčího grafu při odstraňování zastaralých balíčků.
helm dependency update ./app-chart
Mějte na paměti, že závislost grafu není omezena na jiné aplikace. Můžete se rozhodnout znovu použít logiku šablony v grafech a vytvořit závislost speciálně pro správu této logiky jako závislost grafu. Příklad této strategie získáte v dalším cvičení.
Postup upgradu verze Helm
Helm umožňuje upgradovat existující verze jako rozdíl všech změn, které platí pro chart a jeho závislosti.
Řekněme například, že vývojový tým příkladu webapp
v této lekci provádí změny kódu, které mají vliv jenom na funkčnost webu. Tým provede následující aktualizace Chart.yaml
souboru tak, aby odrážel novou verzi aplikace:
- Aktualizace image kontejneru webové aplikace a označí image jako
webapp: linux-v2
při nahrání image do registru kontejneru. dockerTag
Aktualizace hodnotu dolinux-v2
souboru hodnot grafu a hodnotu0.2.0
verze grafu.
Tady je příklad aktualizovaného values.yaml
souboru:
apiVersion: v2
name: my-app
description: A Helm chart for Kubernetes
type: application
version: 0.2.0
appVersion: 1.0.0
registry: "my-acr-registry.azurecr.io"
dockerTag: "linux-v2"
pullPolicy: "Always"
Místo odinstalace aktuální verze použijete helm upgrade
příkaz k upgradu stávající verze Helm.
helm upgrade my-app ./app-chart
Mějte na paměti, že Helm při upgradu verze vygeneruje rozdíl změn provedených v chartu Helm. Upgrade Helm proto upgraduje pouze komponenty zjištěné v rozdílu. V příkladu se znovu nasadí pouze web.
Po dokončení upgradu můžete pomocí příkazu s názvem vydané verze helm history
zkontrolovat historii nasazení verze.
helm history my-app
Příkaz historie vrátí několik polí, která popisují vydání, jak je znázorněno v následujícím příkladu výstupu:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 11 17:25:33 2021 deployed aspnet-core-1.3.18 3.1.19 Install complete
Ve výsledku si všimněte pole revision
. Helm sleduje informace o verzi všech verzí vytvořených pro chart Helm. Když nainstalujete novou verzi chartu Helm, počet revizí se zvýší o jednu a informace o nové verzi odpovídají této revizi.
Tady je příklad stejného příkazu historie, který spustí po instalaci nové verze webové aplikace:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 11 17:25:33 2021 superseded aspnet-core-1.3.18 3.1.19 Install complete
2 Mon Oct 11 17:35:13 2021 deployed aspnet-core-1.3.18 3.1.19 Upgrade complete
Postup vrácení verze Helm zpět
Helm umožňuje vrácení existující verze Helm zpět na dříve nainstalovanou verzi. Vzpomeňte si, že Helm sleduje informace o vydání všech verzí chartu Helm.
Pomocí příkazu helm rollback
se vrátíte zpět ke konkrétní revizi verze Helm. Tento příkaz používá dva parametry. První parametr určuje název verze a druhý označuje číslo revize verze.
helm rollback my-app 2
Příkaz helm rollback
vrátí zpět verzi aplikace na zadanou revizi a aktualizuje historii verzí aplikace. Následné spuštění helm history
příkazu zobrazuje nejnovější číslo aktivní revize jako položku nejnovější verze.
Řekněme například, že vývojový tým příkladu webapp
v této lekci zjistí chybu ve webové aplikaci pro sledování dronů a musí se vrátit k předchozí verzi. Místo odinstalace aktuální verze a instalace předchozí verze se vrátí k pracovní verzi.
helm rollback my-app 1
Po dokončení vrácení zpět můžete pomocí příkazu zkontrolovat historii helm history
nasazení.
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 11 17:25:33 2021 superseded aspnet-core-1.3.18 3.1.19 Install complete
2 Mon Oct 11 17:35:13 2021 superseded aspnet-core-1.3.18 3.1.19 Rolled back to 1
3 Mon Oct 11 17:38:13 2021 deployed aspnet-core-1.3.18 3.1.19 Upgrade complete
Všimněte si, že pole popisu zobrazuje číslo revize vrácení zpět, aby pro vás bylo jednodušší sledovat změny.