Bereitstellen eines Windows Server-Containers in einem AKS-Cluster (Azure Kubernetes Service) mithilfe der Azure CLI
Azure Kubernetes Service (AKS) ist ein verwalteter Kubernetes-Dienst, mit dem Sie schnell Cluster bereitstellen und verwalten können. In diesem Artikel verwenden Sie das Azure CLI, um einen AKS-Cluster einzurichten, auf dem Windows Server-Container ausgeführt werden. Sie stellen auch eine ASP.NET-Beispielanwendung in einem Windows Server-Container für den Cluster bereit.
Hinweis
Um schnell mit der Bereitstellung eines AKS-Clusters zu beginnen, enthält dieser Artikel Schritte zum Bereitstellen eines Clusters mit Standardeinstellungen nur zu Evaluierungszwecken. Bevor Sie einen produktionsbereiten Cluster bereitstellen, empfehlen wir Ihnen, sich mit unserer Baselinereferenzarchitektur vertraut zu machen, um zu prüfen, inwiefern sie Ihren Geschäftsanforderungen entspricht.
Voraussetzungen
Für diese Schnellstartanleitung werden Grundkenntnisse in Bezug auf die Kubernetes-Konzepte vorausgesetzt. Weitere Informationen finden Sie unter Grundlegende Kubernetes-Konzepte für Azure Kubernetes Service (AKS).
- Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
- Für diesen Artikel ist mindestens Version 2.0.64 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.
- Stellen Sie sicher, dass die Identität, die Sie zum Erstellen Ihres Clusters verwenden, über die erforderlichen Mindestberechtigungen verfügt. Weitere Informationen zu Zugriff und Identität für AKS finden Sie unter Zugriffs- und Identitätsoptionen für Azure Kubernetes Service (AKS).
- Wenn Sie über mehrere Azure-Abonnements verfügen, wählen Sie mithilfe des Befehls az account set die ID des Abonnements aus, in dem die Ressourcen fakturiert werden sollen. Weitere Informationen finden Sie unter Verwalten von Azure-Abonnementen – Azure CLI.
Erstellen einer Ressourcengruppe
Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden. Wenn Sie eine Ressourcengruppe erstellen, müssen Sie einen Speicherort angeben. Hier werden die Metadaten der Ressourcengruppe gespeichert und Ihre Ressourcen in Azure ausgeführt, wenn Sie bei der Ressourcenerstellung keine andere Region angeben.
Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe. Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus. Geben Sie den folgenden Befehl und andere Befehle in diesem Artikel in eine BASH-Shell ein:
az group create --name myResourceGroup --location eastus
Die folgende Beispielausgabe zeigt, dass die Ressourcengruppe erfolgreich erstellt wurde:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": null }
Erstellen eines AKS-Clusters
In diesem Abschnitt erstellen wir einen AKS-Cluster mit der folgenden Konfiguration:
- Der Cluster ist mit zwei Knoten konfiguriert, um zu gewährleisten, dass er zuverlässig funktioniert. Ein Knoten ist ein virtueller Azure-Computer (Virtual Machine, VM), der die Kubernetes-Knotenkomponenten und die Containerruntime ausführt.
- Die Parameter
--windows-admin-password
und--windows-admin-username
legen die Administratoranmeldeinformationen für alle Windows Server-Knoten auf dem Cluster fest und müssen die Kennwortanforderungen von Windows Server erfüllen. - Der Knotenpool verwendet
VirtualMachineScaleSets
.
Führen Sie die folgenden Schritte aus, um den AKS-Cluster mithilfe der Azure CLI zu erstellen:
Erstellen Sie einen Benutzernamen, der für die Administratoranmeldeinformationen für die Windows Server-Knoten in Ihrem Cluster verwendet wird. Die folgenden Befehle fordern Sie zur Eingabe eines Benutzernamens auf und legen diesen zur Verwendung in einem späteren Befehl auf WINDOWS_USERNAME fest.
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
Erstellen Sie ein Kennwort für den Administrator-Benutzernamen, den Sie im vorherigen Schritt angelegt haben. Das Kennwort mindestens 14 Zeichen lang sein und den Komplexitätsvoraussetzungen von Windows Server-Kennwörtern entsprechen.
echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
Erstellen Sie Ihren Cluster mithilfe des Befehls az aks create, und geben Sie die Parameter
--windows-admin-username
und--windows-admin-password
an. Der folgende Beispielbefehl erstellt einen Cluster mithilfe des Werts von WINDOWS_USERNAME, den Sie mit dem vorherigen Befehl festgelegt haben. Alternativ können Sie auch einen anderen Benutzernamen direkt im Parameter angeben, anstatt WINDOWS_USERNAME zu verwenden.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 2 \ --enable-addons monitoring \ --generate-ssh-keys \ --windows-admin-username $WINDOWS_USERNAME \ --windows-admin-password $WINDOWS_PASSWORD \ --vm-set-type VirtualMachineScaleSets \ --network-plugin azure
Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben. Gelegentlich kann die Bereitstellung des Clusters länger als ein paar Minuten dauern. Geben Sie der Bereitstellung bis zu 10 Minuten Zeit.
Falls Sie für das Kennwort einen Überprüfungsfehler erhalten und das von Ihnen festgelegte Kennwort die Längen- und Komplexitätsvoraussetzungen erfüllt, versuchen Sie, Ihre Ressourcengruppe in einer anderen Region zu erstellen. Versuchen Sie anschließend, den Cluster mit der neuen Ressourcengruppe zu erstellen.
Wenn Sie bei der Erstellung des Knotenpools keinen Administratorbenutzernamen und kein Kennwort angeben, wird der Benutzername auf azureuser und das Kennwort auf einen Zufallswert festgelegt. Weitere Informationen finden Sie unter Häufig gestellte Fragen zu Windows Server.
Der Administratorbenutzername kann nicht geändert werden, aber Sie können mithilfe von
az aks update
das Administratorkennwort ändern, das Ihr AKS-Cluster für Windows Server-Knoten verwendet. Weitere Informationen finden Sie unter Häufig gestellte Fragen zu Windows Server.Um einen AKS-Cluster zu betreiben, der Knotenpools für Windows Server-Container unterstützt, muss Ihr Cluster eine Netzwerkrichtlinie verwenden, die das Azure CNI (advanced) Netzwerk-Plugin nutzt. Der Parameter
--network-plugin azure
dient zum Angeben von Azure CNI.
Hinzufügen eines Knotenpools
Standardmäßig wird ein AKS-Cluster mit einem Knotenpool erstellt, der Linux-Container ausführen kann. Sie müssen einen weiteren Knotenpool hinzufügen, der neben dem Linux-Knotenpool Windows Server-Container ausführen kann.
Das Standardbetriebssystem für Kubernetes Versionen 1.25.0 und höher ist Windows Server 2022. Für frühere Versionen ist das Standardbetriebssystem Windows Server 2019. Wenn Sie keine bestimmte Betriebssystem-SKU angeben, erstellt Azure den neuen Knotenpool mit der Standard-SKU für die vom Cluster verwendete Kubernetes-Version.
Wenn Sie die Standardbetriebssystem-SKU verwenden möchten, erstellen Sie den Knotenpool, ohne eine Betriebssystem-SKU anzugeben. Der Knotenpool wird basierend auf der Kubernetes-Version des Clusters für das Standardbetriebssystem konfiguriert.
Fügen Sie mit dem Befehl az aks nodepool add
einen Windows-Knotenpool hinzu. Der folgende Befehl erstellt einen neuen Knotenpool namens npwin und fügt ihn dem myAKSCluster hinzu. Der Befehl verwendet auch das Standardsubnetz im Standard-VNet, das beim Ausführen von az aks create
erstellt wurde. Da keine Betriebssystem-SKU angegeben ist, wird der Knotenpool auf das Standardbetriebssystem festgelegt (basierend auf der Kubernetes-Version des Clusters).
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwin \
--node-count 1
Herstellen einer Verbindung mit dem Cluster
Sie verwenden kubectl, den Kubernetes-Befehlszeilenclient, um Ihre Kubernetes-Cluster zu verwalten. Bei Verwendung von Azure Cloud Shell ist kubectl
bereits installiert. Wenn Sie kubectl
lokal installieren und ausführen möchten, rufen Sie den Befehl az aks install-cli auf.
Mit dem Befehl az aks get-credentials können Sie
kubectl
für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls kubectl get. Dieser gibt eine Liste der Clusterknoten zurück.
kubectl get nodes -o wide
Die folgende Beispielausgabe zeigt alle Knoten im Cluster. Stellen Sie sicher, dass der Status aller Knoten Bereit ist:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME aks-nodepool1-20786768-vmss000000 Ready agent 22h v1.27.7 10.224.0.4 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aks-nodepool1-20786768-vmss000001 Ready agent 22h v1.27.7 10.224.0.33 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aksnpwin000000 Ready agent 20h v1.27.7 10.224.0.62 <none> Windows Server 2022 Datacenter 10.0.20348.2159 containerd://1.6.21+azure
Hinweis
Die Containerruntime für jeden Knotenpool wird unter CONTAINER-RUNTIMEangezeigt. Die Werte für die Containerruntime beginnen mit
containerd://
, was bedeutet, dass jeweilscontainerd
für die Containerruntime verwendet wird.
Bereitstellen der Anwendung
Eine Kubernetes-Manifestdatei definiert einen gewünschten Zustand (Desired State) für den Cluster – also beispielsweise, welche Containerimages ausgeführt werden sollen. In diesem Artikel verwenden Sie ein Manifest, um alle Objekte zu erstellen, die für die Ausführung der ASP.NET-Beispielanwendung in einem Windows Server-Container benötigt werden. Dieses Manifest beinhaltet eine Kubernetes-Bereitstellung für die ASP.NET-Beispielanwendung und einen externen Kubernetes-Dienst für den Zugriff auf die Anwendung über das Internet.
Die ASP.NET-Beispielanwendung wird als Teil des .NET Framework-Beispiels bereitgestellt und in einem Windows Server-Container ausgeführt. AKS verlangt, dass Windows Server-Container auf Images von Windows Server 2019 oder höher basieren. Mit der Kubernetes-Manifestdatei muss auch eine Knotenauswahl definiert werden. So wird Ihrem AKS-Cluster mitgeteilt, dass der Pod Ihrer ASP.NET-Beispielanwendung auf einem Knoten ausgeführt werden soll, für den die Ausführung von Windows Server-Containern möglich ist.
Erstellen Sie eine Datei namens
sample.yaml
, und fügen Sie die folgende YAML-Definition ein.apiVersion: apps/v1 kind: Deployment metadata: name: sample labels: app: sample spec: replicas: 1 template: metadata: name: sample labels: app: sample spec: nodeSelector: "kubernetes.io/os": windows containers: - name: sample image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp resources: limits: cpu: 1 memory: 800M ports: - containerPort: 80 selector: matchLabels: app: sample --- apiVersion: v1 kind: Service metadata: name: sample spec: type: LoadBalancer ports: - protocol: TCP port: 80 selector: app: sample
Eine Aufschlüsselung der YAML-Manifestdateien finden Sie unter Bereitstellungen und YAML-Manifeste.
Wenn Sie die YAML-Datei lokal erstellen und speichern, können Sie die Manifestdatei in Ihr Standardverzeichnis in CloudShell hochladen, indem Sie die Schaltfläche Dateien hochladen/herunterladen auswählen und die Datei aus Ihrem lokalen Dateisystem auswählen.
Stellen Sie die Anwendung über den Befehl kubectl apply bereit, und geben Sie den Namen Ihres YAML-Manifests an.
kubectl apply -f sample.yaml
In der folgende Beispielausgabe sind die erfolgreich erstellten Bereitstellungen und Dienste aufgeführt:
deployment.apps/sample created service/sample created
Testen der Anwendung
Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Dienst das Anwendungs-Front-End im Internet verfügbar. Dieser Vorgang kann einige Minuten dauern. Gelegentlich kann die Bereitstellung des Diensts länger als ein paar Minuten dauern. Geben Sie der Bereitstellung bis zu 10 Minuten Zeit.
Sehen Sie sich den Status der bereitgestellten Pods mithilfe des Befehls kubectl get pods an. Stellen Sie sicher, dass alle Pods den Status
Running
haben, bevor Sie fortfahren.kubectl get pods
Verwenden Sie zum Überwachen des Fortschritts den Befehl kubectl get service mit dem Argument
--watch
:kubectl get service sample --watch
Zunächst zeigt die Ausgabe die EXTERNAL-IP für den Beispieldienst als ausstehend an:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Sobald die externe IP-Adresse (EXTERNAL-IP) von pending (ausstehend) in eine tatsächliche öffentliche IP-Adresse geändert wurde, verwenden Sie
CTRL-C
, um diekubectl
-Überwachung zu beenden. Die folgende Beispielausgabe zeigt eine gültige öffentliche IP-Adresse, die dem Dienst zugewiesen ist:sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Sehen Sie sich die Beispielanwendung in Aktion an, indem Sie ein Fenster im Webbrowser mit der externen IP-Adresse Ihres Dienstes öffnen.
Löschen von Ressourcen
Wenn Sie nicht vorhaben, das AKS-Tutorial zu absolvieren, sollten Sie Ihren Cluster löschen, damit keine Azure-Gebühren anfallen.
Löschen Sie Ihre Ressourcengruppe, den Containerdienst und alle zugehörigen Ressourcen mithilfe des Befehls az group delete.
az group delete --name myResourceGroup --yes --no-wait
Hinweis
Der AKS-Cluster wurde mit einer systemseitig zugewiesenen verwalteten Identität erstellt (die Standardidentitätsoption, die in dieser Schnellstartanleitung verwendet wird). Die Azure-Plattform verwaltet diese Identität, so dass sie nicht entfernt werden muss.
Nächste Schritte
In dieser Schnellstartanleitung haben Sie einen Kubernetes-Cluster und eine ASP.NET-Beispielanwendung in einem Windows Server-Container bereitgestellt. Diese Beispielanwendung dient nur zu Demozwecken und stellt nicht alle bewährten Methoden für Kubernetes-Anwendungen dar. Anleitungen zum Erstellen vollständiger Lösungen mit AKS für die Produktion finden Sie unter AKS-Lösungsleitfaden.
Weitere Informationen zu AKS sowie ein vollständiges Beispiel vom Code bis zur Bereitstellung finden Sie im Kubernetes-Clustertutorial.
Azure Kubernetes Service