Freigeben über


Bereitstellen von Anwendungen mit Helm

Gilt für: AKS auf 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 Mit Helm Anwendungen auf AKS verpacken und bereitstellen, wenn Sie Azure Kubernetes Service verwenden, der von Azure Arc aktiviert ist.

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 Artikel wird eine ASP.NET Core-Anwendung als Beispiel verwendet. Sie können die Beispielanwendung von diesem GitHub-Repository herunterladen.

Da die Anwendung für 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. Um zu überprüfen, ob das Image erfolgreich erstellt wurde, führen Sie docker images dies aus, um folgendes zu bestätigen:

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

Als Nächstes übertragen Sie Ihr Image an eine Containerregistrierung, z . B. DockerHub oder Azure Container Registry. In diesem Beispiel wird das Containerimage an die Azure-Containerregistrierung übertragen. Weitere Informationen finden Sie unter Pullimages von einem ACR zu einem Kubernetes-Cluster:

docker push acr.azurecr.io/mymicroservice:0.1.0

Erstellen Ihres Helm-Diagramms

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

helm create mymicroserviceapp

Aktualisieren Sie mymicroserviceapp/values.yaml wie folgt:

  • Wechseln von image.repository zu acr.azurecr.io/mymicroservice.
  • Wechseln von service.type zu NodePort.

Zum 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 beiden liveness Und readiness Probes 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) eine vorhandene Version mit dem Namen mymicroserviceapp im Namespace im local Kubernetes-Cluster und erzeugt eine Ausgabe ähnlich wie in diesem 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 ausgeführt kubectl get all -n localwerden.

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 die Ausgabe ähnlich wie im folgenden Beispiel abrufen:

release "mymicroserviceapp" uninstalled

Nächste Schritte