Использование виртуальных узлов версии 2 в Azure Kubernetes Service (AKS) (предварительная версия)

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

Important

Предварительные версии функций AKS доступны на условиях самообслуживания и по выбору пользователя. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

Поддерживается

  • Контейнеры инициализации.
  • Псевдонимы узлов
  • Перехватчики жизненного цикла контейнера (postStart и preStop)
  • kubectl exec с аргументами
  • Постоянные тома и PVCs (только Файлы Azure)
  • Пиринг виртуальных сетей
  • Исходящие исходящие данные, контролируемые NSG
  • Шлюз NAT для исходящего трафика
  • Конфиденциальные контейнеры
  • До 200 модулей pod на виртуальный узел

Limitations

Следующие функции не поддерживаются:

  • Контейнеры Windows
  • DaemonSets
  • перенаправление портов;
  • IPv6
  • Диапазоны разрешенных IP-адресов сервера API
  • Сетевой слой Azure CNI
  • Cilium или NPM в качестве политики сети
  • Перенос собственной виртуальной сети (BYO)
  • Несколько экземпляров расширений на кластер
  • Резервные пулы

Ограничения доступности ресурсов и квоты

Виртуальные узлы версии 2 доступны во всех Azure общедоступных облачных регионах, где Экземпляры контейнеров Azure поддерживает номера SKU виртуальной сети. Дополнительные сведения см. в разделе о ограничениях доступности ресурсов и квотах для ACI.

Prerequisites

  • Azure CNI в режиме подсети узла
  • Calico или нет в качестве политики сети
  • Удостоверение рабочей нагрузки включено
  • По крайней мере один пул узлов с размером виртуальной машины размером 4+ виртуальных ЦП и 16+ ГиБ памяти. Каждый виртуальный узел резервирует около 3 виртуальных ЦП и 12 ГиБ памяти на узле AKS в кластере, поэтому убедитесь, что узлы имеют достаточно ресурсов.
  • k8s-extension версии 1.8 или более поздней
  • kubectl 1.30 или более поздней версии

Зарегистрируйте поставщика ресурсов ACI:

az provider register --namespace Microsoft.ContainerInstance

Note

Выполните следующую команду, если возникла ошибка на любом этапе процесса включения расширения.

az provider register --namespace Microsoft.KubernetesConfig

Включение виртуальных узлов версии 2

Установите расширение:

az k8s-extension create \
    --name <extension-name> \
    --extension-type Microsoft.virtualnodes \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters \
    --configuration-settings replicaCount=1   # specifies number of virtual nodes - optional

Настройка параметров расширения

Операции создания и обновления поддерживают следующие параметры конфигурации.

Параметр конфигурации Description
replicaCount Количество виртуальных узлов.
admissionControllerReplicaCount Количество модулей pod контроллера допуска.
podAnnotations Заметки, добавленные в модули pod инфраструктуры в виде карты "ключ-значение".
nodeSelector Метки, которые выбирают узлы AKS, на которых размещается инфраструктура и модули pod контроллера допуска.
tolerations Терпимые действия, применяемые к модулям pod контроллера инфраструктуры и допуска.
affinity Дополнительные параметры сходства, объединенные с необходимыми правилами сходства AKS.
zones Зоны доступности с разделителями с запятой, в которых развертываются модули pod.
nodeLabels Метки, добавленные к виртуальным узлам в виде пар, разделённых запятыми key=value.

Допустимые kubernetes.io метки:

  • beta.kubernetes.io/arch
  • beta.kubernetes.io/instance-type
  • beta.kubernetes.io/os
  • failure-domain.beta.kubernetes.io/region
  • failure-domain.beta.kubernetes.io/zone
  • kubernetes.io/arch
  • kubernetes.io/hostname
  • kubernetes.io/os
  • node.kubernetes.io/instance-type
  • topology.kubernetes.io/region
  • topology.kubernetes.io/zone

Проверьте расширение:

az k8s-extension show \
    --name <extension-name> \
    --cluster-type managedClusters \
    --cluster-name <cluster-name> \
    --resource-group <resource-group>

Убедитесь, что provisioningState является Succeeded. Он может остаться Pending в течение нескольких минут.

Убедитесь, что модули pod расширения выполняются в vn-system пространстве имен:

kubectl get pods --namespace vn-system

Обновление расширения

az k8s-extension update --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters

Note

Параметр --auto-upgrade-mode поддерживает none, patchили compatible. Чтобы закрепить определенную версию расширения, установите --versionдля этого значение --auto-upgrade-modenone.

доступ Реестр контейнеров Azure

Чтобы извлечь изображения из частной Реестр контейнеров Azure (ACR), используйте управляемое удостоверение расширения или секрет извлечения образа Kubernetes.

Использование управляемого удостоверения расширения

Предоставьте AcrPull роль управляемому удостоверению, созданному для расширения. Эта роль предоставляет всем подам, работающим на виртуальных узлах расширения, доступ к извлечению образов из реестра без дополнительной настройки подов. Необходимо иметь разрешение на создание назначений ролей в реестре.

Получите идентификатор субъекта управляемого удостоверения расширения:

$extensionPrincipalId = az k8s-extension show --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv

Получите идентификатор ресурса реестра контейнеров:

$acrId = az acr show --name <acr-name> --resource-group <acr-resource-group> --query id --output tsv

AcrPull Назначьте роль управляемому удостоверению расширения в области реестра:

az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId

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

Использование секрета извлечения изображения

Инструкции см. в разделе "Секрет извлечения Kubernetes" для проверки подлинности ACR.

Развертывание рабочей нагрузки на виртуальных узлах версии 2

Запланируйте модули pod на виртуальных узлах с помощью virtualization: virtualnode2 селектора узлов и virtual-kubelet.io/provider толерации:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: hello
          image: mcr.microsoft.com/azuredocs/aci-helloworld
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: "1"
              memory: 1Gi
      nodeSelector:
        virtualization: virtualnode2
        kubernetes.io/os: linux
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule

Сохраните манифест как demo.yaml, а затем примените его.

kubectl apply -f demo.yaml

Убедитесь, что поды запущены.

kubectl get pods -l app=demo -o wide

Отключение виртуальных узлов версии 2

Предупреждение

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

Удалите расширение и очистите ресурсы виртуального узла.

az k8s-extension delete \
    --name <extension-name> \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters
kubectl delete node <virtual-node-name>

Дальнейшие действия