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


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

Стратегия последовательного обновления обновляет узлы по одному (или несколько за раз), минимизируя нарушения рабочей нагрузки, обеспечивая доступность пула узлов во время обновления. В этой статье объясняется, как настроить роллинговые обновления для пулов узлов AKS, включая настройки пиковых нагрузок, время ожидания очистки и время стабилизации.

Перед тем как начать

  • Убедитесь, что уровень управления уже обновлен до целевой версии Kubernetes. Невозможно обновить пулы узлов до версии выше уровня управления. Дополнительные сведения см. в разделе Об обновлении уровня управления кластером AKS.
  • Если вы используете Azure CLI, для этой статьи требуется Azure CLI версии 2.34.1 или более поздней. Используйте команду az --version для поиска версии. Если вам нужно установить или обновить, см. статью [Установка Azure CLI][azure-cli-install].
  • Для настройки поэтапного обновления пулов узлов AKS требуется Microsoft.ContainerService/managedClusters/agentPools/write разрешение роли RBAC.

Обзор поведения последовательного обновления

Во время последовательного обновления AKS выполняет следующие операции для каждого узла в пуле узлов:

  1. Добавление узлов всплеска: добавление новых узлов буфера на основе параметров максимального всплеска (--max-surge) для поддержания емкости во время обновления.
  2. Узлы кордона и дренажа: Кордонуйте и дренируйте старые узлы поочередно, чтобы свести к минимуму сбои в работе приложений. Если вы используете max surge, он изолирует и освобождает столько узлов одновременно, сколько указано буферных узлов.
  3. Ожидайте период стабилизации (необязательно): дождитесь заданной продолжительности стабилизации, прежде чем продолжить, чтобы позволить рабочим нагрузкам стабилизироваться на новых узлах перед продолжением обновления.
  4. Переустановка образа старых узлов: когда старые узлы освобождаются, им устанавливается новый образ для получения новой версии. Пересозданные узлы становятся буферными узлами для следующего набора узлов для обновления.
  5. Повторение. Процесс повторяется до тех пор, пока не будут обновлены все узлы в пуле узлов.
  6. Удаление узлов всплеска: после обновления всех узлов все остальные буферные узлы удаляются, сохраняя исходный размер пула узлов и баланс.

Настройка параметров последовательного обновления

Настройка всплеска узла

Это важно

  • При всплеске активности узлов для каждой операции обновления требуется квота подписки, соответствующая запрошенному максимальному числу всплесков. Например, кластер с пятью пулами узлов, каждый из которых имеет количество четырех узлов, имеет в общей сложности 20 узлов. Если каждый пул узлов имеет максимальное значение всплеска в 50%, для завершения обновления требуется дополнительная квота вычислений и IP-адресов 10 узлов (два узла × пять пулов).
  • Параметр максимального всплеска активности для пула узлов является постоянным. Последующие обновления Kubernetes или обновления версий узлов используют этот параметр. Максимальное значение всплеска для пулов узлов можно изменить в любое время. Для производственных пулов рабочих узлов мы рекомендуем установить максимальное значение прироста в 33%.
  • Если вы используете Azure CNI, проверьте наличие доступных IP-адресов в подсети для удовлетворения требований к IP-адресам Azure CNI.

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

Например, максимальное значение перегрузки 100% обеспечивает самый быстрый процесс обновления, но также приводит к одновременному отключению всех узлов узлового пула. Для тестирования сред может потребоваться использовать более высокое значение. Для пулов рабочих узлов рекомендуется установить максимальный параметр всплеска 33%.

AKS принимает целочисленные значения и процентное значение для параметра максимального всплеска активности. Рассмотрим пример.

Тип значения Example Description
Целое число 5 Пять дополнительных узлов для всплеска
Процент 50% Значение всплеска, равное половине текущего количества узлов в пуле.

Минимальное значение процента всплеска может быть 1%, а максимальное — 100%. Процентное значение округляется до ближайшего числа узлов. Если максимальное значение всплеска превышает требуемое количество узлов, которое необходимо обновить, количество узлов, которые необходимо обновить, используется для максимального значения всплеска.

Установка максимального значения всплеска

Задайте максимальные значения превышения для новых или существующих пулов узлов с помощью команды az aks nodepool add или az aks nodepool update с параметром --max-surge. Рассмотрим пример.

# Set max surge for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33%

# Update max surge for an existing node pool 
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 5

Настройка недоступных узлов

Это важно

  • Чтобы задать максимальное значение недоступности, необходимо установить максимальное значение повышения до 0. Два значения не могут быть активными одновременно.
  • Максимальное число недоступных не создает узлы всплеска во время процесса обновления. Вместо этого AKS изолирует n узлов (максимальное количество недоступных узлов) за раз и вытесняет pod на другие узлы в пуле агентов. Это может привести к сбоям рабочей нагрузки, если модули pod не могут быть запланированы.
  • Максимальная недоступность может привести к большим сбоям из-за несоотвеченных бюджетов нарушений pod (PDB), так как для модулей pod требуется меньше ресурсов, которые необходимо запланировать. Дополнительные сведения см. в разделе Устранение проблем для бюджетов прерывания Pod.
  • Невозможно задать максимальное количество недоступных в пулах узлов системы.

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

AKS принимает как целочисленные значения, так и процентное значение для максимального недоступного значения. Рассмотрим пример.

Тип значения Example Description
Целое число 5 Пять узлов изолированы от существующих узлов
Процент 50% Половина текущего количества узлов в пуле будет недоступна

Максимальное число недоступных процентных значений может быть минимальным 1% и максимальным 100%. Процентное значение округляется до ближайшего числа узлов.

Установка максимального недоступного значения

Задайте максимальные значения недоступности для новых или существующих пулов узлов с помощью команды az aks nodepool add, az aks nodepool update или az aks nodepool upgrade с параметром --max-unavailable. Рассмотрим пример.

# Set max unavailable for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

# Update max unavailable for an existing node pool 
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

# Set max unavailable at upgrade time
az aks nodepool upgrade \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

Настройка тайм-аута освобождения узла

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

Значение времени ожидания очистки узлов по умолчанию составляет 30 минут. Значения таймаута очистки узлов могут составлять от 5 минут до 24 часов.

Если время ожидания завершения слива истекает, и поды всё ещё работают, операция обновления останавливается. Любая последующая PUT операция возобновляет остановленное обновление.

Подсказка

Для длительных pod следует также настроить terminationGracePeriodSeconds в спецификации pod.

Установка времени ожидания завершения операций на узле

Задайте время ожидания вывода узла из эксплуатации (в минутах) для новых или существующих пулов узлов с помощью команды az aks nodepool add или az aks nodepool update с параметром --drain-time-out.

# Set drain timeout for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --drain-time-out 100

# Update drain timeout for an existing node pool
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --drain-time-out 45

Настройка времени замачивания узла

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

Время замачивания узла по умолчанию — 0 минут. Значения времени ожидания узла могут составлять не менее 0 минут и не более 30 минут. Мы рекомендуем сохранить время выдержки как можно короче. Более высокое время ожидания узла увеличивает общую продолжительность обновления и задержки обнаружения проблем.

Установка значения времени пропитки узла

Установите время подготовки узла (в минутах) для новых или существующих пулов узлов, используя команду az aks nodepool add, az aks nodepool update или az aks nodepool upgrade с флагом --node-soak-duration.

# Set node soak time for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --node-soak-duration 10

# Update node soak time for an existing node pool
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33% \
    --node-soak-duration 5

# Set node soak time when upgrading an existing node pool
az aks nodepool upgrade \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33% \
    --node-soak-duration 20

Просмотр событий обновления узла AKS

Просмотр событий обновления с помощью kubectl get events команды для мониторинга хода выполнения последовательного обновления.

kubectl get events --field-selector reason=Drain,reason=Surge,reason=Upgrade

Пример выходных данных во время события обновления:

default  2m1s  Normal  Drain    node/aks-nodepool1-12345678-vmss000001  Draining node: [aks-nodepool1-12345678-vmss000001]
default  9m22s Normal  Surge    node/aks-nodepool1-12345678-vmss000002  Created a surge node [aks-nodepool1-12345678-vmss000002 nodepool1] for agentpool nodepool1
default  1m45s Normal  Upgrade  node/aks-nodepool1-12345678-vmss000001  Soak duration 5m0s after draining node: aks-nodepool1-12345678-vmss000001

В следующей таблице приведены рекомендуемые параметры обновления пула узлов для рабочих нагрузок:

Setting Recommendation
Максимальный скачок Установите значение 33% для пулов рабочих узлов
Время ожидания очистки Настройте на основе требований вашего pod с наибольшей продолжительностью работы.
Время замачивания Используйте короткую длительность (0–5 минут), если вам не нужна ручная проверка
Бюджеты нарушений pod Настройте PDB для критически важных рабочих нагрузок для контроля вытеснения подов
Порядок обновления Сначала обновите пулы узлов, отличных от рабочей среды, чтобы проверить новую версию.