Skapa och installera ett Helm-diagram
Helm-diagram gör det enkelt att distribuera program till alla Kubernetes-kluster. Du använder Helm för att malla programmets distributionsinformation som ett Helm-diagram som du sedan använder för att distribuera programmet.
Anta att ditt utvecklingsteam redan har distribuerat företagets djurbutikswebbplats till ditt AKS-kluster. Teamet skapar tre filer för att distribuera webbplatsen:
- Ett distributionsmanifest som beskriver hur du installerar och kör programmet i klustret.
- Ett tjänstmanifest som beskriver hur webbplatsen ska exponeras på klustret och
- Ett ingressmanifest som beskriver hur trafiken utanför klustret dirigerades till webbappen.
Teamet distribuerar dessa filer till var och en av de tre miljöerna som en del av livscykeln för programvaruutveckling. Var och en av de tre filerna uppdateras med variabler och värden som är specifika för miljön. Eftersom varje fil är hårdkodad är underhållet av dessa filer felbenäget.
Hur bearbetar Helm ett diagram?
Helm-klienten implementerar en språkbaserad Go-mallmotor som parsar alla tillgängliga filer i ett diagrams mappar. Mallmotorn skapar Kubernetes-manifestfiler genom att kombinera mallarna i diagrammets templates/
mapp med värdena från Chart.yaml
- och values.yaml
-filerna.
När manifestfilerna är tillgängliga kan klienten installera, uppgradera och ta bort programmet som definierats i de genererade manifestfilerna.
Så här definierar du en Chart.yaml
fil
Chart.yaml
är en av de filer som krävs i en Helm-diagramdefinition och innehåller information om diagrammet. Innehållet i filen består av tre obligatoriska fält och olika valfria fält.
De tre obligatoriska fälten är:
-
apiVersion
: Den diagram-API-version som ska användas. Du ställer in versionen påv2
för diagram som använder Helm 3. -
name
: Namnet på diagrammet. -
version
: Versionsnumret för diagrammet, som använder semantisk version 2.0.0 och följer notationenMAJOR.MINOR.PATCH
versionsnummer.
I följande exempel visas innehållet i en grundläggande Chart.yaml
fil:
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
Observera användningen av fältet type
i exempelfilen. Du kan skapa diagram för att installera program eller bibliotek. Standarddiagramtypen är application
och kan ställas in på library
för att ange att diagrammet ska installera ett bibliotek.
Många valfria fält är tillgängliga för att skräddarsy diagramdistributionsprocessen. Du kan till exempel använda fältet dependencies
för att ange extra krav för diagrammet, till exempel en webbapp som är beroende av en databas.
Not
Detaljerad täckning för alla valfria fält ligger utanför omfånget för den här modulen. En länk till Helm-dokumentationen finns dock i sammanfattningsavsnittet i modulen.
Definiera en diagrammall
En Helm-mall är en fil som beskriver olika typer av manifestfiler för distribution. Diagrammallar skrivs i go-mallspråket och tillhandahåller mallfunktioner för att automatisera skapandet av Kubernetes-objektmanifestfiler.
Mallfiler lagras i mappen templates/
i ett diagram. Mallmotorn bearbetar dessa filer för att skapa det slutliga objektmanifestet.
Anta till exempel att utvecklingsteamet använder följande distributionsmanifestfil för att distribuera butikskomponenten för djuraffären i lösningen.
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
Observera hur containeravbildningens plats hårdkodas med hjälp av {{.Values.<property>}}
syntax. Med syntaxen kan du skapa platshållare för varje anpassat värde.
Processen att skapa Helm-diagram för hand är omständlig. Ett enkelt sätt att skapa ett Helm-diagram är att använda kommandot helm create
för att skapa ett nytt Helm-diagram. Sedan anpassar du de automatiskt genererade filerna så att de matchar programmets krav.
Så här definierar du en values.yaml
fil
Du använder diagramvärden för att anpassa konfigurationen av ett Helm-diagram. Diagramvärden kan antingen fördefinierade eller tillhandahålls av användaren vid tidpunkten för distributionen av diagrammet.
Ett fördefinierat värde är ett skiftlägeskänsligt värde som är fördefinierat inom ett Helm-schema och som inte kan ändras av en användare. Du kan till exempel använda Release.Name
för att referera till namnet på versionen eller Release.IsInstall
för att kontrollera om den aktuella åtgärden är en installation.
Du kan också använda fördefinierade värden för att extrahera data från innehållet i Chart.yaml
. Om du till exempel vill kontrollera diagrammets version refererar du till Chart.Version
. Tänk på att du bara kan referera till välkända fält. Du kan se fördefinierade värden som konstanter som ska användas i de mallar du skapar.
Syntaxen för att inkludera värdenamn i en mallfil innebär att omsluta värdenamnet i dubbla klammerparenteser, till exempel {{.Release.Name}}
. Observera användningen av en punkt framför värdenamnet. När du använder en punkt på det här sättet fungerar punkten som en uppslagsoperator och anger variabelns aktuella omfång.
Följande YAML-kodfragment innehåller till exempel en ordlista som definierats i en värdefil:
object:
key: value
Om du vill komma åt värdet i en mall kan du använda följande syntax:
{{ .Values.object.key }}
Med ett angivet värde kan du bearbeta godtyckliga värden i diagrammallen. Filen values.yaml
definierar dessa värden.
I exemplet tillåter utvecklingsteamet följande konfigurerbara värden:
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 }}
...
Här är ett exempel på filen values.yaml
:
...
replicaCount: 1
...
storeFront:
image:
repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
tag: "latest"
serviceType: LoadBalancer
...
När mallmotorn tillämpar värdena ser slutresultatet ut så här:
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
...
Använda en Helm-lagringsplats
En Helm-lagringsplats är en dedikerad HTTP-server som lagrar information om Helm-diagram. Du konfigurerar Helm-lagringsplatser med Helm-klienten för att installera diagram från en lagringsplats med hjälp av kommandot helm repo add
.
Du kan till exempel lägga till Azure Marketplace Helm-lagringsplatsen i din lokala Helm-klient genom att köra följande kommando:
helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo
Information om tillgängliga diagram på en repository cachelagras på klientdatorn. Du måste regelbundet uppdatera cacheminnet för att hämta lagringsplatsens senaste information med hjälp av kommandot helm repo update
.
Med kommandot helm search repo
kan du söka efter diagram på alla lokalt tillagda Helm-lagringsplatser. Du kan köra kommandot helm search repo
själv för att returnera en lista över alla kända Helm-diagram för varje tillagd lagringsplats. Resultatet visar diagrammets namn, version och appversion som distribueras av diagrammet, enligt följande exempelutdata:
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...
Du kan söka efter ett visst diagram genom att lägga till en sökterm i kommandot helm search repo
. Om du till exempel söker efter ett ASP.NET baserat diagram kan du använda följande kommando:
helm search repo aspnet
I det här exemplet har den lokala klienten två registrerade lagringsplatser och returnerar ett resultat från var och en, enligt följande exempelutdata:
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...
Så här testar du ett Helm-diagram
Helm tillhandahåller ett alternativ för att generera manifestfilerna som mallmotorn skapar från diagrammet. Med den här funktionen kan du testa diagrammet före en version genom att kombinera två extra parametrar: --dry-run
och debug
. Parametern --dry-run
säkerställer att installationen simuleras och parametern --debug
aktiverar utförliga utdata.
helm install --debug --dry-run my-release ./chart-name
Kommandot visar information om de värden som används och alla genererade filer. Du kan behöva rulla för att visa alla genererade utdata.
Så här installerar du ett Helm-diagram
Du använder kommandot helm install
för att installera ett diagram. Du kan installera ett Helm-diagram från någon av följande platser:
- Diagrammappar
- Paketerade
.tgz
tar-arkivdiagram - Helm-lagringsplatser
De obligatoriska parametrarna varierar dock beroende på diagrammets plats. I samtliga fall kräver kommandot install
namnet på det diagram som du vill installera och ett namn för den version som installationen skapar.
Du kan installera ett lokalt diagram med hjälp av en uppackad diagrammapp med filer eller ett packat .tgz
tar-arkiv. Om du vill installera ett diagram refererar kommandot helm
till det lokala filsystemet för diagrammets plats. Här är ett exempel på installationskommandot som distribuerar en version av ett uppackat diagram:
helm install my-release ./chart-name
I föregående exempel är parametern my-release
namnet på versionen och parametern ./chart-name
är namnet på det uppackade diagrampaketet.
Ett paketerat diagram installeras genom att referera till det packade diagramfilnamnet. I följande exempel visas syntaxen för samma program som nu är packat som ett tar-arkiv:
helm install my-release ./chart-name.tgz
När du installerar ett diagram från en Helm-lagringsplats använder du en diagramreferens som diagrammets namn. Diagramreferensen innehåller två parametrar, lagringsplatsens namn och namnet på diagrammet, enligt följande exempel:
helm install my-release repository-name/chart-name
I exemplet innehåller parametern repository-name/chart-name
referensen för lagringsplatsen, repository-name
och namnet på diagrammet chart-name
.