Пространство имен "застряло" как Завершение, Как я могу удалить его? - PullRequest
0 голосов
/ 17 сентября 2018

У меня было «застрявшее» пространство имен, которое я удалил, показывая в этом вечном «завершающем» состоянии.

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Для нас это был metrics-server сбой.

Итак, чтобы проверить, относится ли это к вашему случаю, выполните следующую команду: kubectl api-resources

Если вы получите

error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request

Тогда, вероятно, та же проблема

Кредиты поступают на @javierprovecho здесь

0 голосов
/ 18 сентября 2018

Это вызвано тем, что в пространстве имен все еще существуют ресурсы, которые контроллер пространства имен не может удалить.

Эта команда (с kubectl 1.11+) покажет вам, какие ресурсы остаются в пространстве имен:

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

Как только вы найдете и решите и удалите их, пространство имен будет очищено

0 голосов
/ 07 декабря 2018

Если вы уже пытались принудительно удалить такие ресурсы, как: Бобы застряли на завершающем статусе , и вы в конце концов пытаетесь восстановить пространство имен ...

Вы можете принудительно удалить пространство имен (возможно, оставив висячие ресурсы):

(
NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
)
  • Это уточнение ответа здесь , основанное на комментарии здесь .

  • Я использую утилиту jq для программного удаления элементов в разделе финализаторов. Вместо этого вы можете сделать это вручную.

  • kubectl proxy создает слушателя на 127.0.0.1:8001 по умолчанию . Если вы знаете имя хоста / IP-адрес вашего кластера, вы можете использовать его вместо этого.

  • Самое смешное, что этот подход работает даже при использовании kubectl edit, внесение того же изменения не имеет никакого эффекта.

0 голосов
/ 17 сентября 2018

Единственный способ удалить пространство имен "terminating" - удалить запись в разделе "финализаторы".Я попытался --force удалить его и --grace-period=0, но ни один из них не сработал, однако этот метод сделал:

в командной строке отображает информацию из пространства имен:

$ kubectl get namespace your-rogue-namespace -o yaml

Это даст вам вывод yaml, найдите строку, которая выглядит примерно так:

deletionTimestamp: 2018-09-17T13:00:10Z
  finalizers:
  - Whatever content it might be here...
  labels:

Затем просто отредактируйте конфигурацию пространства имен и удалите элементы внутри контейнера финализаторов.

$ kubectl edit namespace your-rogue-namespace

Это откроет редактор (в моем случае VI), перешел строку, которую я хотел удалить, и удалил ее, я дважды нажал клавишу D, чтобы удалить всю строку.

Сохраните ее, выйдите из редактора.и как магия.Пространство имен-изгоев должно быть удалено.

И чтобы подтвердить это просто:

$ kubectl get namespace your-rogue-namespace -o yaml

Имейте в виду, что после этого могут остаться потерянные ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...