Поделиться через


Настройка подсети Pod Azure CNI — динамическое выделение IP-адресов и расширенная поддержка подсетей в службе Azure Kubernetes Service (AKS)

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

Так вы получите следующие преимущества:

  • Более эффективное использование IP-адресов. IP-адреса выделяются динамически для Pod кластера из подсети Pod. Это обеспечивает более эффективное использование IP-адресов в кластере по сравнению с традиционным решением CNI, которое выполняет статическое выделение IP-адресов для каждого узла.
  • Масштабируемость и гибкость. Подсети узлов и модулей pod можно масштабировать независимо друг от друга. Одну и ту же подсеть pod можно совместно использовать в нескольких пулах узлов кластера или в нескольких кластерах AKS, развернутых в одной виртуальной сети. Можно также настроить отдельную подсеть pod для пула узлов.
  • Высокая производительность: Поскольку подам назначаются IP-адреса виртуальной сети, они имеют прямое подключение к другим подам кластера и ресурсам в виртуальной сети (VNet). Такое решение обеспечивает поддержку очень больших кластеров без снижения производительности.
  • Отдельные политики виртуальной сети для модулей pod. Так как модули pod размещаются в отдельной подсети, для них можно настроить отдельные политики виртуальной сети, отличные от политик узлов. Это позволяет использовать множество полезных сценариев, таких как разрешение подключения к Интернету только для модулей pod, а не для узлов, исправление исходного IP-адреса для pod в пуле узлов с помощью шлюза NAT Azure и использование групп безопасности сети для фильтрации трафика между пулами узлов.
  • Сетевые политики Kubernetes: как политики сети Azure, так и Calico работают с этим новым решением.

В этой статье показано, как использовать подсеть Azure CNI Pod — динамическое выделение IP-адресов и расширенную поддержку подсетей в AKS.

Prerequisites

  • Ознакомьтесь с предварительными условиями для настройки базовой сети Azure CNI в AKS, так как к этой статье применяются те же предварительные требования.

  • Просмотрите параметры развертывания для настройки базовой сети Azure CNI в AKS, так как применяются те же параметры.

  • Механизм AKS и кластеры ручной сборки не поддерживаются.

  • Azure CLI версии 2.37.0 или более поздней.

  • Если у вас есть существующий кластер, необходимо включить Аналитику контейнеров для мониторинга использования IP-подсети. Вы можете включить Аналитику az aks enable-addons контейнеров с помощью команды, как показано в следующем примере:

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

Планирование IP-адресации

Планирование IP-адресов гораздо проще с помощью этой функции. Так как узлы и поды масштабируются независимо друг от друга, их адресные пространства также можно планировать отдельно. Так как подсети pod можно настроить на степень детализации пула узлов, при добавлении пула узлов всегда можно добавить новую подсеть. Системные модули pod в кластере или пуле узлов также получают IP-адреса из подсети pod, поэтому это поведение также необходимо учитывать.

IP-адреса выделяются узлам пакетами по 16 адресов. Выделение IP-адресов подсети Pod должно составлять не менее 16 IP-адресов на узел в кластере; узлы запрашивают 16 IP-адресов при запуске и будут запрашивать другой пакет из 16 в любой момент, когда в их выделениях не <указано 8 IP-адресов.

Планирование IP-адресов для служб Kubernetes и моста Docker остается неизменным.

Чтобы просмотреть и проверить ресурсы NodeNetworkConfiguration (NNC), ответственные за эти выделения IP-адресов, можно выполнить следующую команду:

kubectl get nodenetworkconfigs -n kube-system -o wide

Максимальное количество подов на узел в кластере с подсетью Pod — динамическим выделением IP-адресов и расширенной поддержкой подсети

Количество pod на узел при использовании подсети Pod Azure CNI — динамическое выделение IP-адресов несколько отличается от традиционной характеристики CNI.

CNI Default Настройка при развертывании
Традиционное Azure CNI 30 Да (до 250)
Подсеть Pod Azure CNI — динамическое выделение IP-адресов 250 Да (до 250)

Все остальные рекомендации, связанные с настройкой максимального количества pod на узлы, остаются неизменными.

Параметры развертывания

Параметры развертываниядля настройки базовых сетей Azure CNI в AKS являются допустимыми с двумя исключениями:

  • Теперь параметр подсети ссылается на подсеть, связанную с узлами кластера.
  • Дополнительный параметр pod subnet используется для указания подсети, IP-адреса которой будут динамически выделяться подсистемам.

Настройка подсети Pod — динамическое выделение IP-адресов и расширенная поддержка подсети — Azure CLI

Использование подсети Pod — динамическое выделение IP-адресов и расширенная поддержка подсети в кластере аналогична методу по умолчанию для настройки кластера Azure CNI. В следующем примере описывается создание новой виртуальной сети с подсетью для узлов и подсетью для модулей, а также создание кластера, использующего подсеть модулей в Azure CNI — динамическое выделение IP-адресов и расширенную поддержку подсети. Обязательно замените такие переменные, как $subscription, своими собственными значениями.

Создайте виртуальную сеть с двумя подсетями.

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

Создайте кластер, ссылаясь на подсеть узла, используя --vnet-subnet-id и подсеть pod, используя --pod-subnet-id и включив надстройку мониторинга.

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring \
    --generate-ssh-keys

Добавление пула узлов

При добавлении пула узлов ссылайтесь на подсеть узла, используя --vnet-subnet-id, и на подсеть пода, используя --pod-subnet-id. В следующем примере создаются две новые подсети, на которые затем ссылается создание пула узлов:

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

Мониторинг использования IP-подсети

Azure CNI предоставляет возможность отслеживать использование IP-подсети. Чтобы включить мониторинг использования IP-подсети, выполните следующие действия.

Получение YAML-файла

  1. Скачайте или выполните команду grep для файла с именем container-azm-ms-agentconfig.yaml из GitHub.

  2. Найти azure_subnet_ip_usage в интеграциях. Задайте для параметра enabled значение true.

  3. Сохраните файл.

Получение учетных данных AKS

Задайте переменные для подписки, группы ресурсов и кластера. Рассмотрим следующие примеры:

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

Примените конфигурацию

  1. Откройте терминал в папке, в которой сохранен скачанный файл container-azm-ms-agentconfig.yaml .
  2. Примените конфигурацию kubectl apply -f container-azm-ms-agentconfig.yaml с помощью команды. Это приведет к перезапуску модуля pod и через 5–10 минут метрики будут видны.
  3. Просмотрите метрики в кластере, перейдя к книгам на странице кластера на портале Azure и найдите книгу с именем "Использование IP-адресов подсети".

Подсеть Pod Azure CNI — динамическое выделение IP-адресов и расширенная поддержка подсетей: часто задаваемые вопросы

  • Можно ли назначить несколько подсетей pod кластеру, пулу узлов?

    Только одна подсеть может быть назначена кластеру или пулу узлов. Однако несколько кластеров или пулов узлов могут совместно использовать одну подсеть.

  • Можно ли назначить подсети Pod из совершенно другой виртуальной сети?

    Нет, подсеть pod должна быть из той же виртуальной сети, что и кластер.

  • Могут ли некоторые пулы узлов в кластере использовать традиционные CNI, а другие используют новый CNI?

    Весь кластер должен использовать только один тип CNI.

Дальнейшие шаги

Узнайте больше о сетевом взаимодействии в AKS из следующих статей: