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


Варианты обновления и рекомендации для кластеров Службы Azure Kubernetes (AKS)

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

Описание этой статьи

Эта техническая справка предоставляет комплексные основы обновления AKS по следующим вопросам:

  • Варианты обновления: ручной и автоматический, и когда следует использовать каждый из них.
  • Распространенные сценарии обновления с определенными рекомендациями.
  • Методы оптимизации для производительности и минимального сбоя.
  • Рекомендации по устранению неполадок с пропускной способностью, отводом и временными параметрами.
  • Процессы проверки и проверки перед обновлением.

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

Дополнительные сведения см. в следующих статьях:


Если вы не знакомы с обновлениями AKS, начните с центра сценариев обновления для интерактивной помощи на основе сценариев.

Быстрая навигация

Ваша ситуация Рекомендуемый путь
Для рабочего кластера требуется обновление Стратегии обновления рабочей среды
Рабочие нагрузки базы данных и состояния Шаблоны рабочих нагрузок с отслеживанием состояния
Первое обновление или базовый кластер Базовое обновление кластера AKS
Несколько сред или парка Центр сценариев обновления
Пулы узлов или узлы Windows Обновления пула узлов
Только конкретный пул узлов Обновление пула отдельных узлов

Опции обновления

Выполнение обновлений вручную

Обновления вручную позволяют управлять обновлением кластера до новой версии Kubernetes. Эти обновления полезны для тестирования или направления на определенную версию.

Настройка автоматических обновлений

Автоматические обновления поддерживают кластер в актуальной и поддерживаемой версии. Используйте эти обновления, если вы хотите автоматизировать параметры:

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

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

Чтобы поддерживать баланс зон, увеличивайте нагрузку кратно трём узлам. Запросы на постоянный том, использующие диски локально избыточного хранилища Azure, привязаны к определённой зоне и могут привести к простою, если дополнительные узлы находятся в другой зоне. Используйте бюджет прерывания pod (PDB) для обеспечения высокой доступности во время дренажа.

Оптимизация обновлений для повышения производительности и минимизации сбоев

Объедините запланированное время обслуживания, максимальный всплеск нагрузки, PDB, время простоя узла на истечение и время стабилизации узла, чтобы повысить вероятность успешного обновления с низким уровнем нарушений:

настройки обновления Использование дополнительных узлов Ожидаемое поведение
maxSurge=5, maxUnavailable=0 5 узлов всплеска Пять узлов подготовлены к обновлению.
maxSurge=5, maxUnavailable=0 0-4 узла всплеска Обновление завершается сбоем из-за нехватки узлов всплеска.
maxSurge=0, maxUnavailable=5 N/A Для обновления удаляются пять существующих узлов.

Замечание

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

Проверки, используемые в процессе обновления

AKS выполняет проверку перед обновлением, чтобы обеспечить работоспособность кластера:

  • Изменения API, нарушающие совместимость: Обнаруживает устаревшие API.
  • Версия обновления Kubernetes: Гарантирует допустимый путь обновления.
  • Конфигурация PDB: Проверяет некорректную настройку PDB (например, maxUnavailable=0).
  • Квота: Подтверждается, что квоты достаточно для узлов перегрузки.
  • Подсеть: Проверяет достаточные IP-адреса.
  • Сертификаты/служебные субъекты: Обнаруживает истекшие учетные данные.

Эти проверки помогают свести к минимуму сбои обновления и обеспечить раннее представление о проблемах.

Распространенные сценарии и рекомендации по обновлению

Сценарий 1. Ограничения емкости

Если кластер ограничен уровнем продукта или региональной емкостью, обновления могут не удаться, если невозможно подготовить дополнительные узлы. Эта ситуация распространена с специализированными уровнями продуктов (например, узлами GPU) или в регионах с ограниченными ресурсами. Такие ошибки, как SKUNotAvailable, AllocationFailedили OverconstrainedAllocationRequest могут возникать, если maxSurge задано слишком большое значение для доступной емкости.

Рекомендации по предотвращению или разрешению

Сценарий 2. Сбои очистки узлов и PDOB-файлы

Обновления требуют очистки узлов (вытеснение контейнеров). Утечки могут завершиться сбоем, если модули pod медленно завершаются или строгие бюджеты нарушений pod (PDBS) блокируют вытеснения pod.

Пример ошибки:

Code: UpgradeFailed
Message: Drain node ... failed when evicting pod ... Cannot evict pod as it would violate the pod's disruption budget.

Вариант 1. Принудительное обновление (обход PDB)

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

Принудительное обновление игнорирует ограничения бюджета нарушений Pod (PDB) и может привести к нарушению работы службы путем одновременного вытеснения всех pod. Прежде чем использовать этот параметр, сначала попробуйте исправить неправильно настроенные PDB (проверьте настройки minAvailable/maxUnavailable в PDB, обеспечьте достаточное количество реплик pod, убедитесь, что PDB не блокируют все вытеснения).

Используйте принудительный буст только в том случае, если PDB-файлы мешают критическим обновлениям и не могут быть разрешены. Это переопределит защиту PDB и потенциально приведет к полной недоступности службы во время обновления.

Требования: Azure CLI 2.79.0 или API AKS версии 2025-09-01+

az aks upgrade \
  --name $CLUSTER_NAME \
  --resource-group $RESOURCE_GROUP_NAME \
  --kubernetes-version $KUBERNETES_VERSION \
  --enable-force-upgrade \
  --upgrade-override-until 2023-10-01T13:00:00Z

Замечание

  • Параметр upgrade-override-until определяет, когда завершается обход проверки (должен быть будущим датой и временем)
  • Если не указано иное, окно по умолчанию устанавливается на 3 дня от текущего момента.
  • Значение "Z" указывает часовой пояс UTC/GMT

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

Если принудительное обновление включено, оно имеет приоритет над всеми другими конфигурациями очистки. Параметры поведения недренируемых узлов (вариант 2) не будут применяться, когда активно принудительное обновление.

Вариант 2: Обработка неосушаемых узлов (с учетом PDB)

Используйте этот консервативный подход, чтобы уважать PDB при предотвращении сбоев обновления.

Настройте поведение узлов, неуправляемое:

az aks nodepool update \
  --resource-group <resource-group-name> \
  --cluster-name <cluster-name> \
  --name <node-pool-name> \
  --undrainable-node-behavior Cordon \
  --max-blocked-nodes 2 \
  --drain-timeout 30

Параметры поведения:

  • Расписание (по умолчанию): Удаляет заблокированный узел и выполняет замену при всплесках
  • Cordon (рекомендуется): Узел Cordons помечает его как kubernetes.azure.com/upgrade-status=Quarantined

Максимальное число заблокированных узлов (предварительная версия):

  • Указывает, сколько узлов, которые не могут быть очищены, допускается
  • Требуется задать undrainable-node-behavior
  • Значение по умолчанию — значение maxSurge (обычно 10%), если не указано
Предварительные требования для максимальных заблокированных узлов
  • Для использования функции максимального числа заблокированных узлов требуется расширение Azure CLI aks-preview версии 18.0.0b9 или более поздней.

    # Install or update the aks-preview extension
    az extension add --name aks-preview
    az extension update --name aks-preview
    
Пример конфигурации с максимальными заблокированными узлами
az aks nodepool update \
  --cluster-name jizenMC1 \
  --name nodepool1 \
  --resource-group jizenTestMaxBlockedNodesRG \
  --max-surge 1 \
  --undrainable-node-behavior Cordon \
  --max-blocked-nodes 2 \
  --drain-timeout 5

Рекомендации по предотвращению сбоев в очистке

  • Настройте maxUnavailable в PDB для разрешения по крайней мере одного удаления пода.
  • Увеличьте репликации подов для соблюдения требований бюджета нарушения
  • Увеличьте тайм-аут ожидания завершения, если рабочие нагрузки требуют больше времени. (Значение по умолчанию — 30 минут.)
  • Тестирование PDB в стейджинге, мониторинг событий обновления и использование сине-зеленых развертываний для критически важных нагрузок. Дополнительные сведения см. в разделе Сине-зеленое развертывание кластеров AKS.
Проверка неуправляемых узлов
  • Заблокированные узлы незапланированы для модулей pod и помечены меткой "kubernetes.azure.com/upgrade-status: Quarantined".

  • Проверьте метку на любых заблокированных узлах при сбое узла слива при обновлении:

    kubectl get nodes --show-labels=true
    
Устранение неподдающихся разгрузке узлов
  1. Удалите ответственный PDB:

    kubectl delete pdb <pdb-name>
    
  2. kubernetes.azure.com/upgrade-status: Quarantined Удалите метку:

    kubectl label nodes <node-name> <label-name>
    
  3. При необходимости удалите заблокированный узел:

    az aks nodepool delete-machines --cluster-name <cluster-name> --machine-names <machine-name> --name <node-pool-name> --resource-group <resource-group-name>
    
  4. После завершения этого шага можно примирить состояние кластера, выполнив любую операцию обновления без необязательных полей, как описано в az aks. Кроме того, можно масштабировать пул узлов до того же количества узлов, что и количество обновленных узлов. Это действие гарантирует, что пул узлов получает свой исходный размер. AKS уделяет приоритетное внимание удалению заблокированных узлов. Эта команда также восстанавливает состояние подготовки кластера на Succeeded. В следующем примере 2 — общее количество обновленных узлов.

    # Update the cluster to restore the provisioning status
    az aks update --resource-group <resource-group-name> --name <cluster-name>
    
    # Scale the node pool to restore the original size
    az aks nodepool scale --resource-group <resource-group-name> --cluster-name <cluster-name> --name <node-pool-name> --node-count 2
    

Сценарий 3. Медленные обновления

Консервативные параметры или проблемы на уровне узла могут отложить обновления, что влияет на способность оставаться в курсе исправлений и улучшений.

Распространенные причины медленных обновлений:

  • Низкие maxSurge или maxUnavailable значения (ограничивает параллелизм).
  • Высокий период ожидания (длительные ожидания между обновлениями узлов).
  • Сбои очистки (см. сбои с очисткой узлов).

Рекомендации по предотвращению или разрешению

  • maxSurge=33% Используйте maxUnavailable=1 для производственной среды.
  • Используйте maxSurge=50% и maxUnavailable=2 для разработки и тестирования.
  • Используйте исправление системы безопасности ОС для быстрого и целевого исправления (избегайте повторного создания полного узла).
  • Включите undrainableNodeBehavior, чтобы избежать блокировщиков обновления.

Сценарий 4. Исчерпание IP-адресов

Для узлов всплеска требуется больше IP-адресов. Если подсеть почти достигла вместимости, подготовка узла может пройти с ошибкой (например, Error: SubnetIsFull). Этот сценарий является распространенным для Azure Container Networking Interface, высокого уровня maxPods, или большого количества узлов.

Рекомендации по предотвращению или разрешению

  • Убедитесь, что в вашей подсети достаточно IP-адресов для всех узлов, дополнительных узлов и подов. Формула имеет значение Total IPs = (Number of nodes + maxSurge) * (1 + maxPods).

  • Отмените неиспользуемые IP-адреса или разверните подсеть (например, от /24 до /22).

  • Уменьшите maxSurge, если расширение подсети невозможно.

    az aks nodepool update \
      --resource-group <resource-group-name> \
      --cluster-name <cluster-name> \
      --name <node-pool-name> \
      --max-surge 10%
    
  • Мониторинг использования IP-адресов с помощью Azure Monitor или пользовательских оповещений.

  • Уменьшите размер каждого узла, очистите maxPods потерянные IP-адреса подсистемы балансировки нагрузки и запланируйте размер подсети для высокомасштабируемых кластеров.


Часто задаваемые вопросы

Можно ли использовать средства с открытым кодом для проверки?

Да. Многие средства с открытым кодом интегрируются хорошо с процессами обновления AKS:

  • kube-no-trouble (kubent): сканирует устаревшие API до обновления.
  • Trivy: сканирование безопасности для образов контейнеров и конфигураций Kubernetes.
  • Sonobuoy: проверка соответствия Kubernetes и проверка кластера.
  • kube-bench: проверки безопасности на соответствие стандартам Центра интернет-безопасности.
  • Polaris: проверка лучших практик Kubernetes.
  • kubectl-neat: приведение в порядок манифестов Kubernetes для проверки.

Как проверить совместимость API перед обновлением?

Выполните проверку устаревших функций с помощью таких инструментов, как kubent.

# Install and run API deprecation scanner
kubectl apply -f https://github.com/doitintl/kube-no-trouble/releases/latest/download/knt-full.yaml

# Check for deprecated APIs in your cluster
kubectl run knt --image=doitintl/knt:latest --rm -it --restart=Never -- \
  -c /kubeconfig -o json > api-deprecation-report.json

# Review findings
cat api-deprecation-report.json | jq '.[] | select(.deprecated==true)'

Что отличает обновления AKS от других платформ Kubernetes?

AKS предоставляет несколько уникальных преимуществ:

  • Встроенная интеграция Azure с Диспетчером трафика Azure, Azure Load Balancer и сетью.
  • Диспетчер флота Azure Kubernetes для координации многокластерных обновлений.
  • Автоматическое исправление образа узла без ручного управления узлами.
  • Встроенная проверка квот, сетей и учетных данных.
  • Поддержка Azure для проблем, связанных с обновлением.

Выбор пути обновления

Эта статья предоставила вам технический фундамент. Теперь выберите путь на основе сценария.

Готовы к выполнению?

Если у вас есть... Затем перейдите...
Рабочая среда Стратегии обновления производственной среды: проверенные на практике шаблоны для безостановочных обновлений
Базы данных или состояние-сохраняющие приложения Шаблоны рабочих нагрузок с отслеживанием состояния: безопасные шаблоны обновления для сохраняемости данных
Несколько сред Центр сценариев обновления: дерево принятия решений для сложных настроек
Базовый кластер Обновление кластера AKS: пошаговое обновление кластера

Все еще думаете?

Используйте центр сценариев обновления для структурированного дерева принятия решений, которое учитывает ваши:

  • Допустимое время простоя
  • Сложность среды
  • Профиль риска
  • Ограничения временной шкалы

Дальнейшие задачи

  • Ознакомьтесь с руководством по исправлению и обновлению AKS, чтобы получить лучшие практики и советы по планированию перед началом обновления.
  • Всегда проверяйте критические изменения API и проверяйте совместимость рабочей нагрузки с целевой версией Kubernetes.
  • Проверьте параметры обновления (например maxSurge, maxUnavailableи PDB) в промежуточной среде, чтобы свести к минимуму рабочий риск.
  • Отслеживайте события обновления и работоспособности кластера на протяжении всего процесса.