Устранение неполадок DCSMachine, застрявшего в Deleting
Используйте это руководство, если DCSMachine в рабочем кластере Huawei DCS остается в Phase: Deleting дольше ожидаемых ~60 секунд, блокируя смену ноды во время scale-down, rolling upgrade или полного удаления кластера.
Содержание
Область примененияСимптомыЧтение условия VMStopPendingПотоки диагностикиVM застряла вstoppingVM застряла в состоянии переходаКонтроллер не может достичь DCS APIБлокировка учетной записи DCSПолитика FC site "仅能删除已停止虚拟机" (errorCode 102212808)Используйте cpaas.io/retain-vm как аварийный обходной путьПроверка восстановленияСм. такжеОбласть применения
Это руководство охватывает сбои на стороне DCS, из-за которых cluster-api-provider-dcs не может завершить поток reconcileDelete для ноды. Обычная последовательность удаления у провайдера выглядит так:
Каждый шаг зависит от ответа платформы DCS. Когда DCS не отвечает или отклоняет шаг, контроллер показывает причину ожидания в DCSMachine.Status.Conditions.VMStopPending. Сначала прочтите именно это условие — оно обычно позволяет определить проблему без доступа к логам контроллера.
Это руководство не охватывает обычные блокировки перед удалением (тайм-ауты drain для CAPI Machine, finalizers, удерживаемые другими контроллерами) — они относятся к стандартной документации Cluster API по устранению неполадок.
Симптомы
Если VMStopPending отсутствует, а Machine.status.phase все еще Deleting, проблема, скорее всего, находится выше reconcileDelete (например, CAPI drain, kubeadm pre-delete hooks). В этом случае обратитесь к документации по устранению неполадок CAPI.
Чтение условия VMStopPending
Условие VMStopPending — это основной сигнал для этого руководства.
Ищите:
Поле Reason является диагностическим:
Потоки диагностики
VM застряла в stopping
Контроллер отправил корректный StopVm (вызов DCS API /action/stop?mode=safe), VM подтвердила получение команды, но состояние так и не стабилизировалось.
Распространенные причины:
pvDriverStatusу VM неrunning— гостевые инструменты (vmtools / pvdriver), необходимые для корректного завершения работы, не отвечают. Проверьте в портале DCS: откройте страницу подробностей VM и посмотрите полеpvDriverStatus. Если там указано что-либо, кромеrunning, VM не может принять безопасную остановку.- Шаблон VM старше
4.2.1— старые шаблоны VM DCS не содержат гостевых инструментов, необходимых для safe stop. Убедитесь, чтоvmTemplateNameв DCSMachine соответствует шаблону4.2.1+(меткаcpaas.io/dcs-vm-templateв ConfigMapcpaas-system/<release>-dcs-vm-template, см. Resolving Placeholder Values). - Зависла гостевая ОС — ядро VM зависло и не обрабатывает завершение ACPI.
Путь устранения:
- Для (1) и (3): вручную выполните остановку с
forceв портале DCS (VM detail → Operations → Stop → Force). Как только VM перейдет вstopped, следующий reconcile у контроллера подхватит новое состояние и продолжитDeleteVm. - Для (2): этот провайдер не может безопасно удалить VM на таком шаблоне; снимите нагрузку с ноды, вручную выключите VM, затем используйте
cpaas.io/retain-vmдля пропуска удаления на стороне контроллера.
VM застряла в состоянии перехода
В Message отображается статус, например migrating, starting, paused или hibernated. Контроллер не будет выполнять никаких операций над VM в этих состояниях (DCS отклонит их) и будет бесконечно ожидать перехода VM в running или stopped.
Контроллер не может достичь DCS API
Если условие VMStopPending отсутствует, но Machine.status.phase остается Deleting в течение длительного времени, возможно, контроллер вообще не может связаться с DCS. Проверьте лог контроллера:
Ищите одно из следующего:
Блокировка учетной записи DCS
errorCode: 10100116 означает, что учетная запись портала DCS, указанная в Secret с учетными данными кластера, находится в окне блокировки из-за brute-force. Политика блокировки портала DCS сбрасывается после каждой неудачной попытки входа, поэтому контроллер, застрявший в цикле повторов, неограниченно продлевает блокировку.
Чтобы разорвать этот цикл:
Не используйте учетную запись DCS portal admin повторно в Secret провайдера в production. Настройте отдельную учетную запись DCS (interconnect или domain user, см. Credential User Types) с ослабленной политикой блокировки, чтобы временный сбой контроллера не мог заблокировать доступ к платформе для всех.
Политика FC site "仅能删除已停止虚拟机" (errorCode 102212808)
Если рабочий кластер работает на сайте DCS, где на базовой платформе FusionCompute включена политика безопасности "delete-only-when-stopped", DeleteVm будет отклонен, когда VM все еще running. Начиная с cluster-api-provider-dcs v1.0.18, обычный поток удаления провайдера обрабатывает это автоматически, отправляя безопасный StopVm перед DeleteVm, но в редких гонках внешний участник — человек-оператор в портале DCS или другая автоматизация — может перезапустить VM между проверкой остановки контроллером и вызовом DeleteVm. Контроллер отображает эту гонку как:
Это не ошибка — контроллер считает errorCode 102212808 восстанавливаемым состоянием и повторно ставит задачу в очередь. При следующем reconcile он снова проверяет статус VM; если она снова running, контроллер повторно отправляет StopVm(safe) и продолжает работу. Нормальное время восстановления — ~30 секунд.
Если вы видите этот errorCode повторно (более 3 циклов), внешний участник конфликтует с контроллером. Приостановите внешнюю автоматизацию или примените cpaas.io/retain-vm, чтобы полностью взять управление жизненным циклом VM вне контроллера.
Используйте cpaas.io/retain-vm как аварийный обходной путь
Когда контроллер по какой-либо причине не может завершить reconcileDelete, и вам нужно освободить finalizer Machine, чтобы рабочий кластер мог продолжить работу (scale-down, upgrade, removal), добавьте аннотацию либо в Machine, либо в DCSMachine:
Эффект:
reconcileDeleteу контроллера распознает аннотацию, пропускает иensureVmStopped, иDeleteVm, а также освобождает finalizerDCSMachine.- После этого
Machineвыходит из состоянияDeleting, и Cluster API может завершить родительскую операцию.
Побочный эффект — важно:
- VM не удаляется из DCS — она остается на платформе DCS и продолжает потреблять вычислительные и дисковые ресурсы, вне управления жизненным циклом Cluster API.
- Слот IP / hostname в
DCSIpHostnamePoolтоже не освобождается — запись пула будет показываться как занятая, пока вы не освободите ее вручную.
После применения retain-vm запланируйте ручное выполнение следующих действий:
- Остановите и удалите VM в портале DCS (или через DCS API).
- Освободите запись IP / hostname в соответствующем
DCSIpHostnamePool. - (Необязательно) Очистите все присоединенные persistent disks.
Проверка восстановления
После применения любого из описанных выше способов устранения наблюдайте за DCSMachine, пока условие не исчезнет:
Если Machine полностью исчез и VM больше не отображается в портале DCS, восстановление завершено.
См. также
- Создание кластеров на Huawei DCS — полная справка по манифесту кластера
- Cloud Credentials for Huawei DCS — формат Secret и User Types
- Устранение неполадок рабочего кластера, застрявшего в Provisioned — смежное руководство по проблемам запуска кластера
- Устранение неполадок кластера, застрявшего в Deleting — верхнеуровневый CR
Clusterзастрял вDeletingпосле удаления всех дочерних machine