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 tym artykule pokazano, jak za pomocą interfejsu wiersza polecenia platformy Azure utworzyć i skonfigurować zasoby sieci wirtualnej oraz klaster usługi AKS, a następnie włączyć węzły wirtualne.
Zanim rozpoczniesz
Węzły wirtualne umożliwiają komunikację sieciową między zasobnikami uruchomionymi w usłudze Azure Container Instances (ACI) i klastrze usługi AKS. Aby zapewnić tę komunikację, tworzona jest podsieć sieci wirtualnej i przypisywane są uprawnienia delegowane. Węzły wirtualne działają tylko z klastrami usługi AKS utworzonymi przy użyciu sieci zaawansowanej (Azure CNI). Domyślnie klastry usługi AKS są tworzone z podstawową siecią (kubenet). W tym artykule przedstawiono sposób tworzenia sieci wirtualnej i podsieci, a następnie wdrażania klastra usługi AKS korzystającego z zaawansowanej sieci.
Ważne
Przed rozpoczęciem korzystania z węzłów wirtualnych w usłudze 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 klastra usługi AKS i węzłów wirtualnych.
Jeśli usługa ACI nie była wcześniej używana, zarejestruj dostawcę usług w ramach subskrypcji. Stan rejestracji dostawcy usługi ACI można sprawdzić przy użyciu polecenia az provider list , jak pokazano w poniższym przykładzie:
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 polecenia az provider register , jak pokazano w poniższym przykładzie:
az provider register --namespace Microsoft.ContainerInstance
Uruchamianie usługi Azure Cloud Shell
Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której możesz używać do wykonywania kroków opisanych w tym artykule. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.
Aby otworzyć 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ć.
Jeśli wolisz zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, 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.
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 za pomocą polecenia az group create. Poniższy przykład obejmuje tworzenie grupy zasobów o nazwie myResourceGroup w lokalizacji westus.
az group create --name myResourceGroup --location westus
Tworzenie sieci wirtualnej
Ważne
Węzeł wirtualny wymaga niestandardowej sieci wirtualnej i skojarzonej podsieci. Nie można jej skojarzyć z tą samą siecią wirtualną, w których wdrożono klaster usługi AKS.
Utwórz sieć wirtualną za pomocą polecenia az network vnet create . Poniższy przykład tworzy nazwę sieci wirtualnej 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
Teraz utwórz dodatkową podsieć dla węzłów wirtualnych za pomocą polecenia az network vnet subnet create . 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ą
Zamiast korzystać z tożsamości przypisanej przez system, można również użyć tożsamości przypisanej przez użytkownika. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanych.
Klaster usługi AKS jest wdrażany w podsieci usługi AKS utworzonej w poprzednim kroku. Pobierz identyfikator tej podsieci przy użyciu polecenia az network vnet subnet show:
az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Utwórz klaster AKS za pomocą polecenia az aks create. W poniższym przykładzie pokazano tworzenie klastra o nazwie myAKSCluster z jednym węzłem. Zastąp <subnetId>
element identyfikatorem uzyskanym w poprzednim kroku.
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 1 \
--network-plugin azure \
--vnet-subnet-id <subnetId> \
Po kilku minutach polecenie zostanie zakończone i zwróci informacje o klastrze sformatowanym przy użyciu formatu JSON.
Włączanie dodatku węzłów wirtualnych
Aby włączyć węzły wirtualne, użyj polecenia az aks enable-addons . 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
Aby skonfigurować narzędzie kubectl
w celu nawiązania połączenia z klastrem Kubernetes, użyj polecenia az aks get-credentials. 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
Aby sprawdzić połączenie z klastrem, użyj polecenia kubectl get, aby powrócić do listy węzłów klastra.
kubectl get nodes
Następujące przykładowe dane wyjściowe przedstawiają utworzony pojedynczy węzeł maszyny wirtualnej, a następnie 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 pliku YAML. Aby zaplanować kontener w węźle, zdefiniowano element nodeSelector i tolerancję .
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
kubernetes.io/os: linux
type: virtual-kubelet
tolerations:
- key: virtual-kubelet.io/provider
operator: Exists
- key: azure.com/aci
effect: NoSchedule
Uruchom aplikację za pomocą polecenia kubectl apply .
kubectl apply -f virtual-node.yaml
Użyj polecenia kubectl get pods z argumentem -o wide
, aby wyświetlić listę zasobników i zaplanowany węzeł. Zwróć uwagę, że aci-helloworld
zasobnik został zaplanowany w węźle virtual-node-aci-linux
.
kubectl get pods -o wide
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 Azure Container Registry, skonfiguruj i użyj wpisu tajnego kubernetes. Bieżące ograniczenie węzłów wirtualnych polega na tym, że nie można używać zintegrowanego uwierzytelniania jednostki usługi Azure AD. 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
Aby przetestować zasobnik uruchomiony w węźle wirtualnym, przejdź do aplikacji demonstracyjnej przy użyciu klienta internetowego. Gdy zasobnik ma przypisany wewnętrzny adres 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:
kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Zainstaluj curl
w zasobniku przy użyciu polecenia apt-get
:
apt-get update && apt-get install -y curl
Teraz 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 poprzednim kubectl get pods
poleceniu:
curl -L http://10.241.0.4
Zostanie wyświetlona aplikacja demonstracyjna, jak pokazano w następujących skróconych 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
Jeśli nie chcesz już używać węzłów wirtualnych, możesz je wyłączyć za pomocą polecenia az aks disable-addons .
W razie potrzeby przejdź do https://shell.azure.com witryny Azure Cloud Shell w przeglądarce.
Najpierw usuń zasobnik aci-helloworld
uruchomiony w węźle wirtualnym:
kubectl delete -f virtual-node.yaml
Następujące przykładowe polecenie wyłącza węzły wirtualne z systemem Linux:
az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
Teraz usuń zasoby sieci wirtualnej i grupę zasobów:
# 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 zasobnik został zaplanowany na 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 pomocą 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: