Tworzenie i Konfigurowanie klastra usługi Azure Kubernetes Services (AKS) w celu używania węzłów wirtualnych przy użyciu interfejsu wiersza polecenia platformy AzureCreate and configure an Azure Kubernetes Services (AKS) cluster to use virtual nodes using the Azure CLI

W tym artykule pokazano, jak za pomocą interfejsu wiersza polecenia platformy Azure utworzyć i skonfigurować zasoby sieci wirtualnej i klaster AKS, a następnie włączyć węzły wirtualne.This article shows you how to use the Azure CLI to create and configure the virtual network resources and AKS cluster, then enable virtual nodes.

Uwaga

Ten artykuł zawiera omówienie dostępności i ograniczeń w regionie przy użyciu węzłów wirtualnych.This article gives you an overview of the region availability and limitations using virtual nodes.

Przed rozpoczęciemBefore you begin

Węzły wirtualne umożliwiają komunikację sieciową między jednostkami, które działają w Azure Container Instances (ACI) i klastrze AKS.Virtual nodes enable network communication between pods that run in Azure Container Instances (ACI) and the AKS cluster. W celu zapewnienia tej komunikacji zostanie utworzona podsieć sieci wirtualnej i przypisane uprawnienia delegowane.To provide this communication, a virtual network subnet is created and delegated permissions are assigned. Węzły wirtualne działają tylko w przypadku klastrów AKS utworzonych przy użyciu zaawansowanej sieci (Azure CNI).Virtual nodes only work with AKS clusters created using advanced networking (Azure CNI). Domyślnie klastry AKS są tworzone przy użyciu sieci podstawowej (korzystającą wtyczki kubenet).By default, AKS clusters are created with basic networking (kubenet). W tym artykule opisano sposób tworzenia sieci wirtualnej i podsieci, a następnie wdrażania klastra AKS, który korzysta z zaawansowanej sieci.This article shows you how to create a virtual network and subnets, then deploy an AKS cluster that uses advanced networking.

Jeśli nie korzystasz wcześniej z ACI, zarejestruj dostawcę usług w ramach subskrypcji.If you have not previously used ACI, register the service provider with your subscription. Stan rejestracji dostawcy ACI można sprawdzić za pomocą polecenia AZ Provider list , jak pokazano w następującym przykładzie:You can check the status of the ACI provider registration using the az provider list command, as shown in the following example:

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

Dostawca Microsoft. ContainerInstance powinien raportować jako zarejestrowane , jak pokazano w następujących przykładowych danych wyjściowych:The Microsoft.ContainerInstance provider should report as Registered , as shown in the following example output:

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 następującym przykładzie:If the provider shows as NotRegistered , register the provider using the az provider register as shown in the following example:

az provider register --namespace Microsoft.ContainerInstance

Uruchamianie usługi Azure Cloud ShellLaunch 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.The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.It has common Azure tools preinstalled and configured to use with your account.

Aby otworzyć Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu.To open the Cloud Shell, select Try it from the upper right corner of a code block. Cloud Shell można również uruchomić na osobnej karcie przeglądarki, przechodząc do https://shell.azure.com/bash .You can also launch Cloud Shell in a separate browser tab by going to 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ć.Select Copy to copy the blocks of code, paste it into the Cloud Shell, and press enter to run it.

Jeśli wolisz zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten artykuł będzie wymagał interfejsu wiersza polecenia platformy Azure w wersji 2.0.49 lub nowszej.If you prefer to install and use the CLI locally, this article requires Azure CLI version 2.0.49 or later. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana.Run az --version to find the version. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.If you need to install or upgrade, see Install Azure CLI.

Tworzenie grupy zasobówCreate a resource group

Grupa zasobów platformy Azure to logiczna grupa przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi.An Azure resource group is a logical group in which Azure resources are deployed and managed. Utwórz grupę zasobów za pomocą polecenia az group create.Create a resource group with the az group create command. Poniższy przykład obejmuje tworzenie grupy zasobów o nazwie myResourceGroup w lokalizacji westus.The following example creates a resource group named myResourceGroup in the westus location.

az group create --name myResourceGroup --location westus

Tworzenie sieci wirtualnejCreate a virtual network

Utwórz sieć wirtualną za pomocą polecenia AZ Network VNET Create .Create a virtual network using the az network vnet create command. Poniższy przykład tworzy nazwę sieci wirtualnej myVnet z prefiksem adresu 10.0.0.0/8 i podsiecią o nazwie myAKSSubnet.The following example creates a virtual network name myVnet with an address prefix of 10.0.0.0/8 , and a subnet named myAKSSubnet. Prefiks adresu tej podsieci domyślnie 10.240.0.0/16 :The address prefix of this subnet defaults 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 przy użyciu polecenia AZ Network VNET Subnet Create .Now create an additional subnet for virtual nodes using the az network vnet subnet create command. Poniższy przykład tworzy podsieć o nazwie myVirtualNodeSubnet z prefiksem adresu 10.241.0.0/16.The following example creates a subnet named myVirtualNodeSubnet with the address prefix of 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

Utwórz nazwę główną usługi lub Użyj tożsamości zarządzanejCreate a service principal or use a managed identity

Jednostka usługi Azure Active Directory zezwala klastrowi usługi AKS na interakcje z innymi zasobami platformy Azure.To allow an AKS cluster to interact with other Azure resources, an Azure Active Directory service principal is used. Tę jednostkę usługi może automatycznie utworzyć interfejs wiersza polecenia platformy Azure lub portal. Inna możliwość to jej wstępne utworzenie i przypisanie dodatkowych uprawnień.This service principal can be automatically created by the Azure CLI or portal, or you can pre-create one and assign additional permissions. Alternatywnie można użyć tożsamości zarządzanej w celu uzyskania uprawnień zamiast nazwy głównej usługi.Alternatively, you can use a managed identity for permissions instead of a service principal. Aby uzyskać więcej informacji, zobacz Korzystanie z tożsamości zarządzanych.For more information, see Use managed identities.

Utwórz jednostkę usługi za pomocą polecenia az ad sp create-for-rbac.Create a service principal using the az ad sp create-for-rbac command. Parametr --skip-assignment umożliwia ograniczenie przypisywania dodatkowych uprawnień.The --skip-assignment parameter limits any additional permissions from being assigned.

az ad sp create-for-rbac --skip-assignment

Dane wyjściowe są podobne do poniższego przykładu:The output is similar to the following example:

{
  "appId": "bef76eb3-d743-4a97-9534-03e9388811fc",
  "displayName": "azure-cli-2018-11-21-18-42-00",
  "name": "http://azure-cli-2018-11-21-18-42-00",
  "password": "1d257915-8714-4ce7-a7fb-0e5a5411df7f",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

Zwróć uwagę na wartości appId i password.Make a note of the appId and password. Te wartości są używane w kolejnych krokach.These values are used in the following steps.

Przypisywanie uprawnień do sieci wirtualnejAssign permissions to the virtual network

Aby umożliwić klastrowi korzystanie z sieci wirtualnej i zarządzanie nią, należy przyznać jednostce usługi AKS odpowiednie prawa do używania zasobów sieciowych.To allow your cluster to use and manage the virtual network, you must grant the AKS service principal the correct rights to use the network resources.

Najpierw Pobierz identyfikator zasobu sieci wirtualnej za pomocą polecenia AZ Network VNET show:First, get the virtual network resource ID using az network vnet show:

az network vnet show --resource-group myResourceGroup --name myVnet --query id -o tsv

Aby udzielić poprawnego dostępu do klastra AKS do korzystania z sieci wirtualnej, Utwórz przypisanie roli za pomocą polecenia AZ role przypisanie Create .To grant the correct access for the AKS cluster to use the virtual network, create a role assignment using the az role assignment create command. Zastąp ciągi <appId> i <vnetId> wartościami określonymi w dwóch poprzednich krokach.Replace <appId> and <vnetId> with the values gathered in the previous two steps.

az role assignment create --assignee <appId> --scope <vnetId> --role Contributor

Tworzenie klastra AKSCreate an AKS cluster

Klaster AKS jest wdrażany w podsieci AKS utworzonej w poprzednim kroku.You deploy an AKS cluster into the AKS subnet created in a previous step. Pobierz identyfikator tej podsieci za pomocą polecenia AZ Network VNET Subnet show:Get the ID of this subnet using 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.Use the az aks create command to create an AKS cluster. W poniższym przykładzie pokazano tworzenie klastra o nazwie myAKSCluster z jednym węzłem.The following example creates a cluster named myAKSCluster with one node. Zamień na <subnetId> Identyfikator uzyskany w poprzednim kroku, a następnie <appId> <password> wraz z wartościami zebranymi w poprzedniej sekcji.Replace <subnetId> with the ID obtained in the previous step, and then <appId> and <password> with the values gathered in the previous section.

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --network-plugin azure \
    --service-cidr 10.0.0.0/16 \
    --dns-service-ip 10.0.0.10 \
    --docker-bridge-address 172.17.0.1/16 \
    --vnet-subnet-id <subnetId> \
    --service-principal <appId> \
    --client-secret <password>

Po kilku minutach polecenie zostanie zakończone i zwróci informacje o klastrze sformatowanym przy użyciu formatu JSON.After several minutes, the command completes and returns JSON-formatted information about the cluster.

Włącz dodatek węzłów wirtualnychEnable virtual nodes addon

Aby włączyć węzły wirtualne, teraz użyj polecenia AZ AKS Enable-dodatkis .To enable virtual nodes, now use the az aks enable-addons command. W poniższym przykładzie zastosowano podsieć o nazwie myVirtualNodeSubnet , która została utworzona w poprzednim kroku:The following example uses the subnet named myVirtualNodeSubnet created in a previous step:

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

Łączenie z klastremConnect to the cluster

Aby skonfigurować narzędzie kubectl w celu nawiązania połączenia z klastrem Kubernetes, użyj polecenia az aks get-credentials.To configure kubectl to connect to your Kubernetes cluster, use the az aks get-credentials command. Ten krok umożliwia pobranie poświadczeń i skonfigurowanie interfejsu wiersza polecenia Kubernetes do ich użycia.This step downloads credentials and configures the Kubernetes CLI to use them.

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.To verify the connection to your cluster, use the kubectl get command to return a list of the cluster nodes.

kubectl get nodes

Następujące przykładowe dane wyjściowe pokazują utworzony węzeł maszyny wirtualnej, a następnie węzeł wirtualny dla systemu Linux, Virtual-Node-ACI-Linux :The following example output shows the single VM node created and then the virtual node for 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 aplikacjiDeploy a sample app

Utwórz plik o nazwie virtual-node.yaml i skopiuj w następującym YAML.Create a file named virtual-node.yaml and copy in the following YAML. Do zaplanowania kontenera w węźle są zdefiniowane nodeSelector i tolerowanie .To schedule the container on the node, a nodeSelector and toleration are defined.

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ę za pomocą polecenia polecenia kubectl Apply .Run the application with the kubectl apply command.

kubectl apply -f virtual-node.yaml

Użyj polecenia kubectl Get -Binding polecenia z -o wide argumentem, aby wyprowadzić listę z listy i zaplanowanego węzła.Use the kubectl get pods command with the -o wide argument to output a list of pods and the scheduled node. Zwróć uwagę na to, że zgodnie z aci-helloworld harmonogramem zaplanowano w virtual-node-aci-linux węźle.Notice that the aci-helloworld pod has been scheduled on the virtual-node-aci-linux node.

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

Pod przypisywany jest wewnętrzny adres IP z podsieci sieci wirtualnej platformy Azure delegowanej do użycia z węzłami wirtualnymi.The pod is assigned an internal IP address from the Azure virtual network subnet delegated for use with virtual nodes.

Uwaga

Jeśli używasz obrazów przechowywanych w Azure Container Registry, Skonfiguruj i użyj wpisu tajnego Kubernetes.If you use images stored in Azure Container Registry, configure and use a Kubernetes secret. Bieżące ograniczenie węzłów wirtualnych polega na tym, że nie można używać zintegrowanego uwierzytelniania podstawowego usługi Azure AD.A current limitation of virtual nodes is that you can't use integrated Azure AD service principal authentication. Jeśli nie korzystasz z wpisu tajnego, nie można uruchomić i zgłosić błędu HTTP response status code 400 error code "InaccessibleImage" .If you don't use a secret, pods scheduled on virtual nodes fail to start and report the error HTTP response status code 400 error code "InaccessibleImage".

Przetestuj węzeł wirtualny podTest the virtual node pod

Aby przetestować pod kątem działania w węźle wirtualnym, przejdź do aplikacji demonstracyjnej za pomocą klienta sieci Web.To test the pod running on the virtual node, browse to the demo application with a web client. Jako że pod przypisywanym wewnętrznym adresem IP można szybko przetestować to połączenie z innego elementu pod względem klastra AKS.As the pod is assigned an internal IP address, you can quickly test this connectivity from another pod on the AKS cluster. Utwórz test pod i Dołącz do niego sesję terminalu:Create a test pod and attach a terminal session to it:

kubectl run -it --rm testvk --image=debian

Zainstaluj curl w temacie using apt-get :Install curl in the pod using apt-get:

apt-get update && apt-get install -y curl

Uzyskaj teraz dostęp do adresu Twojego elementu przy użyciu curl , takich jak http://10.241.0.4 .Now access the address of your pod using curl, such as http://10.241.0.4. Podaj własny wewnętrzny adres IP przedstawiony w poprzednim kubectl get pods poleceniu:Provide your own internal IP address shown in the previous kubectl get pods command:

curl -L http://10.241.0.4

Zostanie wyświetlona aplikacja demonstracyjna, jak pokazano w następujących wąskich przykładowych danych wyjściowych:The demo application is displayed, as shown in the following condensed example output:

<html>
<head>
  <title>Welcome to Azure Container Instances!</title>
</head>
[...]

Zamknij sesję terminalu z testem pod exit .Close the terminal session to your test pod with exit. Po zakończeniu sesji, pod, jest usunięty.When your session is ended, the pod is the deleted.

Usuń węzły wirtualneRemove virtual nodes

Jeśli nie chcesz już używać węzłów wirtualnych, możesz je wyłączyć za pomocą polecenia AZ AKS Disable-dodatkis .If you no longer wish to use virtual nodes, you can disable them using the az aks disable-addons command.

W razie potrzeby przejdź do https://shell.azure.com okna, aby otworzyć Azure Cloud Shell w przeglądarce.If necessary, go to https://shell.azure.com to open Azure Cloud Shell in your browser.

Najpierw usuń aci-helloworld pod kontrolą na węźle wirtualnym:First, delete the aci-helloworld pod running on the virtual node:

kubectl delete -f virtual-node.yaml

Następujące przykładowe polecenie wyłącza węzły wirtualne systemu Linux:The following example command disables the Linux virtual nodes:

az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node

Teraz Usuń zasoby sieci wirtualnej i grupę zasobów:Now, remove the virtual network resources and resource group:

# 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

# 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 0

Następne krokiNext steps

W tym artykule zaplanowano w węźle wirtualnym i przypisano prywatny, wewnętrzny adres IP.In this article, a pod was scheduled on the virtual node and assigned a private, internal IP address. Zamiast tego można utworzyć wdrożenie usługi i skierować ruch do swojego użytkownika przy użyciu modułu równoważenia obciążenia lub kontrolera transferu danych przychodzących.You could instead create a service deployment and route traffic to your pod through a load balancer or ingress controller. Aby uzyskać więcej informacji, zobacz Tworzenie podstawowego kontrolera danych wejściowych w AKS.For more information, see Create a basic ingress controller in AKS.

Węzły wirtualne są często jednym składnikiem rozwiązania do skalowania w AKS.Virtual nodes are often one component of a scaling solution in AKS. Aby uzyskać więcej informacji na temat skalowania rozwiązań, zobacz następujące artykuły:For more information on scaling solutions, see the following articles: