Erstellen und Konfigurieren eines AKS-Clusters zur Verwendung von virtuellen Knoten mithilfe der Azure CLI
Dieser Artikel zeigt, wie Sie die virtuellen Netzwerkressourcen und den AKS-Cluster mithilfe der Azure-Befehlszeilenschnittstelle erstellen und konfigurieren und dann die virtuellen Knoten aktivieren.
Voraussetzungen
Die virtuellen Knoten ermöglichen die Netzwerkkommunikation zwischen Pods, die in Azure Container Instances (ACI) und dem AKS-Cluster ausgeführt werden. Um diese Kommunikation bereitzustellen, wird ein virtuelles Subnetz erstellt, und delegierte Berechtigungen werden zugewiesen. Virtuelle Knoten funktionieren nur in AKS-Clustern, die mit erweiterten Netzwerkfunktionen (Azure CNI) erstellt wurden. Standardmäßig werden AKS-Cluster mit grundlegenden Netzwerkfunktionen (kubenet) erstellt. Dieser Artikel zeigt, wie Sie ein virtuelles Netzwerk und virtuelle Subnetze erstellen und dann einen AKS-Cluster bereitstellen, der erweiterte Netzwerkfunktionen verwendet.
Wichtig
Bevor Sie virtuelle Knoten bei AKS verwenden, überprüfen Sie sowohl die Einschränkungen von virtuellen AKS-Knoten als auch die Einschränkungen des virtuellen Netzwerks von ACI. Diese Einschränkungen wirken sich auf den Speicherort, die Netzwerkkonfiguration und andere Konfigurationsdetails Ihres AKS-Clusters und der virtuellen Knoten aus.
Wenn Sie ACI noch nicht genutzt haben, registrieren Sie den Dienstanbieter mit Ihrem Abonnement. Sie können den Status der ACI-Anbieterregistrierung mit dem Befehl az provider list überprüfen, wie im folgenden Beispiel gezeigt:
az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
Der Anbieter Microsoft.ContainerInstance sollte als Registriert gemeldet werden, wie in der folgenden Beispielausgabe gezeigt:
Namespace RegistrationState RegistrationPolicy
--------------------------- ------------------- --------------------
Microsoft.ContainerInstance Registered RegistrationRequired
Wenn der Anbieter als Nicht registriert angezeigt wird, registrieren Sie den Anbieter mit dem az provider register, wie im folgenden Beispiel gezeigt:
az provider register --namespace Microsoft.ContainerInstance
Starten von Azure Cloud Shell
Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel ausführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.
Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock die Option Ausprobieren aus. Sie können Cloud Shell auch auf einem separaten Browsertab starten, indem Sie zu https://shell.azure.com/bash navigieren. Wählen Sie Kopieren, um die Blöcke mit dem Code zu kopieren. Fügen Sie ihn anschließend in Cloud Shell ein, und drücken Sie die EINGABETASTE, um ihn auszuführen.
Wenn Sie es vorziehen, die Befehlszeilenschnittstelle lokal zu installieren und zu verwenden, müssen Sie für diesen Artikel die Azure CLI-Version 2.0.49 oder verwenden. Führen Sie az --version
aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
Erstellen einer Ressourcengruppe
Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden. Erstellen Sie mithilfe des Befehls az group create eine Ressourcengruppe. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup am Standort westus erstellt.
az group create --name myResourceGroup --location westus
Erstellen eines virtuellen Netzwerks
Wichtig
Der virtuelle Knoten erfordert ein benutzerdefiniertes virtuelles Netzwerk und ein zugeordnetes Subnetz. Eine Zuordnung zum virtuellen Netzwerk, in dem der AKS-Cluster bereitgestellt wurde, ist nicht möglich.
Erstellen Sie mit dem Befehl az network vnet create ein virtuelles Netzwerk. Das folgende Beispiel erstellt ein virtuelles Netzwerk namens myVnet mit dem Adresspräfix 10.0.0.0/8 und einem Subnetz namens myAKSSubnet. Das Adresspräfix dieses Subnetzes wird standardmäßig auf 10.240.0.0/16 festgelegt:
az network vnet create \
--resource-group myResourceGroup \
--name myVnet \
--address-prefixes 10.0.0.0/8 \
--subnet-name myAKSSubnet \
--subnet-prefix 10.240.0.0/16
Erstellen Sie jetzt mit dem Befehl az network vnet subnet create ein weiteres Subnetz für virtuelle Knoten. Das folgende Beispiel erstellt ein Subnetz namens myVirtualNodeSubnet mit dem Adresspräfix 10.241.0.0/16.
az network vnet subnet create \
--resource-group myResourceGroup \
--vnet-name myVnet \
--name myVirtualNodeSubnet \
--address-prefixes 10.241.0.0/16
Erstellen eines AKS-Clusters mit verwalteter Identität
Statt einer systemseitig zugewiesenen Identität können Sie auch eine benutzerseitig zugewiesene Identität verwenden. Weitere Informationen finden Sie unter Verwenden verwalteter Identitäten.
Sie stellen einen AKS-Cluster in dem AKS-Subnetz bereit, das in einem vorherigen Schritt erstellt wurde. Rufen Sie mit az network vnet subnet show die ID dieses Subnetzes ab:
az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster. Im folgenden Beispiel wird ein Cluster mit dem Namen myAKSCluster mit einem Knoten erstellt. Ersetzen Sie <subnetId>
durch die ID, die Sie im vorherigen Schritt abgerufen haben.
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 1 \
--network-plugin azure \
--vnet-subnet-id <subnetId> \
Nach einigen Minuten wird der Befehl abgeschlossen und gibt Informationen über den Cluster im JSON-Format zurück.
Virtuelle Knoten aktivieren-Add-On
Um die virtuellen Knoten zu aktivieren, verwenden Sie jetzt den Befehl az aks enable-addons. Das folgende Beispiel verwendet das Subnetz myVirtualNodeSubnet, das in einem vorherigen Schritt erstellt wurde:
az aks enable-addons \
--resource-group myResourceGroup \
--name myAKSCluster \
--addons virtual-node \
--subnet-name myVirtualNodeSubnet
Herstellen einer Verbindung mit dem Cluster
Mit dem Befehl az aks get-credentials können Sie kubectl
für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Dieser Schritt dient dazu, Anmeldeinformationen herunterzuladen und die Kubernetes-Befehlszeilenschnittstelle für ihre Verwendung zu konfigurieren.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls kubectl get, um eine Liste der Clusterknoten zurückzugeben.
kubectl get nodes
Die folgende Beispielausgabe zeigt den erstellten einzelnen VM-Knoten und dann den virtuellen Knoten für Linux, virtual-node-aci-linux:
NAME STATUS ROLES AGE VERSION
virtual-node-aci-linux Ready agent 28m v1.11.2
aks-agentpool-14693408-0 Ready agent 32m v1.11.2
Bereitstellen einer Beispiel-App
Erstellen Sie eine Datei namens „virtual-node.yaml
“, und fügen Sie den folgenden YAML-Code ein. Um den Container auf dem Knoten zu planen, werden Werte für nodeSelector und toleration definiert.
apiVersion: apps/v1
kind: Deployment
metadata:
name: aci-helloworld
spec:
replicas: 1
selector:
matchLabels:
app: aci-helloworld
template:
metadata:
labels:
app: aci-helloworld
spec:
containers:
- name: aci-helloworld
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/role: agent
kubernetes.io/os: linux
type: virtual-kubelet
tolerations:
- key: virtual-kubelet.io/provider
operator: Exists
- key: azure.com/aci
effect: NoSchedule
Führen Sie die Anwendung mithilfe des Befehls kubectl apply aus.
kubectl apply -f virtual-node.yaml
Verwenden Sie den Befehl kubectl get pods mit dem -o wide
-Argument, um eine Liste von Pods und den geplanten Knoten auszugeben. Beachten Sie, dass der aci-helloworld
-Pod auf dem virtual-node-aci-linux
-Knoten geplant wurde.
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
Dem Pod wird von dem Subnetz des virtuellen Azure-Netzwerks, das für die Verwendung mit virtuellen Knoten delegiert wurde, eine interne IP-Adresse zugewiesen.
Hinweis
Wenn Sie Images verwenden, die in der Azure Container Registry gespeichert sind, konfigurieren und verwenden Sie ein Kubernetes-Geheimnis. Eine aktuelle Einschränkung der virtuellen Knoten ist, dass Sie die integrierte Authentifizierung des Azure AD-Dienstprinzipals nicht verwenden können. Wenn Sie kein Geheimnis verwenden, können auf virtuellen Knoten geplante Pods nicht starten und melden den Fehler HTTP response status code 400 error code "InaccessibleImage"
.
Testen des Pods des virtuellen Knotens
Um den Pod zu testen, der auf dem virtuellen Knoten ausgeführt werden soll, wechseln Sie in einem Webclient zur Demoanwendung. Da dem Pod eine interne IP-Adresse zugewiesen wurde, können Sie diese Konnektivität schnell von einem anderen Pod im AKS-Cluster aus testen. Erstellen Sie einen Testpod, und fügen Sie an diesen eine Terminalsitzung an:
kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Installieren Sie curl
mit apt-get
im Pod:
apt-get update && apt-get install -y curl
Greifen Sie mithilfe von curl
auf die Adresse Ihres Pods zu, z.B. http://10.241.0.4 . Geben Sie Ihre eigene interne IP-Adresse an, die im vorherigen kubectl get pods
-Befehl gezeigt wurde:
curl -L http://10.241.0.4
Die Demoanwendung wird angezeigt, wie in der folgenden verkürzten Beispielausgabe veranschaulicht:
<html>
<head>
<title>Welcome to Azure Container Instances!</title>
</head>
[...]
Schließen Sie die Terminalsitzung mit Ihrem Testpod mit exit
. Wenn die Sitzung beendet ist, wird der Pod gelöscht.
Entfernen von virtuellen Knoten
Wenn Sie die virtuellen Knoten nicht mehr verwenden möchten, können Sie sie mit dem Befehl az aks disable-addons deaktivieren.
Navigieren Sie ggf. zu https://shell.azure.com, um Azure Cloud Shell in Ihrem Browser zu öffnen.
Löschen Sie zuerst den aci-helloworld
-Pod, der auf dem virtuellen Knoten ausgeführt wird:
kubectl delete -f virtual-node.yaml
Der folgende Beispielbefehl deaktiviert die virtuellen Linux-Knoten:
az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
Entfernen Sie jetzt die virtuellen Netzwerkressourcen und die Ressourcengruppe:
# Change the name of your resource group, cluster and network resources as needed
RES_GROUP=myResourceGroup
AKS_CLUSTER=myAKScluster
AKS_VNET=myVnet
AKS_SUBNET=myVirtualNodeSubnet
# Get AKS node resource group
NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv)
# Get network profile ID
NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv)
# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y
# Grab the service association link ID
SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default
# Delete the service association link for the subnet
az resource delete --ids $SAL_ID --api-version 2021-10-01
# Delete the subnet delegation to Azure Container Instances
az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
Nächste Schritte
In diesem Artikel wurde ein Pod im virtuellen Knoten geplant, und dem Pod wurde ein private interne IP-Adresse zugewiesen. Sie können stattdessen auch eine Dienstbereitstellung erstellen und den Datenverkehr über ein Lastenausgleichsmodul oder einen Eingangscontroller an Ihren Pod weiterleiten. Weitere Informationen finden Sie unter Erstellen eines einfachen Eingangscontrollers in AKS.
Virtuelle Knoten sind oft eine Komponente einer Skalierungslösung in AKS. Weitere Informationen zu Skalierungslösungen finden Sie in den folgenden Artikeln: