Skapa och konfigurera ett AKS-kluster (Azure Kubernetes Services) för att använda virtuella noder med Hjälp av Azure CLI
Virtuella noder möjliggör nätverkskommunikation mellan poddar som körs i Azure Container Instances (ACI) och AKS-kluster. För att tillhandahålla den här kommunikationen skapar du ett undernät för virtuellt nätverk och tilldelar delegerade behörigheter. Virtuella noder fungerar bara med AKS-kluster som skapats med hjälp av avancerade nätverk (Azure CNI). Som standard skapas AKS-kluster med grundläggande nätverk (kubenet). Den här artikeln visar hur du skapar ett virtuellt nätverk och undernät och sedan distribuerar ett AKS-kluster som använder avancerade nätverk.
Den här artikeln visar hur du använder Azure CLI för att skapa och konfigurera virtuella nätverksresurser och ett AKS-kluster som är aktiverat med virtuella noder.
Innan du börjar
Viktigt!
Innan du använder virtuella noder med AKS bör du granska både begränsningarna för virtuella AKS-noder och ACI:s begränsningar för virtuella nätverk. Dessa begränsningar påverkar platsen, nätverkskonfigurationen och annan konfigurationsinformation för både ditt AKS-kluster och de virtuella noderna.
Du behöver ACI-tjänstleverantören registrerad med din prenumeration. Du kan kontrollera statusen för ACI-providerregistreringen
az provider list
med hjälp av kommandot .az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
Microsoft.ContainerInstance-providern bör rapportera som Registrerad, enligt följande exempelutdata:
Namespace RegistrationState RegistrationPolicy --------------------------- ------------------- -------------------- Microsoft.ContainerInstance Registered RegistrationRequired
Om providern visas som NotRegistered registrerar du providern med hjälp av
az provider register
.az provider register --namespace Microsoft.ContainerInstance
Om du använder Azure CLI kräver den här artikeln Azure CLI version 2.0.49 eller senare. Kör
az --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. Du kan också använda Azure Cloud Shell.
Starta Azure Cloud Shell
Azure Cloud Shell är ett kostnadsfritt interaktivt gränssnitt som du kan använda för att köra stegen i den här artikeln. Den har vanliga Azure-verktyg förinstallerade och konfigurerade.
Öppna Cloud Shell genom att välja Prova i det övre högra hörnet i ett kodblock. Du kan också starta Cloud Shell i en separat webbläsarflik genom att gå till https://shell.azure.com/bash. Kopiera kodblocket genom att välja Kopiera, klistra in det i Cloud Shell och kör det genom att trycka på RETUR.
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras.
Skapa en resursgrupp med kommandot
az group create
.az group create --name myResourceGroup --location eastus
Skapa ett virtuellt nätverk
Viktigt!
Virtuell nod kräver ett anpassat virtuellt nätverk och ett associerat undernät. Det kan inte associeras med samma virtuella nätverk som AKS-klustret.
Skapa ett virtuellt nätverk med kommandot
az network vnet create
. I följande exempel skapas ett virtuellt nätverk med namnet myVnet med adressprefixet 10.0.0.0/8 och ett undernät med namnet myAKSSubnet. Adressprefixet för det här undernätet är som standard 10.240.0.0/16.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
Skapa ett extra undernät för de virtuella noderna med kommandot
az network vnet subnet create
. I följande exempel skapas ett undernät med namnet myVirtualNodeSubnet med adressprefixet 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
Skapa ett AKS-kluster med hanterad identitet
Hämta undernäts-ID:t med kommandot
az network vnet subnet show
.az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Skapa ett AKS-kluster med kommandot
az aks create
och ersätt<subnetId>
med det ID som erhölls i föregående steg. I följande exempel skapas ett kluster med namnet myAKSCluster med fem noder.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 5 \ --network-plugin azure \ --vnet-subnet-id <subnetId> \ --generate-ssh-keys
Efter flera minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.
Mer information om hanterade identiteter finns i Använda hanterade identiteter.
Aktivera tillägget för virtuella noder
Kommentar
Om du har skapat ett befintligt Azure Kubernetes-tjänstkluster som använder Azure CNI för avancerat nätverk bör du kunna aktivera virtuella noder som ett tillägg med hjälp av CLI.
Aktivera virtuella noder med kommandot
az aks enable-addons
. I följande exempel används undernätet myVirtualNodeSubnet som skapades i ett tidigare steg.az aks enable-addons \ --resource-group myResourceGroup \ --name myAKSCluster \ --addons virtual-node \ --subnet-name myVirtualNodeSubnet
Anslut till klustret
Konfigurera
kubectl
för att ansluta till kubernetes-klustret med hjälp avaz aks get-credentials
kommandot . I det här steget laddar vi ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Kontrollera anslutningen till klustret med kommandot
kubectl get
som returnerar en lista över klusternoderna.kubectl get nodes
Följande exempelutdata visar den enskilda VM-noden som skapats och den virtuella noden 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
Distribuera en exempelapp
Skapa en fil med namnet
virtual-node.yaml
och kopiera i följande YAML. YAML schemalägger containern på noden genom att definiera en nodeSelector och tolerans.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 beta.kubernetes.io/os: linux type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists - key: azure.com/aci effect: NoSchedule
Kör programmet med kommandot
kubectl apply
.kubectl apply -f virtual-node.yaml
Hämta en lista över poddar och den schemalagda noden med kommandot
kubectl get pods
med-o wide
argumentet .kubectl get pods -o wide
Podden schemaläggs på den virtuella noden virtual-node-aci-linux, enligt följande exempelutdata:
NAME READY STATUS RESTARTS AGE IP NODE aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
Podden tilldelas en intern IP-adress från det virtuella Azure-nätverksundernätet som delegerats för användning med virtuella noder.
Kommentar
Om du använder avbildningar som lagras i Azure Container Registry konfigurerar och använder du en Kubernetes-hemlighet. En aktuell begränsning för virtuella noder är att du inte kan använda integrerad Microsoft Entra-tjänstens huvudnamnsautentisering. Om du inte använder en hemlighet startar inte poddar som schemalagts på virtuella noder och rapporterar felet HTTP response status code 400 error code "InaccessibleImage"
.
Testa podden för den virtuella noden
Testa podden som körs på den virtuella noden genom att bläddra till demoprogrammet med en webbklient. När podden tilldelas en intern IP-adress kan du snabbt testa anslutningen från en annan podd i AKS-klustret.
Skapa en testpodd och koppla en terminalsession till den med hjälp av följande
kubectl run -it
kommando.kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Installera
curl
i podden med .apt-get
apt-get update && apt-get install -y curl
Få åtkomst till poddens adress med hjälp av
curl
, till exempel http://10.241.0.4. Ange din egen interna IP-adress som visas i föregåendekubectl get pods
kommando.curl -L http://10.241.0.4
Demoprogrammet visas enligt följande komprimerade exempelutdata:
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]
Stäng terminalsessionen till testpodden med
exit
. När sessionen är slut tas podden bort.
Ta bort virtuella noder
Ta bort podden
aci-helloworld
som körs på den virtuella noden med kommandotkubectl delete
.kubectl delete -f virtual-node.yaml
Inaktivera de virtuella noderna med kommandot
az aks disable-addons
.az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
Ta bort de virtuella nätverksresurserna och resursgruppen med hjälp av följande kommandon.
# 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ästa steg
I den här artikeln har du schemalagt en podd på den virtuella noden och tilldelat en privat intern IP-adress. Du kan i stället skapa en tjänstdistribution och dirigera trafik till din podd via en lastbalanserare eller ingresskontrollant. Mer information finns i Skapa en grundläggande ingresskontrollant i AKS.
Virtuella noder är ofta en komponent i en skalningslösning i AKS. Mer information om skalningslösningar finns i följande artiklar:
Azure Kubernetes Service