Vytvoření a konfigurace clusteru Azure Kubernetes Services (AKS) pro použití virtuálních uzlů pomocí Azure CLI

Virtuální uzly umožňují síťovou komunikaci mezi pody, které běží ve službě Azure Container Instances (ACI) a clustery AKS. Pokud chcete tuto komunikaci poskytnout, vytvoříte podsíť virtuální sítě a přiřadíte delegovaná oprávnění. Virtuální uzly fungují jenom s clustery AKS vytvořenými pomocí pokročilých sítí (Azure CNI). Ve výchozím nastavení se clustery AKS vytvářejí se základními sítěmi (kubenet). V tomto článku se dozvíte, jak vytvořit virtuální síť a podsítě a pak nasadit cluster AKS, který používá pokročilé sítě.

V tomto článku se dozvíte, jak pomocí Azure CLI vytvořit a nakonfigurovat prostředky virtuální sítě a cluster AKS s povolenými virtuálními uzly.

Než začnete

Důležité

Před použitím virtuálních uzlů s AKS si projděte omezení virtuálních uzlů AKS i omezení virtuálních sítí ACI. Tato omezení ovlivňují umístění, konfiguraci sítě a další podrobnosti konfigurace clusteru AKS i virtuálních uzlů.

  • Potřebujete poskytovatele služeb ACI zaregistrovaného ve vašem předplatném. Stav registrace poskytovatele ACI můžete zkontrolovat pomocí az provider list příkazu.

    az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
    

    Zprostředkovatel Microsoft.ContainerInstance by měl hlásit jako registrovaný, jak je znázorněno v následujícím příkladu výstupu:

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    

    Pokud se poskytovatel zobrazí jako NotRegistered, zaregistrujte poskytovatele pomocí nástroje az provider register.

    az provider register --namespace Microsoft.ContainerInstance
    
  • Pokud používáte Azure CLI, tento článek vyžaduje Azure CLI verze 2.0.49 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI. Můžete také použít Azure Cloud Shell.

Spuštění služby Azure Cloud Shell

Azure Cloud Shell je bezplatné interaktivní prostředí, které můžete použít ke spuštění kroků v tomto článku. Má předinstalované a nakonfigurované běžné nástroje Azure.

Pokud chcete otevřít Cloud Shell, vyberte Vyzkoušet v pravém horním rohu bloku kódu. Cloud Shell můžete spustit také na samostatné kartě prohlížeče na adrese https://shell.azure.com/bash. Zkopírujte bloky kódu výběrem možnosti Kopírovat, vložte je do služby Cloud Shell a potom je spusťte stisknutím klávesy Enter.

Vytvoření skupiny zdrojů

Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure.

  • Pomocí příkazu vytvořte skupinu az group create prostředků.

    az group create --name myResourceGroup --location eastus
    

Vytvoření virtuální sítě

Důležité

Virtuální uzel vyžaduje vlastní virtuální síť a přidruženou podsíť. Není možné ji přidružit ke stejné virtuální síti jako cluster AKS.

  1. Vytvořte virtuální síť pomocí az network vnet create příkazu. Následující příklad vytvoří virtuální síť myVnet s předponou adresy 10.0.0.0/8 a podsítí s názvem myAKSSubnet. Předpona adresy této podsítě má výchozí hodnotu 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. Pomocí příkazu vytvořte další podsíť az network vnet subnet create pro virtuální uzly. Následující příklad vytvoří podsíť myVirtualNodeSubnet s předponou adresy 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
    

Vytvoření clusteru AKS se spravovanou identitou

  1. Pomocí příkazu získejte ID az network vnet subnet show podsítě.

    az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
    
  2. Vytvořte cluster AKS pomocí az aks create příkazu a nahraďte <subnetId> ID získaným v předchozím kroku. Následující příklad vytvoří cluster myAKSCluster s pěti uzly.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 5 \
        --network-plugin azure \
        --vnet-subnet-id <subnetId>
    

    Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.

Další informace o spravovaných identitách najdete v tématu Použití spravovaných identit.

Povolení doplňku virtuálních uzlů

  • Povolte virtuální uzly pomocí az aks enable-addons příkazu. Následující příklad používá podsíť s názvem myVirtualNodeSubnet vytvořená v předchozím kroku.

    az aks enable-addons \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --addons virtual-node \
        --subnet-name myVirtualNodeSubnet
    

Připojení ke clusteru

  1. Pomocí příkazu nakonfigurujte kubectl připojení ke clusteru az aks get-credentials Kubernetes. Tímto krokem se stáhnou přihlašovací údaje a nakonfiguruje rozhraní příkazového řádku Kubernetes pro jejich použití.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Pomocí příkazu ověřte připojení ke clusteru kubectl get , který vrátí seznam uzlů clusteru.

    kubectl get nodes
    

    Následující příklad výstupu ukazuje jeden uzel virtuálního počítače vytvořený a virtuální uzel pro 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
    

Nasazení ukázkové aplikace

  1. Vytvořte soubor s názvem virtual-node.yaml a zkopírujte ho v následujícím jazyce YAML. YAML naplánuje kontejner na uzlu definováním nodeSelectoru a tolerance.

    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. Spusťte aplikaci pomocí kubectl apply příkazu.

    kubectl apply -f virtual-node.yaml
    
  3. Pomocí příkazu s -o wide argumentem kubectl get pods získáte seznam podů a naplánovaného uzlu.

    kubectl get pods -o wide
    

    Pod je naplánován na virtuální uzel virtual-node-aci-linux, jak je znázorněno v následujícím příkladu výstupu:

    NAME                            READY     STATUS    RESTARTS   AGE       IP           NODE
    aci-helloworld-9b55975f-bnmfl   1/1       Running   0          4m        10.241.0.4   virtual-node-aci-linux
    

    Pod je přiřazena interní IP adresa z podsítě virtuální sítě Azure delegovaná pro použití s virtuálními uzly.

Poznámka:

Pokud používáte image uložené ve službě Azure Container Registry, nakonfigurujte a použijte tajný klíč Kubernetes. Aktuální omezení virtuálních uzlů je, že nemůžete použít integrované ověřování instančního objektu Microsoft Entra. Pokud tajný kód nepoužíváte, pody naplánované na virtuálních uzlech se nespustí a nahlásí chybu HTTP response status code 400 error code "InaccessibleImage".

Testování podu virtuálního uzlu

  1. Otestujte pod spuštěný na virtuálním uzlu tak, že přejdete k ukázkové aplikaci pomocí webového klienta. Při přiřazení interní IP adresy podu můžete toto připojení rychle otestovat z jiného podu v clusteru AKS.

  2. Vytvořte testovací pod a připojte k němu relaci terminálu pomocí následujícího kubectl run -it příkazu.

    kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  3. Nainstalujte curl do podu pomocí apt-get.

    apt-get update && apt-get install -y curl
    
  4. Přístup k adrese podu pomocí curl, například http://10.241.0.4. Zadejte vlastní interní IP adresu zobrazenou v předchozím kubectl get pods příkazu.

    curl -L http://10.241.0.4
    

    Zobrazí se ukázková aplikace, jak je znázorněno v následujícím zhuštěném ukázkovém výstupu:

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  5. Ukončete relaci terminálu s testovacím podem pomocí exit. Po skončení relace se pod odstraní.

Odebrání virtuálních uzlů

  1. aci-helloworld Pomocí příkazu odstraňte pod spuštěný na virtuálním kubectl delete uzlu.

    kubectl delete -f virtual-node.yaml
    
  2. Pomocí příkazu zakažte virtuální uzly az aks disable-addons .

    az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
    
  3. Pomocí následujících příkazů odeberte prostředky virtuální sítě a skupinu prostředků.

    # 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
    

Další kroky

V tomto článku jste naplánovali pod na virtuálním uzlu a přiřadili jste privátní interní IP adresu. Místo toho můžete vytvořit nasazení služby a směrovat provoz do podu prostřednictvím nástroje pro vyrovnávání zatížení nebo kontroleru příchozího přenosu dat. Další informace najdete v tématu Vytvoření základního kontroleru příchozího přenosu dat v AKS.

Virtuální uzly jsou často jednou z komponent řešení škálování v AKS. Další informace o škálování řešení najdete v následujících článcích: