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 mitkubectl
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
inacr.azurecr.io/mymicroservice
. - Ändern Sie
service.type
inNodePort
.
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für