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


Автоматическое обновление кластера Служба Azure Kubernetes (AKS) при критических изменениях API

В этой статье показано, как остановить обновление кластера Служба Azure Kubernetes (AKS) автоматически при критических изменениях API.

Обзор

Чтобы оставаться в поддерживаемой версии Kubernetes, необходимо обновить кластер по крайней мере один раз в год и подготовиться ко всем возможным сбоям. Эти нарушения включают в себя те, которые вызваны критическими изменениями API, нерекомендуемыми и зависимостями, такими как Helm и интерфейс хранилища контейнеров (CSI). Это может быть трудно предвидеть эти перебои и перенести критически важные рабочие нагрузки без каких-либо простоев.

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

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

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

  • Операция обновления — это дополнительное изменение версии Kubernetes для плоскости управления кластером.
  • Обновляемая версия Kubernetes — 1.26 или более поздняя.
  • Последнее использование устаревших API-интерфейсов для целевой версии, на которую выполняется обновление, должно происходить в течение 12 часов до операции обновления. AKS записывает ежечасное использование, поэтому любое использование устаревших API в течение одного часа не гарантируется в обнаружении.

Устранение остановленных операций обновления

Если выполнены предварительные требования, попробуйте выполнить обновление и получите сообщение об ошибке, аналогичное следующему примеру сообщения об ошибке:

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

У вас есть два варианта устранения проблемы: вы можете удалить использование устаревших API (рекомендуется) или обойти проверку, чтобы игнорировать изменения API.

  1. В портал Azure перейдите к ресурсу кластера и выберите "Диагностика и решение проблем"

  2. Выберите "Создать", "Обновить", "Удалить" и "Масштабирование>" API Kubernetes нерекомендуем.

    Снимок экрана: портал Azure с разделом

  3. Подождите 12 часов с момента последнего нерекомендуемого использования API. Команды только для чтения исключены из устаревшего использования API, а именно Get/List/Watch.( Вы также можете проверить прошлое использование API, включив аналитику контейнеров и изучая журналы аудита kube.)

  4. Повторите обновление кластера.

Обход проверки для пропуска изменений API

Примечание.

Этот метод требует использования Azure CLI версии 2.57 или более поздней. Если у вас установлено расширение CLI предварительной версии, необходимо обновить версию или более позднюю версию 3.0.0b10 . Этот метод не рекомендуется, так как устаревшие API в целевой версии Kubernetes могут не работать в долгосрочной перспективе. Мы рекомендуем удалить их как можно скорее после завершения обновления.

  1. Обходить проверку, чтобы игнорировать критические изменения API и вызывать обновление. enable-force-upgrade Укажите флаг и задайте upgrade-override-until свойство, чтобы определить конец окна, во время которого выполняется обход проверки. Если значение не задано, по умолчанию окно по умолчанию равно трем дням с текущего времени. Указанная дата и время должны находиться в будущем.

    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
    

    Примечание.

    Z — это конструктор зоны для нулевого смещения UTC/GMT, также известного как "Zulu". В этом примере для конца окна задано 13:00:00 значение GMT. Дополнительные сведения см. в разделе "Объединенные представления даты и времени".

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

В этой статье показано, как остановить автоматическое обновление кластера AKS при критических изменениях API. Дополнительные сведения о параметрах обновления для кластеров AKS см. в разделе "Параметры обновления" для кластеров Служба Azure Kubernetes (AKS).