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.

  1. 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
    
  2. 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

  1. 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
    
  2. 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>
    

    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

  • 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

  1. Konfigurera kubectl för att ansluta till kubernetes-klustret med hjälp av az 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
    
  2. 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

  1. 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
    
  2. Kör programmet med kommandot kubectl apply .

    kubectl apply -f virtual-node.yaml
    
  3. 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

  1. 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.

  2. 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
    
  3. Installera curl i podden med .apt-get

    apt-get update && apt-get install -y curl
    
  4. 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ående kubectl 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>
    [...]
    
  5. Stäng terminalsessionen till testpodden med exit. När sessionen är slut tas podden bort.

Ta bort virtuella noder

  1. Ta bort podden aci-helloworld som körs på den virtuella noden med kommandot kubectl delete .

    kubectl delete -f virtual-node.yaml
    
  2. Inaktivera de virtuella noderna med kommandot az aks disable-addons .

    az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
    
  3. 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: