☸️ Как удалить неймспейс, застрявший в состоянии Terminated в Kubernetes

Как удалить пространство имен, застрявшее в состоянии завершения, в Kubernetes

by itisgood

1. Введение

Пространство имен Kubernetes может застрять в состоянии завершения по разным причинам.
Некоторые из этих причин включают зависание ресурсов, финализаторов и внешних зависимостей.
Хотя мы можем принудительно удалить пространство имен, лучше сначала исключить различные возможные причины.
В этом руководстве мы рассмотрим, как удалить пространство имен Kubernetes, застрявшее в состоянии
завершения.

2. Отладка застрявшего пространства имен

Прежде чем пытаться принудительно удалить пространство имен, мы проверим его состояние с помощью kubectl get:
$ kubectl get ns <namespace>

Для получения подробного вывода мы добавим флаг -o вместе с форматом вывода:

$ kubectl get ns <namespace> -o yaml

Мы обратим внимание на поле conditions в выводе, поскольку оно может подсказать нам причину проблемы.

Но если это не поможет, мы перечислим все ресурсы в пространстве имен:

$ kubectl api-resources --verbs=list --namespaced=true -o name \
| xargs -n 1 kubectl get --ignore-not-found --show-kind -n <namespace>

Если мы обнаружим зависший ресурс в пространстве имен, то первой попыткой решить проблему будет попытка удалить этот ресурс.

Однако если в пространстве имен нет ресурса, мы можем проверить наличие событий в пространстве имен с помощью kubectl events:

$ kubectl events -n <namespace>

Мы можем ограничить вывод определенными типами событий с помощью параметра -type:

$ kubectl events -n <namespace> --type=Warning

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

Но если и это не поможет, можно проверить журналы контроллера-менеджера, чтобы убедиться, что мы не пропустили никакой информации:

$ kubectl get pods -o name -n kube-system  | grep controller-manager | xargs -n 1 kubectl logs -n kube-system 

В приведенной выше команде мы получили список подов пространстве имен kube-system.

Затем, используя grep, мы ограничили вывод, чтобы вернуть только имя стручка менеджера контроллера.

После этого мы передали имя подов менеджера контроллера в качестве аргумента в журналы kubectl с помощью xargs.

Если журналы менеджера контроллеров не дают нам никаких указаний на то, в чем может быть проблема, мы можем приступить к принудительному удалению.

Но перед этим мы можем проверить наличие внешних зависимостей.

3. Принудительное удаление пространства имен Kubernetes, застрявшего в состоянии завершения

Чтобы принудительно удалить зависшее пространство имен, мы можем отредактировать ресурс этого пространства имен с помощью kubectl edit:

$ kubectl edit ns <namespace>

В последующем редакторе мы очистим массив finalizers.

Для этого мы можем удалить все элементы массива.

В качестве альтернативы мы можем просто присвоить финализаторам значение null.

После этого мы запишем изменения и закроем файл.

При удалении финализаторов из ресурса пространства имен удаление пространства имен будет успешно продолжено.

Затем мы можем попробовать подтвердить удаление, получив пространство имен:

$ kubectl get ns <namespace>

Мы должны получить сообщение об ошибке “namespaces <namespace> not found”, подтверждающее, что мы успешно удалили пространство имен.

$ kubectl patch ns <namespace> -p '{"metadata":{"finalizers": null }}'

4. Заключение

В этой статье мы рассмотрели несколько шагов, чтобы проверить, почему пространство имен Kubernetes застревает при завершении работы.

Затем мы обсудили, как принудительно удалять такие пространства имен.\

см. также:

 

You may also like

Leave a Comment