Skapa och installera ett Helm-diagram

Slutförd

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.

Ett diagram visar en process som parsar en Helm-mallfil och en värdefil för att skapa och distribuera ett program till ett Kubernetes-kluster med hjälp av manifestfiler.

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 notationen MAJOR.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-nameoch namnet på diagrammet chart-name.