Создание и настройка кластера Службы Azure Kubernetes (AKS) для использования виртуальных узлов на портале Azure

Виртуальные узлы обеспечивают сетевое взаимодействие между модулями pod, работающими в кластерах Экземпляры контейнеров Azure (ACI) и Служба Azure Kubernetes (AKS). Для обеспечения этого взаимодействия создается подсеть виртуальной сети и назначаются делегированные разрешения. Виртуальные узлы работают только с кластерами AKS, созданными с помощью сетевого взаимодействия уровня Расширенный (Azure CNI). Кластеры AKS создаются с базовыми сетями (kubenet) по умолчанию.

В этой статье показано, как создать виртуальную сеть и подсети, а затем развернуть кластер AKS, использующий расширенную сеть с помощью портал Azure.

Примечание.

Общие сведения о доступности и ограничении региона виртуального узла см. в статье "Использование виртуальных узлов" в AKS.

Подготовка к работе

Вам нужен поставщик услуг ACI, зарегистрированный в вашей подписке.

  • Проверьте состояние регистрации поставщика ACI с помощью az provider list команды.

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

    В следующем примере выходных данных показано, как зарегистрирован поставщик Microsoft.ContainerInstance:

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    
  • Если поставщик не зарегистрирован, зарегистрируйте его с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerInstance
    

Создание кластера AKS

  1. Перейдите на домашнюю страницу портал Azure.
  2. Выберите "Создать контейнеры ресурсов>".
  3. В ресурсе Служба Azure Kubernetes (AKS) нажмите кнопку "Создать".
  4. На странице "Основы" настройте следующие параметры:
    • Сведения о проекте: выберите подписку Azure, а затем выберите или создайте группу ресурсов Azure, например myResourceGroup.
    • Сведения о кластере: введите имя кластера Kubernetes, например myAKSCluster. Выберите регион и версию Kubernetes для кластера AKS.
  5. Нажмите кнопку "Далее": пулы узлов и проверка *Включить виртуальные узлы. Screenshot that shows creating a cluster with virtual nodes enabled on the Azure portal. The option 'Enable virtual nodes' is highlighted.
  6. Выберите Review + create (Просмотреть и создать).
  7. После завершения проверки нажмите кнопку "Создать".

По умолчанию этот процесс создает управляемое удостоверение кластера, которое используется для связи кластера и интеграции с другими службами Azure. Дополнительные сведения см. в статье о том, как использовать управляемые удостоверения. Вы также можете использовать субъект-службу в качестве удостоверения кластера.

Этот процесс настраивает кластер для расширенной сети и виртуальных узлов для использования собственной подсети виртуальной сети Azure. Подсеть имеет делегированные разрешения для подключения ресурсов Azure между кластером AKS. Если у вас еще нет делегированной подсети, портал Azure создает и настраивает виртуальную сеть Azure и подсеть с виртуальными узлами.

Подключение к кластеру

Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнить действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью. Управлять кластером Kubernetes можно при помощи kubectl, клиента командной строки Kubernetes. Клиент kubectl предварительно установлен в Azure Cloud Shell.

  1. Настройте kubectl подключение к кластеру az aks get-credentials Kubernetes с помощью команды. В следующем примере возвращаются учетные данные для имени кластера myAKSCluster в группе ресурсов myResourceGroup.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Проверьте подключение к кластеру kubectl get nodesс помощью .

    kubectl get nodes
    

    В следующем примере выходных данных показан созданный один узел виртуальной машины и виртуальный узел 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
    

Развертывание примера приложения

  1. В Azure Cloud Shell создайте файл с именем virtual-node.yaml и скопируйте его в следующем YAML:

    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
    

    YamL определяет узелSelector и толерацию, что позволяет планировать модуль pod на виртуальном узле. Группа pod получает внутренний IP-адрес из подсети виртуальной сети Azure, которая делегирована для использования с виртуальными узлами.

  2. Запустите приложение с помощью kubectl apply команды.

    kubectl apply -f virtual-node.yaml
    
  3. Просмотрите модули pod, запланированные на узле, с помощью kubectl get pods команды с аргументом -o wide .

    kubectl get pods -o wide
    

    В следующем примере выходных данных показан модуль pod, запланированный virtual-node-helloworldvirtual-node-linux на узле.

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

Примечание.

При использовании образов, хранящихся в Реестре контейнеров Azure, настройте и используйте секрет Kubernetes. Ограничение виртуальных узлов заключается в том, что вы не можете использовать встроенную проверку подлинности субъекта-службы Microsoft Entra. Если вы не используете секрет, модули pod, запланированные на виртуальные узлы, не будут запускаться и сообщат об ошибке HTTP response status code 400 error code "InaccessibleImage".

Тестирование группы pod на виртуальном узле

Чтобы протестировать выполнение группы pod на виртуальном узле, откройте демонстрационную версию приложения в веб-клиенте. Модуль pod назначает внутренний IP-адрес, поэтому вы можете легко проверить подключение из другого модуля pod в кластере AKS.

  1. Создайте тестовый модуль pod и подключите к нему сеанс терминала с помощью следующей kubectl run команды.

    kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  2. Установите curl в pod с помощью следующей apt-get команды.

    apt-get update && apt-get install -y curl
    
  3. Получите доступ к адресу pod с помощью следующей curl команды и укажите внутренний IP-адрес.

    curl -L http://10.241.0.4
    

    В следующем сжатом примере выходных данных показано демонстрационное приложение.

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  4. Закройте сеанс терминала в тестовом модуле pod exit, с помощью которого также удаляется модуль pod.

    exit
    

Следующие шаги

В этой статье вы запланировали pod на виртуальном узле и назначили частный внутренний IP-адрес. Если вы хотите, можно создать развертывание службы и маршрутизировать трафик к модулю pod через подсистему балансировки нагрузки или контроллер входящего трафика. Дополнительные сведения см. в статье Создание контроллера входящего трафика в Службе Azure Kubernetes (AKS).

Виртуальные узлы — это один из компонентов, необходимых для масштабирования решения в AKS. Дополнительные сведения о таких решениях см. в следующих статьях: