Практическое руководство по обновлению кластера Службы Azure Kubernetes (AKS)
В рамках жизненного цикла кластера AKS выполняется периодическое обновление до последней версии Kubernetes. Важно применить последние выпуски и обновления системы безопасности, чтобы получить последние возможности. В этой статье показано, как проверить и применить обновления к кластеру AKS.
Обновления версий Kubernetes
При обновлении поддерживаемого кластера AKS нельзя пропустить дополнительные версии Kubernetes. Необходимо выполнить все обновления последовательно по основному номеру версии. Например, разрешены обновления между 1.14.x ->1.15.x или 1.15.x ->1.16.x. 1.14.x ->1.16.x не разрешено. При обновлении с неподдерживаемой версии можно пропустить только несколько версий. Например, можно выполнить обновление с неподдерживаемой версии 1.10.x до поддерживаемой версии 1.12.x при наличии.
При выполнении обновления с неподдерживаемой версии , которая пропускает две или более дополнительных версий, обновление не гарантирует функциональные возможности и исключается из соглашений об уровне обслуживания и ограниченной гарантии. Если версия устарела, рекомендуется повторно создать кластер.
Подготовка к работе
- Если вы используете Azure CLI, для этой статьи требуется Azure CLI версии 2.34.1 или более поздней. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - Если вы используете Azure PowerShell, для этой статьи требуется Azure PowerShell версии 5.9.0 или более поздней. Чтобы узнать версию, выполните команду
Get-InstalledModule -Name Az
. Если вам необходимо выполнить установку или обновление, см. статью об установке Azure PowerShell. - Для выполнения операций обновления требуется
Microsoft.ContainerService/managedClusters/agentPools/write
роль RBAC. Дополнительные сведения о ролях Azure RBAC см. в операциях поставщика ресурсов Azure. - Начиная с версии 1.30 kubernetes и версии 1.27 LTS бета-интерфейсы API будут отключены по умолчанию при обновлении до них.
Предупреждение
Обновление кластера AKS активирует блокировку и остановку узлов. Если у вас есть низкая квота вычислений, обновление может завершиться ошибкой. Дополнительные сведения см. в разделе Запросы на увеличение квоты.
Проверка доступных обновлений кластера AKS
Примечание.
Чтобы получить актуальную информацию об исправлениях, выпусках и обновления AKS, см. раздел Средство отслеживания выпуска AKS.
Проверьте, какие выпуски Kubernetes доступны для кластера с помощью
az aks get-upgrades
команды.az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table
В следующем примере выходных данных показана текущая версия как 1.26.6 и перечислены доступные версии в разделе
upgrades
:{ "agentPoolProfiles": null, "controlPlaneProfile": { "kubernetesVersion": "1.26.6", ... "upgrades": [ { "isPreview": null, "kubernetesVersion": "1.27.1" }, { "isPreview": null, "kubernetesVersion": "1.27.3" } ] }, ... }
Устранение неполадок при обновлении кластера AKS
В следующем примере выходных данных appservice-kube
расширение несовместимо с версией Azure CLI (требуется не менее версии 2.34.1):
The 'appservice-kube' extension is not compatible with this version of the CLI.
You have CLI core version 2.0.81 and this extension requires a min of 2.34.1.
Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.
Если вы получите эти выходные данные, необходимо обновить версию Azure CLI. Команда az upgrade
добавлена в версии 2.11.0 и не работает с предыдущими версиями. Вы можете обновить старые версии, переустановив Azure CLI, как описано в разделе "Установка Azure CLI". Если azure CLI версии 2.11.0 или более поздней, выполните az upgrade
обновление Azure CLI до последней версии.
Если Azure CLI обновлен и вы получите следующий пример выходных данных, это означает, что обновления недоступны:
ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.
Если обновления недоступны, создайте кластер с поддерживаемой версией Kubernetes и перенесите рабочие нагрузки из существующего кластера в новый. AKS не поддерживает обновление кластера до новой версии Kubernetes, если az aks get-upgrades
показывает, что обновления недоступны.
Обновление кластера AKS
Во время процесса обновления кластера AKS выполняет следующие операции:
- Добавит новый узел буфера (или столько узлов, сколько указано в параметре max_surge) в кластер, на котором запущена указанная версия Kubernetes.
- Блокирует и останавливает один из старых узлов, чтобы свести к минимуму время простоя работающих приложений. Если вы используете максимальный всплеск, он кордонирует и очищает столько узлов одновременно, сколько указанных буферных узлов.
- Для длительных модулей pod можно настроить время ожидания очистки узлов, которое позволяет настроить пользовательское время ожидания при вытеснение модулей pod и корректное завершение на каждом узле. Если значение не указано, значение по умолчанию — 30 минут. Минимально допустимое время ожидания — 5 минут. Максимальное ограничение времени ожидания очистки составляет 24 часа.
- Когда старый узел полностью осушен, он переимыслится для получения новой версии и становится буферным узлом для обновления следующего узла.
- При необходимости можно задать длительность ожидания между очисткой узла и продолжением его повторного создания и перехода к следующему узлу. Короткий интервал позволяет выполнять другие задачи, такие как проверка работоспособности приложений с панели мониторинга Grafana во время процесса обновления. Мы рекомендуем короткий интервал времени для процесса обновления, как можно ближе к 0 минутам. В противном случае более высокое время замачивания узла влияет на то, как долго перед обнаружением проблемы. Минимальное значение времени ожидания — 0 минут, не более 30 минут. Если значение не указано, значение по умолчанию — 0 минут.
- Этот процесс повторяется до обновления всех узлов в кластере.
- В конце процесса удаляется последний буферный узел, поддерживая существующее число узлов агента и баланс зоны.
Примечание.
Если исправление не указано, кластер автоматически обновляется до последней общедоступной версии исправления указанной дополнительной версии. Например, параметр --kubernetes-version
для 1.28
получения результатов обновления 1.28.9
кластера до .
Дополнительные сведения см. в статье Поддерживаемые версии Kubernetes в Службе Azure Kubernetes (AKS).
Обновите кластер с помощью
az aks upgrade
команды.az aks upgrade \ --resource-group myResourceGroup \ --name myAKSCluster \ --kubernetes-version <KUBERNETES_VERSION>
Убедитесь, что обновление выполнено успешно с помощью
az aks show
команды.az aks show --resource-group myResourceGroup --name myAKSCluster --output table
В следующем примере выходных данных показано, что кластер теперь работает 1.27.3:
Name Location ResourceGroup KubernetesVersion ProvisioningState Fqdn ------------ ---------- --------------- ------------------- ------------------- ---------------------------------------------- myAKSCluster eastus myResourceGroup 1.27.3 Succeeded myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io
Настройка канала автоматического обновления
Канал автоматического обновления можно задать в кластере. Дополнительные сведения см. в статье Автоматическое обновление кластера службы AKS.
Настройка обновления со всплеском активности узлов
Внимание
При всплеске активности узлов для каждой операции обновления требуется квота подписки, соответствующая запрошенному максимальному числу всплесков. Например, кластер с пятью пулами узлов, каждый из которых имеет количество четырех узлов, имеет в общей сложности 20 узлов. Если для каждого пула узлов задано максимальное значение всплеска активности в 50 %, то для завершения обновления потребуется дополнительная квота вычислений и IP-адресов, равная 10 узлам (2 узла * 5 пулов).
Параметр максимального всплеска активности для пула узлов является постоянным. Этот параметр будет использоваться для последующих обновлений Kubernetes или обновлений версии узлов. Максимальное значение всплеска для пулов узлов можно изменить в любое время. Для рабочих пулов узлов рекомендуется использовать значение max_surge, равное 33 %.
Если вы используете Azure CNI, проверьте наличие доступных IP-адресов в подсети для удовлетворения требований к IP-адресам Azure CNI.
AKS настраивает обновления для всплеска с одним дополнительным узлом по умолчанию. Значение по умолчанию для параметра максимального всплеска позволяет AKS свести к минимуму прерывание рабочей нагрузки путем создания дополнительного узла до кордона или очистки существующих приложений для замены старого узла версии. Можно настроить максимальное значение всплеска для каждого пула узлов. При увеличении максимального значения всплеска процесс обновления завершается быстрее, и во время процесса обновления могут возникнуть сбои.
Например, максимальное значение всплеска 100 % обеспечивает самый быстрый процесс обновления, но также приводит к тому, что все узлы в пуле узлов будут стекаться одновременно. Может потребоваться использовать более высокое значение, например для сред тестирования. Для пулов рабочих узлов рекомендуется max_surge
задать значение 33%.
AKS принимает целочисленные значения и процентное значение для параметра максимального всплеска активности. Целое число, например 5 , указывает на всплеск пяти дополнительных узлов. Значение 50 % указывает на увеличение числа текущих узлов в пуле. Максимальное значение процента всплеска может быть не менее 1% и максимум 100%. Процентное значение округляется до ближайшего числа узлов. Если максимальное значение всплеска превышает требуемое количество узлов, которое необходимо обновить, количество узлов, которые необходимо обновить, используется для максимального значения всплеска. Во время обновления максимальное значение всплеска может быть не менее 1 , а максимальное значение равно количеству узлов в пуле узлов. Можно задать более крупные значения, но вы не можете задать максимальное количество узлов, используемых для максимального увеличения, чем число узлов в пуле во время обновления.
Установка максимального значения всплеска
Задайте максимальные значения всплеска для новых или существующих пулов узлов с помощью
az aks nodepool add
команды илиaz aks nodepool update
команды.# Set max surge for a new node pool az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% # Update max surge for an existing node pool az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 5
Установка значения времени ожидания очистки узлов
Иногда у вас может быть длинная рабочая нагрузка на определенном модуле pod, и она не может быть перепланирована на другой узел во время выполнения, например, рабочая нагрузка с интенсивным отслеживанием состояния памяти, которая должна завершиться. В этих случаях можно настроить время ожидания очистки узлов, которое AKS будет учитывать в рабочем процессе обновления. Если значение времени ожидания очистки узлов не указано, значение по умолчанию — 30 минут. Минимально допустимое время ожидания слива составляет 5 минут, а максимальное ограничение времени ожидания слива составляет 24 часа.
Если время ожидания очистки истекает, и модули pod по-прежнему выполняются, операция обновления останавливается. Любая последующая операция PUT возобновляет остановленное обновление. Для длительных модулей pod также рекомендуется настроить [terminationGracePeriodSeconds
][https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/].
Задайте время ожидания очистки узлов для новых или существующих пулов узлов с помощью
az aks nodepool add
команды илиaz aks nodepool update
команды.# Set drain timeout for a new node pool az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 100 # Update drain timeout for an existing node pool az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 45
Установка значения времени ожидания узла
Чтобы разрешить время ожидания между очисткой узла и продолжением его повторного создания и перехода к следующему узлу, можно задать время ожидания в диапазоне от 0 до 30 минут. Если значение времени ожидания узла не указано, значение по умолчанию — 0 минут.
Задайте время замачивания узла для новых или существующих пулов узлов с помощью
az aks nodepool add
команды илиaz aks nodepool upgrade
командыaz aks nodepool update
.# Set node soak time for a new node pool az aks nodepool add --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10 # Update node soak time for an existing node pool az aks nodepool update --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 5 # Set node soak time when upgrading an existing node pool az aks nodepool upgrade --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 20
Просмотр событий обновления
Просмотр событий обновления с помощью
kubectl get events
команды.kubectl get events
В следующем примере выходных данных показаны некоторые из перечисленных выше событий во время обновления:
... default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001] ... default 1m45s Normal Upgrade node/aks-nodepool1-96663640-vmss000001 Soak duration 5m0s after draining node: aks-nodepool1-96663640-vmss000001 ... default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool nodepool1 ...
Следующие шаги
Сведения о настройке автоматического обновления см. в статье "Настройка автоматических обновлений" для кластера AKS.
Подробное обсуждение рекомендаций по обновлению и других рекомендаций см . в руководстве по исправлению и обновлению AKS.
Azure Kubernetes Service