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

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

AKS теперь автоматически останавливает операции обновления, состоящие из дополнительного изменения версии с устаревшими 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".

    A screenshot of the Azure portal showing the 'Selected Kubernetes API deprecations' section.

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

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

Кроме того, вы можете проверка прошлого использования API, включив Аналитика контейнеров и изучая журналы аудита kube. Проверьте команду в нерекомендуемом использовании API, чтобы понять, является ли это вариант использования часов .

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

Примечание.

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

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

    az aks update --name myAKSCluster --resource-group myResourceGroup --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
    

    Примечание.

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

  • После успешного выполнения предыдущей команды можно повторить операцию обновления.

    az aks upgrade --name myAKSCluster --resource-group myResourceGroup --kubernetes-version <KUBERNETES_VERSION>
    

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

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