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.
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
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
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
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> \ --generate-ssh-keys
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ů
Poznámka:
Pokud máte vytvořený existující cluster Azure Kubernetes Service, který používá Azure CNI pro pokročilé sítě, měli byste být schopni povolit virtuální uzly jako doplněk pomocí rozhraní příkazového řádku.
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
Pomocí příkazu nakonfigurujte
kubectl
připojení ke clusteruaz 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
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
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
Spusťte aplikaci pomocí
kubectl apply
příkazu.kubectl apply -f virtual-node.yaml
Pomocí příkazu s
-o wide
argumentemkubectl 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
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.
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
Nainstalujte
curl
do podu pomocíapt-get
.apt-get update && apt-get install -y curl
Přístup k adrese podu pomocí
curl
, například http://10.241.0.4. Zadejte vlastní interní IP adresu zobrazenou v předchozímkubectl 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> [...]
Ukončete relaci terminálu s testovacím podem pomocí
exit
. Po skončení relace se pod odstraní.
Odebrání virtuálních uzlů
aci-helloworld
Pomocí příkazu odstraňte pod spuštěný na virtuálnímkubectl delete
uzlu.kubectl delete -f virtual-node.yaml
Pomocí příkazu zakažte virtuální uzly
az aks disable-addons
.az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
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:
Azure Kubernetes Service