Tworzenie i konfigurowanie klastra usługi Azure Kubernetes Services (AKS) do używania węzłów wirtualnych przy użyciu interfejsu wiersza polecenia platformy Azure
Węzły wirtualne umożliwiają komunikację sieciową między zasobnikami uruchomionymi w klastrach usługi Azure Container Instances (ACI) i AKS. Aby zapewnić tę komunikację, należy utworzyć podsieć sieci wirtualnej i przypisać delegowane uprawnienia. Węzły wirtualne działają tylko z klastrami usługi AKS utworzonymi przy użyciu zaawansowanej sieci (Azure CNI). Domyślnie klastry usługi AKS są tworzone przy użyciu sieci podstawowej (kubenet). W tym artykule pokazano, jak utworzyć sieć wirtualną i podsieci, a następnie wdrożyć klaster usługi AKS korzystający z zaawansowanej sieci.
W tym artykule pokazano, jak za pomocą interfejsu wiersza polecenia platformy Azure tworzyć i konfigurować zasoby sieci wirtualnej oraz klaster usługi AKS z włączonymi węzłami wirtualnymi.
Zanim rozpoczniesz
Ważne
Przed użyciem węzłów wirtualnych z usługą AKS zapoznaj się zarówno z ograniczeniami węzłów wirtualnych usługi AKS, jak i ograniczeniami sieci wirtualnej usługi ACI. Te ograniczenia mają wpływ na lokalizację, konfigurację sieci i inne szczegóły konfiguracji zarówno klastra usługi AKS, jak i węzłów wirtualnych.
Potrzebujesz dostawcy usług ACI zarejestrowanego w ramach subskrypcji. Stan rejestracji dostawcy ACI można sprawdzić przy użyciu
az provider list
polecenia .az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
Dostawca Microsoft.ContainerInstance powinien zgłosić wartość Zarejestrowano, jak pokazano w następujących przykładowych danych wyjściowych:
Namespace RegistrationState RegistrationPolicy --------------------------- ------------------- -------------------- Microsoft.ContainerInstance Registered RegistrationRequired
Jeśli dostawca jest wyświetlany jako NotRegistered, zarejestruj dostawcę przy użyciu .
az provider register
az provider register --namespace Microsoft.ContainerInstance
W przypadku korzystania z interfejsu wiersza polecenia platformy Azure ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.49 lub nowszej. Uruchom polecenie
az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. Możesz również użyć usługi Azure Cloud Shell.
Uruchamianie usługi Azure Cloud Shell
Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której można użyć do wykonania kroków opisanych w tym artykule. Ma on typowe narzędzia platformy Azure wstępnie zainstalowane i skonfigurowane.
Aby otworzyć usługę Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu. Możesz również uruchomić usługę Cloud Shell w oddzielnej karcie przeglądarki, przechodząc do strony https://shell.azure.com/bash. Wybierz przycisk Kopiuj, aby skopiować bloki kodu, wklej je do usługi Cloud Shell, a następnie naciśnij klawisz Enter, aby je uruchomić.
Tworzenie grupy zasobów
Grupa zasobów platformy Azure to logiczna grupa przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi.
Utwórz grupę zasobów przy użyciu
az group create
polecenia .az group create --name myResourceGroup --location eastus
Tworzenie sieci wirtualnej
Ważne
Węzeł wirtualny wymaga niestandardowej sieci wirtualnej i skojarzonej podsieci. Nie można go skojarzyć z tą samą siecią wirtualną co klaster usługi AKS.
Utwórz sieć wirtualną przy użyciu
az network vnet create
polecenia . Poniższy przykład tworzy sieć wirtualną o nazwie myVnet z prefiksem adresu 10.0.0.0/8 i podsiecią o nazwie myAKSSubnet. Prefiks adresu tej podsieci domyślnie to 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
Utwórz dodatkową podsieć dla węzłów wirtualnych przy użyciu
az network vnet subnet create
polecenia . Poniższy przykład tworzy podsieć o nazwie myVirtualNodeSubnet z prefiksem adresu 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
Tworzenie klastra usługi AKS z tożsamością zarządzaną
Pobierz identyfikator podsieci przy użyciu
az network vnet subnet show
polecenia .az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Utwórz klaster usługi AKS przy użyciu
az aks create
polecenia i zastąp element<subnetId>
identyfikatorem uzyskanym w poprzednim kroku. Poniższy przykład tworzy klaster o nazwie myAKSCluster z pięcioma węzłami.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 5 \ --network-plugin azure \ --vnet-subnet-id <subnetId> \ --generate-ssh-keys
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Aby uzyskać więcej informacji na temat tożsamości zarządzanych, zobacz Używanie tożsamości zarządzanych.
Włączanie dodatku węzłów wirtualnych
Uwaga
Jeśli masz utworzony klaster usługi Azure Kubernetes Service, który korzysta z usługi Azure CNI dla sieci zaawansowanej, musisz mieć możliwość włączenia węzłów wirtualnych jako dodatku przy użyciu interfejsu wiersza polecenia.
Włącz węzły wirtualne przy użyciu
az aks enable-addons
polecenia . W poniższym przykładzie użyto podsieci o nazwie myVirtualNodeSubnet utworzonej w poprzednim kroku.az aks enable-addons \ --resource-group myResourceGroup \ --name myAKSCluster \ --addons virtual-node \ --subnet-name myVirtualNodeSubnet
Łączenie z klastrem
Skonfiguruj
kubectl
, aby nawiązać połączenie z klastremaz aks get-credentials
Kubernetes przy użyciu polecenia . Ten krok umożliwia pobranie poświadczeń i skonfigurowanie interfejsu wiersza polecenia Kubernetes do ich użycia.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Sprawdź połączenie z klastrem
kubectl get
przy użyciu polecenia , które zwraca listę węzłów klastra.kubectl get nodes
W poniższych przykładowych danych wyjściowych przedstawiono utworzony pojedynczy węzeł maszyny wirtualnej i węzeł wirtualny dla systemu 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
Wdrażanie przykładowej aplikacji
Utwórz plik o nazwie
virtual-node.yaml
i skopiuj go w następującym języku YAML. Kod YAML planuje kontener w węźle przez zdefiniowanie elementu nodeSelector i tolerancji.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
Uruchom aplikację przy użyciu
kubectl apply
polecenia .kubectl apply -f virtual-node.yaml
Pobierz listę zasobników i zaplanowanego węzła przy użyciu
kubectl get pods
polecenia z argumentem-o wide
.kubectl get pods -o wide
Zasobnik jest zaplanowany na wirtualnym węźle wirtualnym virtual-node-aci-linux, jak pokazano w poniższych przykładowych danych wyjściowych:
NAME READY STATUS RESTARTS AGE IP NODE aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
Zasobnik ma przypisany wewnętrzny adres IP z podsieci sieci wirtualnej platformy Azure delegowanej do użycia z węzłami wirtualnymi.
Uwaga
Jeśli używasz obrazów przechowywanych w usłudze Azure Container Registry, skonfiguruj klucz tajny platformy Kubernetes i użyj go. Bieżące ograniczenie węzłów wirtualnych polega na tym, że nie można używać zintegrowanego uwierzytelniania jednostki usługi Microsoft Entra. Jeśli nie używasz wpisu tajnego, zasobniki zaplanowane na węzłach wirtualnych nie mogą uruchomić i zgłosić błąd HTTP response status code 400 error code "InaccessibleImage"
.
Testowanie zasobnika węzła wirtualnego
Przetestuj zasobnik uruchomiony w węźle wirtualnym, przechodząc do aplikacji demonstracyjnej za pomocą klienta internetowego. Gdy zasobnik jest przypisany do wewnętrznego adresu IP, możesz szybko przetestować tę łączność z innego zasobnika w klastrze usługi AKS.
Utwórz zasobnik testowy i dołącz do niego sesję terminalu przy użyciu następującego
kubectl run -it
polecenia.kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Zainstaluj
curl
w zasobniku przy użyciu poleceniaapt-get
.apt-get update && apt-get install -y curl
Uzyskaj dostęp do adresu zasobnika przy użyciu polecenia
curl
, takiego jak http://10.241.0.4. Podaj własny wewnętrzny adres IP pokazany w poprzednimkubectl get pods
poleceniu.curl -L http://10.241.0.4
Zostanie wyświetlona aplikacja demonstracyjna, jak pokazano w następujących skondensowanych przykładowych danych wyjściowych:
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]
Zamknij sesję terminalu do zasobnika testowego za pomocą polecenia
exit
. Po zakończeniu sesji zasobnik zostanie usunięty.
Usuwanie węzłów wirtualnych
Usuń zasobnik
aci-helloworld
uruchomiony w węźle wirtualnymkubectl delete
przy użyciu polecenia .kubectl delete -f virtual-node.yaml
Wyłącz węzły wirtualne przy użyciu
az aks disable-addons
polecenia .az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
Usuń zasoby sieci wirtualnej i grupę zasobów przy użyciu następujących poleceń.
# 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
Następne kroki
W tym artykule zaplanowano zasobnik w węźle wirtualnym i przypisano prywatny wewnętrzny adres IP. Zamiast tego można utworzyć wdrożenie usługi i skierować ruch do zasobnika za pośrednictwem modułu równoważenia obciążenia lub kontrolera ruchu przychodzącego. Aby uzyskać więcej informacji, zobacz Tworzenie podstawowego kontrolera ruchu przychodzącego w usłudze AKS.
Węzły wirtualne są często jednym ze składników rozwiązania skalowania w usłudze AKS. Aby uzyskać więcej informacji na temat skalowania rozwiązań, zobacz następujące artykuły:
Azure Kubernetes Service