Работа с пулами системных узлов в Службе Azure Kubernetes

В службе Azure Kubernetes Service (AKS) узлы одной и той же конфигурации группируются в пулы узлов. Пулы узлов содержат базовые виртуальные машины, на которых выполняются ваши приложения. Пулы системных узлов и пулы узлов пользователей — это два разных режима пула узлов для кластеров AKS. Пулы системных узлов служат основной цели размещения критически важных системных модулей, таких как CoreDNS и metrics-server. Пулы узлов пользователей служат основной цели размещения модулей Pod приложения. Однако модули приложений можно запланировать в пулах системных узлов, если в кластере AKS требуется только один пул. Каждый кластер AKS должен содержать по крайней мере один системный пул узлов с по крайней мере двумя узлами.

Внимание

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

В этой статье объясняется, как управлять пулами системных узлов в AKS. Сведения об использовании нескольких пулов узлов см. в статье об использовании нескольких пулов узлов.

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

Необходимо установить и настроить Azure CLI версии 2.3.1 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Ограничения

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

  • См . сведения о квотах, ограничениях размера виртуальной машины и доступности регионов в AKS.
  • Для установки режима пула узлов необходимо использовать API версии 2020-03-01 или более поздней. Кластеры, созданные в версиях API старше 2020-03-01, содержат только пулы узлов пользователей, но их можно перенести для включения пулов системных узлов, выполнив действия для обновления режима пула.
  • Имя пула узлов может содержать только буквы в нижнем регистре и должно начинаться с буквы в нижнем регистре. Для пулов узлов Linux длина должна составлять от 1 до 12 символов. Для пулов узлов Windows длина должна составлять от одного до шести символов.
  • Режим пула узлов является обязательным свойством и должен быть задан явно при использовании шаблонов ARM или прямых вызовов API.

Пулы системных узлов и узлов пользователей

Для пула системных узлов AKS автоматически присваивает узлам в нем метку kubernetes.Azure.com/mode: system. Поэтому AKS предпочитает планировать системные объекты pod в пулах узлов, содержащих эту метку. Эта метка не препятствует планированию модулей pod приложений в пулах системных узлов. Однако рекомендуется изолировать критически важные системные модули pod от модулей pod приложений, чтобы предотвратить неправильно настроенные или изгойные модули pod приложений от случайного удаления системных модулей pod.

Это поведение можно реализовать, создав выделенный пул системных узлов. Используйте отметку CriticalAddonsOnly=true:NoSchedule, чтобы запретить планирование объектов pod приложений в пулах системных узлов.

С пулами системных узлов связаны следующие ограничения:

  • Пулы системных узлов должны поддерживать не менее 30 объектов pod, как описано в формуле минимального и максимального количества объектов pod.
  • У пулов системных узлов должен быть osType Linux.
  • У пулов узлов пользователей osType должен быть Linux или Windows.
  • Системные пулы должны содержать не менее двух узлов, а пулы пользовательских узлов могут содержать ноль или несколько узлов.
  • Для пулов системных узлов требуется номер SKU виртуальной машины не менее 4 виртуальных ЦП и 4 ГБ памяти.
  • Виртуальные машины серии B не поддерживаются для пулов системных узлов.
  • Рекомендуется не менее трех узлов с 8 виртуальными ЦП или двумя узлами не менее 16 виртуальных ЦП (например, Standard_DS4_v2), особенно для больших кластеров (несколько модулей Pod CoreDNS, реплика, 3-4+ надстроек и т. д.).
  • Для пулов точечных узлов требуются пулы узлов пользователей.
  • Добавление другого пула системных узлов или изменение пула узлов является пулом системных узлов , не выполняет автоматическое перемещение системных модулей pod. Системные модули pod могут продолжать работать в одном пуле узлов, даже если вы измените его на пул узлов пользователя. При удалении или уменьшении масштаба пула узлов под управлением системных модулей pod, которые ранее были пулом системных узлов, эти системные модули pod повторно развертываются с предпочтительным планированием в новом пуле системных узлов.

С пулами узлов вы можете выполнять следующие операции:

  • Создание выделенного пула системных узлов (предпочтительное назначение системных объектов pod пулам узлов mode:system).
  • Изменение пула системных узлов на пул узлов пользователей при условии, что в кластере AKS имеется другой пул системных узлов.
  • Изменение пула узлов пользователей на пул системных узлов.
  • Удаление пулов узлов пользователей.
  • Пулы системных узлов можно удалить при условии, что в кластере AKS имеется другой пул системных узлов.
  • Кластер AKS может иметь несколько пулов системных узлов и требует наличия хотя бы одного пула системных узлов.
  • Если вы хотите изменить различные неизменяемые параметры для существующих пулов узлов, можно создать новые пулы узлов на замену. Например, можно добавить новый пул узлов с новым параметром maxPods и удалить старый пул узлов.
  • Используйте сходство узлов, чтобы требовать или предпочитать , какие узлы можно запланировать на основе меток узлов. Можно задать key значение , operatorInа valuesusersystem также для YAML, применяя это определение с помощью kubectl apply -f yourYAML.yamlэтого определения.kubernetes.azure.com

Создание нового кластера AKS с пулом системных узлов

При создании нового кластера AKS начальный пул узлов по умолчанию использует режим типа system. При создании пулов узлов с помощью az aks nodepool add эти пулы узлов будут пулами узлов пользователей, если только вы явно не укажете значение параметра mode.

В следующем примере создается группа ресурсов с именем myResourceGroup в регионе eastus.

az group create --name myResourceGroup --location eastus

Используйте команду az aks create, чтобы создать кластер AKS. В следующем примере создается кластер с именем myAKSCluster с одним выделенным системным пулом, содержащим два узла. Для рабочих нагрузок убедитесь, что вы используете пулы системных узлов по крайней мере с тремя узлами. Выполнение этой операции займет несколько минут.

# Create a new AKS cluster with a single system pool
az aks create -g myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys

Добавление выделенного пула системных узлов в существующий кластер AKS

В существующие кластеры AKS можно добавить один или несколько пулов системных узлов. Рекомендуется запланировать выполнение объектов pod приложений на пулах узлов пользователей, а пулы системных узлов выделить только для критически важных системных объектов pod. Это предотвращает случайное удаление системных модулей pod из-за неправильного удаления модулей pod приложения-изгоев. Применяйте такой прием в сочетании с отметкойCriticalAddonsOnly=true:NoSchedule для пулов системных узлов.

Следующая команда добавляет выделенный пул узлов типа "Система" с тремя узлами по умолчанию.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name systempool \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --mode System

Отображение сведений о пуле узлов

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

az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n systempool

Для пулов системных узлов определен режим типа Система, а для пулов узлов пользователей — Пользователь. В случае системного пула убедитесь, что для параметра отметки задано значение CriticalAddonsOnly=true:NoSchedule, что позволит предотвратить планирование объектов pod приложений в этом пуле узлов.

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 3,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "System",
  "name": "systempool",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
  "nodeLabels": {},
  "nodeTaints": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "orchestratorVersion": "1.16.10",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "myResourceGroup",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

Обновление существующих пулов системных узлов и узлов пользователей в кластере

Примечание.

Для установки режима пула системных узлов необходимо использовать API версии 2020-03-01 или более поздней. Кластеры, созданные в версиях API старше 2020-03-01, будут содержать только пулы узлов пользователей. Чтобы пользоваться функциями и преимуществами пула системных узлов в старых кластерах, обновите режим существующих пулов узлов, используя следующие команды в последней версии Azure CLI.

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

Эта команда изменяет пул системных узлов на пул узлов пользователей.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode user

Эта команда изменяет пул узлов пользователей на пул системных узлов.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode system

Удаление пула системных узлов

Примечание.

Чтобы использовать пулы системных узлов в кластерах AKS до версии API 2020-03-02, добавьте новый пул системных узлов, а затем удалите исходный пул узлов по умолчанию.

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

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster -n mynodepool

Очистка ресурсов

Чтобы удалить кластер, воспользуйтесь командой удаления az group delete. Она удалит группу ресурсов AKS.

az group delete --name myResourceGroup --yes --no-wait

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

Из этой статьи вы узнали, как создать пулы системных узлов и управлять ими в кластере AKS. Сведения о запуске и остановке пулов узлов AKS см. в разделе "Запуск и остановка пулов узлов AKS".