Vytvoření a instalace chartu Helm
Charty Helm usnadňují nasazování aplikací do libovolného clusteru Kubernetes. Pomocí nástroje Helm můžete vytvořit šablonu informací nasazení aplikace jako chart Helm, který pak použijete k nasazení aplikace.
Řekněme, že váš vývojový tým už nasadil web obchodu s domácími mazlíčky vaší společnosti do clusteru AKS. Tým vytvoří tři soubory pro nasazení webu:
- Manifest nasazení, který popisuje, jak nainstalovat a spustit aplikaci v clusteru,
- Manifest služby, který popisuje, jak zveřejnit web v clusteru, a
- Manifest příchozího přenosu dat, který popisuje, jak se provoz mimo cluster směruje do webové aplikace.
Tým tyto soubory nasadí do každého ze tří prostředí v rámci životního cyklu vývoje softwaru. Každý z těchto tří souborů se aktualizuje pomocí proměnných a hodnot, které jsou pro dané prostředí specifické. Vzhledem k tomu, že každý soubor je pevně zakódovaný, je údržba těchto souborů náchylná k chybám.
Jak Helm zpracovává chart?
Klient Helm implementuje modul šablon založený na jazyce, který analyzuje všechny dostupné soubory ve složkách chartu. Modul šablon vytvoří soubory manifestu Kubernetes kombinováním šablon ve složce templates/
chartu s hodnotami ze souborů Chart.yaml
a values.yaml
.
Jakmile jsou soubory manifestu k dispozici, může klient instalovat, upgradovat a odstranit aplikaci definovanou ve vygenerovaných souborech manifestu.
Postup definice souboru Chart.yaml
Chart.yaml
je jeden z požadovaných souborů v definici chartu Helm a poskytuje informace o chartu. Obsah souboru se skládá ze tří povinných polí a různých nepovinných polí.
Mezi tři povinná pole patří:
apiVersion
: Verze rozhraní API grafu, která se má použít. Verzi nastavíte prov2
grafy, které používají Helm 3.name
: Název grafu.version
: Číslo verze grafu, který používá sémantickou verzi 2.0.0 a řídí se zápisemMAJOR.MINOR.PATCH
čísla verze.
Následující příklad ukazuje obsah základního Chart.yaml
souboru:
apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore, cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0
Všimněte si použití type
pole v ukázkovém souboru. Můžete vytvořit charty k instalaci aplikací nebo knihoven. Výchozí typ chartu je application
a lze ho nastavit na hodnotu library
a určit tak, že má chart nainstalovat knihovnu.
K dispozici je mnoho volitelných polí pro přizpůsobení procesu nasazení grafu. Pole můžete například použít dependencies
k určení dalších požadavků pro graf, jako je webová aplikace, která závisí na databázi.
Poznámka:
Podrobné pokrytí všech nepovinných polí je mimo rozsah tohoto modulu. V oddílu souhrnu modulu je ale k dispozici odkaz na dokumentaci k nástroji Helm.
Postup definice šablony chartu
Šablona chartu Helm je soubor popisující různé soubory manifestu typu nasazení. Šablony grafů jsou napsané v jazyce šablony Go a poskytují funkce šablon pro automatizaci vytváření souborů manifestu objektů Kubernetes.
Soubory šablon se ukládají do templates/
složky grafu. Modul šablony tyto soubory zpracuje za účelem vytvoření konečného manifestu objektu.
Řekněme například, že váš vývojový tým používá následující soubor manifestu nasazení k nasazení přední komponenty řešení pro obchod s domácími mazlíčky:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: store-front
template:
metadata:
labels:
app: store-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
- containerPort: 8080
name: store-front
env:
- name: VUE_APP_ORDER_SERVICE_URL
value: "http://order-service:3000/"
- name: VUE_APP_PRODUCT_SERVICE_URL
value: "http://product-service:3002/"
resources:
requests:
cpu: 1m
memory: 200Mi
limits:
cpu: 1000m
memory: 512Mi
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 3
periodSeconds: 3
livenessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 5
initialDelaySeconds: 3
periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
ports:
- port: 80
targetPort: 8080
selector:
app: store-front
Všimněte si, jak je umístění image kontejneru pevně zakódované pomocí {{.Values.<property>}}
syntaxe. Tato syntaxe umožňuje vytvořit pro každou vlastní hodnotu zástupný symbol.
Proces vytváření chartů Helm ručně je zdlouhavý. Snadným způsobem, jak vytvořit chart Helm, je použít příkaz helm create
a vytvořit nový chart Helm. Automaticky vygenerované soubory pak můžete přizpůsobit, aby odpovídaly požadavkům vaší aplikace.
Postup definice souboru values.yaml
K přizpůsobení konfigurace chartu Helm slouží hodnoty chartu. Hodnoty chartu mohou být předdefinované nebo je v době nasazení chartu zadává uživatel.
Předdefinovaná hodnota je hodnota citlivá na malá a velká písmena, která je předdefinovaná v kontextu chartu Helm a uživatel ji nemůže změnit. Pomocí Release.Name
můžete například odkazovat na název verze, nebo můžete použít Release.IsInstall
a ověřit, jestli je aktuální operací instalace.
Můžete také použít předdefinované hodnoty k extrakci dat z obsahu objektu Chart.yaml
. Pokud třeba chcete zjistit verzi daného chartu, měli byste odkazovat na Chart.Version
. Mějte na paměti, že můžete odkazovat jenom na dobře známá pole. Předdefinované hodnoty si můžete představit jako konstanty, které se použijí ve vámi vytvořených šablonách.
Syntaxe pro zahrnutí názvů hodnot do souboru šablony zahrnuje uzavření názvu hodnoty do dvojitých složených závorek, {{.Release.Name}}
například . Všimněte si tečky před názvem hodnoty. Když tečku použijete tímto způsobem, bude fungovat jako operátor vyhledávání a indikovat aktuální rozsah proměnné.
Například následující fragment kódu YAML obsahuje slovník definovaný v souboru hodnot:
object:
key: value
Pro přístup k hodnotě v šabloně můžete použít následující syntaxi:
{{ .Values.object.key }}
Zadaná hodnota umožňuje zpracovat libovolné hodnoty v šabloně chartu. Tyto hodnoty jsou definovány v souboru values.yaml
.
Vývojový tým v tomto příkladu umožňuje následující konfigurovatelné hodnoty:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
...
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
...
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
...
Tady je příklad values.yaml
souboru:
...
replicaCount: 1
...
storeFront:
image:
repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
tag: "latest"
serviceType: LoadBalancer
...
Jakmile modul šablony hodnoty použije, bude konečný výsledek vypadat jako v tomto příkladu:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: 1
...
containers:
- name: store-front
image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
ports:
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: LoadBalancer
...
Postup použití úložiště Helm
Úložiště Helm je vyhrazený server HTTP, který ukládá informace o chartech Helm. Úložiště Helm konfigurujete s klientem Helm, aby se pomocí příkazu helm repo add
instalovaly charty z úložiště.
Úložiště Helm z Azure Marketplace můžete například přidat do místního klienta Helm spuštěním následujícího příkazu:
helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo
Informace o chartech dostupných v úložišti jsou uloženy v mezipaměti hostitele klienta. Mezipaměť je potřeba pravidelně aktualizovat, aby se pomocí helm repo update
příkazu načítá nejnovější informace úložiště.
Příkaz helm search repo
umožňuje hledat grafy ve všech místně přidaných úložištích Helm. Příkaz helm search repo
můžete spustit samostatně, aby vrátil seznam všech známých chartů Helm pro každé přidané úložiště. Výsledek zobrazí název, verzi a verzi aplikace grafu nasazenou grafem, jak je znázorněno v následujícím příkladu výstupu:
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/airflow 11.0.8 2.1.4 Apache Airflow is a platform to programmaticall...
azure-marketplace/apache 8.8.3 2.4.50 Chart for Apache HTTP Server
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
azure-marketplace/bitnami-common 0.0.7 0.0.7 Chart with custom tempaltes used in Bitnami cha...
azure-marketplace/cassandra 8.0.5 4.0.1 Apache Cassandra is a free and open-source dist...
Konkrétní chart můžete vyhledat tak, že do příkazu helm search repo
přidáte hledaný termín. Pokud například hledáte graf založený na ASP.NET, můžete použít následující příkaz:
helm search repo aspnet
V tomto příkladu má místní klient zaregistrovaná dvě úložiště a vrátí výsledek z každého, jak je znázorněno v následujícím příkladu výstupu:
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
bitnami/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
Postup testování chartu Helm
Helm vám poskytuje možnost vygenerovat soubory manifestu, které modul šablony vytvoří z chartu. Tato funkce umožňuje otestovat graf před vydáním kombinací dvou dodatečných parametrů: --dry-run
a debug
. Parametr --dry-run
zajišťuje simulaci instalace a --debug
parametr umožňuje podrobný výstup.
helm install --debug --dry-run my-release ./chart-name
Příkaz vypíše informace o použitých hodnotách a všech vygenerovaných souborech. Možná se budete muset posunout, abyste zobrazili veškerý vygenerovaný výstup.
Postup instalace chartu Helm
Chart můžete nainstalovat pomocí příkazu helm install
. Chart Helm můžete nainstalovat z libovolného z následujících umístění:
- Složky grafu
- Archivní grafy zabaleného
.tgz
taru - Úložiště Helm
Požadované parametry se ale liší v závislosti na umístění chartu. Ve všech případech příkaz vyžaduje název grafu, install
který chcete nainstalovat, a název verze, kterou instalace vytvoří.
Místní graf můžete nainstalovat pomocí rozbalené složky grafu souborů nebo zabaleného .tgz
archivu tar. Pokud chcete graf nainstalovat, helm
příkaz odkazuje na místní systém souborů pro umístění grafu. Tady je příklad příkazu install, který nasadí verzi rozbaleného grafu:
helm install my-release ./chart-name
V předchozím příkladu my-release
je parametr názvem vydané verze a ./chart-name
parametr je název rozbaleného balíčku grafu.
Zabalený chart se instaluje odkazováním na název souboru zabaleného chartu. Následující příklad ukazuje syntaxi pro stejnou aplikaci nyní zabalenou jako archiv tar:
helm install my-release ./chart-name.tgz
Když instalujete chart z úložiště Helm, použijete odkaz na chart jako název chartu. Odkaz na graf obsahuje dva parametry, název úložiště a název grafu, jak je znázorněno v následujícím příkladu:
helm install my-release repository-name/chart-name
V příkladu repository-name/chart-name
obsahuje parametr odkaz na úložiště repository-name
a název grafu . chart-name