Устранение ошибок UpgradeFailed из-за сбоев вытеснения, вызванных PDF-файлами
В этой статье описывается, как определить и устранить ошибки UpgradeFailed из-за сбоев вытеснения, вызванных бюджетами нарушений pod (PDB), которые возникают при попытке обновить кластер Служба Azure Kubernetes (AKS).
Предварительные требования
Для этой статьи требуется Azure CLI версии 2.0.65 или более поздней версии. Чтобы найти номер версии, выполните команду az --version
. Если вам нужно установить или обновить Azure CLI, см. инструкции по установке Azure CLI.
Дополнительные сведения о процессе обновления см. в разделе "Обновление кластера AKS" в разделе об обновлении кластера Служба Azure Kubernetes (AKS).
Симптомы
Операция обновления кластера AKS завершается сбоем со следующим сообщением об ошибке:
Код: UpgradeFailed
Сообщение: сбой узла очистки имени узла <> при вытеснение <pod-name>. Сбой вытеснения из-за ошибки слишком большого количества запросов. Это часто вызвано политикой ограниченного бюджета прерывания pod (PDB). См. разделhttp://aka.ms/aks/debugdrainfailures
. Исходная ошибка: сбой вызова API к серверу API Kubernetes.
Причина
Эта ошибка может возникать, если модуль pod защищен политикой "Бюджет сбоя pod" (PDB). В этой ситуации модуль pod сопротивляется очистке.
Чтобы проверить эту ситуацию, запустите kubectl get pdb -A
и проверьте значение "Разрешенное нарушение ". Значение должно иметь значение 1 или больше. Дополнительные сведения см. в разделе "Планирование доступности с помощью бюджетов нарушений pod".
Если значение "Разрешенное нарушение" равно 0, то при обновлении сбой будет выполнен сбой сбоем.
Чтобы устранить эту проблему, используйте одно из следующих решений.
Решение 1. Включение очистки модулей pod
- Настройте PDB, чтобы включить очистку модулей pod. Как правило, разрешенное нарушение контролируется параметром или
Running pods / Replicas
параметромMin Available / Max unavailable
. Параметр можно изменитьMin Available / Max unavailable
на уровне PDB или увеличить число для отправки допустимогоRunning pods / Replicas
значения прерывания до 1 или больше. - Повторите попытку обновления кластера AKS до той же версии, до которую вы пытались обновить ранее. Этот процесс активирует выверку.
Решение 2. Резервное копирование, удаление и повторное развертывание PDB
- Создайте резервную копию PDB
kubectl get pdb <pdb-name> -n <pdb-namespace> -o yaml > pdb_backup.yaml
, а затем удалите PDBkubectl delete pdb <pdb-name> -n /<pdb-namespace>
. После завершения обновления можно повторно развернуть PDBkubectl apply -f pdb_backup.yaml
. - Повторите попытку обновления кластера AKS до той же версии, до которую вы пытались обновить ранее. Этот процесс активирует выверку.
Решение 3. Удаление модулей pod, которые не могут быть удалены
Удалите модули pod, которые нельзя удалить.
Примечание.
Если модули pod были созданы с помощью развертывания или StatefulSet, они будут управляться репликой. Если это так, может потребоваться удалить развертывание или StatefulSet. Перед этим рекомендуется создать резервную копию:
kubectl get <kubernetes-object> <name> -n <namespace> -o yaml > backup.yaml
Повторите попытку обновления кластера AKS до той же версии, до которую вы пытались обновить ранее. Этот процесс активирует выверку.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.