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 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 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
zuacr.azurecr.io/mymicroservice
. - Wechseln von
service.type
zuNodePort
.
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 local
werden.
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