Bereitstellen von Anwendungen mit Helm

Gilt für: AKS in Azure Stack HCI 22H2, AKS unter Windows Server

Helm ist ein Open Source-Verpackungstool, das Ihnen dabei hilft, Kubernetes-Anwendungen zu installieren und ihren Lebenszyklus zu verwalten. Ähnlich wie Linux-Paket-Manager (z. B. APT und Yum) wird Helm zur Verwaltung von Kubernetes-Charts verwendet, bei denen es sich um Pakete von vorkonfigurierten Kubernetes-Ressourcen handelt.

In diesem Artikel wird beschrieben, wie Sie Helm verwenden, um Anwendungen in AKS zu packen und bereitzustellen, wenn Sie Azure Kubernetes Service verwenden, die von Azure Arc aktiviert sind.

Voraussetzungen

Vergewissern Sie sich, dass die folgenden Anforderungen eingerichtet sind:

  • Ein Kubernetes-Cluster mit mindestens einem Windows- oder Linux-Workerknoten, der ausgeführt wird.
  • Sie haben Ihre lokale kubectl Umgebung so konfiguriert, dass sie auf Ihren Cluster verweist. Sie können den Get-AksHciCredential-PowerShell-Befehl verwenden, um mit kubectl auf Ihren Cluster zuzugreifen.
  • Helm v3-Befehlszeile und -Voraussetzungen sind installiert.
  • Eine verfügbare Containerregistrierung, z. B. DockerHub oder Azure Container Registry.

In diesem Thema wird eine ASP.NET Core-Anwendung als Beispiel verwendet. Sie können die Beispielanwendung von diesem GitHub-Repository herunterladen.

Da die Anwendung in Kubernetes bereitgestellt wird, ist das folgende Beispiel eine einfache Dockerfile-Datei für das Projekt:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /src
COPY ["MyMicroservice.csproj", "./"]
RUN dotnet restore "MyMicroservice.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyMicroservice.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyMicroservice.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]

Erstellen und Pushen der Beispielanwendung in eine Containerregistrierung

Navigieren Sie zum Anwendungsordner, und verwenden Sie den Dockerfile, um ein Image mithilfe des folgenden Befehls zu erstellen und zu pushen:

docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .

Hinweis

Der Punkt (.) am Ende des Befehls legt den Speicherort des Dockerfile fest (in diesem Fall: das aktuelle Verzeichnis).

Mit diesem Befehl wird das Image mymicroservice:0.1.0 auf dem lokalen Computer erstellt. Führen Sie docker images aus, um zu bestätigen, dass das Image erfolgreich erstellt wurde.

REPOSITORY              TAG     IMAGE ID       CREATED            SIZE  
acr.azurecr.io/mymicroservice 0.1.0   5be713db571b   About a minute ago 107MB
....

Als Nächstes pushen Sie Ihr Image in eine Containerregistrierung, z. B. DockerHub oder Azure Container Registry. In diesem Beispiel wird das Containerimage per Push an Azure Container Registry (ACR) übertragen. Weitere Informationen finden Sie unter Pullen von Images aus einem ACR in einen Kubernetes-Cluster.

docker push acr.azurecr.io/mymicroservice:0.1.0

Erstellen Ihres Helm-Diagramms

Nachdem die Beispielanwendung nun bereit ist, besteht der nächste Schritt darin, mit dem helm create Befehl wie folgt ein Helm-Diagramm zu generieren:

helm create mymicroserviceapp

Aktualisieren Sie mymicroserviceapp/values.yaml wie folgt:

  • Ändern Sie image.repository in acr.azurecr.io/mymicroservice.
  • Ändern Sie service.type in NodePort.

Beispiel:

# Default values for webfrontend.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: acr.azurecr.io/mymicroservice
  pullPolicy: IfNotPresent
...
service:
  type: NodePort
  port: 80
...

Navigieren Sie zur Datei mymicroserviceapp/templates/deployment.yaml, um Integritätsprüfungen zu konfigurieren. Kubernetes verwendet Integritätsprüfungen, um Ihre Anwendungsbereitstellungen zu verwalten. Ersetzen Sie den Pfad zu liveness den Tests und readiness durch path: /weatherforecast, wie im folgenden Beispiel gezeigt:

...
 livenessProbe:
    httpGet:
      path: /weatherforecast
      port: http
    initialDelaySeconds: 0
    periodSeconds: 10
    timeoutSeconds: 1
    failureThreshold: 3
 readinessProbe:
    httpGet:
      path: /weatherforecast
      port: http
    successThreshold: 3
...

Bereitstellen Ihres Helm-Charts in Kubernetes

Führen Sie im Verzeichnis charts\mymicroserviceapp im Lösungsverzeichnis den folgenden Befehl aus:

helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0" 

Dieser Befehl erstellt (oder aktualisiert) ein vorhandenes Release unter Verwendung des Namens mymicroserviceapp im local Namespace im Kubernetes-Cluster und erzeugt eine Ausgabe ähnlich dem folgenden Beispiel:

Release "mymicroserviceapp" does not exist. Installing it now.
NAME: mymicroserviceapp
LAST DEPLOYED: Fri Apr  2 08:47:24 2021
NAMESPACE: local
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace local -o jsonpath="{.spec.ports[0].nodePort}" services mymicroserviceapp)
  export NODE_IP=$(kubectl get nodes --namespace local -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

Nachdem Sie das Helm-Diagramm bereitgestellt haben, können Sie überprüfen, ob die Ressourcen ordnungsgemäß bereitgestellt wurden, indem Sie ausführen kubectl get all -n local.

Die Ausgabe der Ausführung des Befehls lautet:

NAME                                     READY   STATUS    RESTARTS   AGE
pod/mymicroserviceapp-7849f949df-fwgbn   1/1     Running   0          101s

NAME                        TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/mymicroserviceapp   NodePort   10.100.149.1   <none>        80:30501/TCP   101s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mymicroserviceapp   1/1     1            1           101s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/mymicroserviceapp-7849f949df   1         1         1       101s

Testen der Bereitstellung

Die Anwendung wird mit einem Dienst und einem Knotenport bereitgestellt, sodass Sie die API von außerhalb des Clusters aufrufen können. Um diesen Aufruf zu tätigen, senden Sie eine Anforderung an: http://$NODE_IP:$NODE_PORT:

curl http://10.193.2.103:30501/WeatherForeCast/
StatusCode        : 200
StatusDescription : OK
Content           : [{"date":"2021-04-03T15:51:04.795216+00:00","temperatureC":45,"temperatureF":112,"summary":"Balmy"},{"date":"2021-04-04T15:51:04.
                    7952176+00:00","temperatureC":23,"temperatureF":73,"summary":"Cool"},{"...
RawContent        : HTTP/1.1 200 OK
                    Transfer-Encoding: chunked
                    Content-Type: application/json; charset=utf-8
                    Date: Fri, 02 Apr 2021 15:51:04 GMT
                    Server: Kestrel

                    [{"date":"2021-04-03T15:51:04.795216+00:00","tempera...
Forms             : {}
Headers           : {[Transfer-Encoding, chunked], [Content-Type, application/json; charset=utf-8], [Date, Fri, 02 Apr 2021 15:51:04 GMT], [Server,
                    Kestrel]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 494

Bereinigen des Clusters

Der letzte Schritt besteht im Bereinigen des Clusters. Führen Sie den folgenden Befehl aus, um Kubernetes-Bereitstellungsressourcen zu löschen:

helm uninstall mymicroserviceapp -n local

Sie sollten eine Ausgabe ähnlich dem folgenden Beispiel erhalten:

release "mymicroserviceapp" uninstalled

Nächste Schritte