Как заставить принудительно удалить пространства имен, застрявшие в завершении?
Шаги для воссоздания:
- Применить этот YAML
apiVersion: v1
kind: Namespace
metadata:
name: delete-me
spec:
finalizers:
- foregroundDeletion
kubectl delete ns delete-me
Невозможно удалить delete-me
.
Единственный обходной путь, который я нашелэто уничтожить и воссоздать весь кластер.
То, что я пробовал:
Ничего из этого не работает и не изменяет пространство имен.После любого из них проблемный финализатор все еще существует.
Отредактируйте YAML и kubectl apply
Примените:
apiVersion: v1
kind: Namespace
metadata:
name: delete-me
spec:
finalizers:
$ kubectl apply -f tmp.yaml
namespace/delete-me configured
Команда завершается без ошибок,но пространство имен не обновлено.
Приведенный ниже YAML имеет тот же результат:
apiVersion: v1
kind: Namespace
metadata:
name: delete-me
spec:
kubectl edit
kubectl edit ns delete-me
и удалите финализатор.То же самое, удалив список полностью.То же самое удаление spec
.То же самое заменив finalizers
пустым списком.
$ kubectl edit ns delete-me
namespace/delete-me edited
Это сообщение об ошибке не отображается, но пространство имен не обновляется.kubectl edit
При повторном отображении объекта финализатор все еще там.
kubectl proxy &
kubectl proxy &
curl -k -H "Content-Type: application/yaml" -X PUT --data-binary @tmp.yaml http://127.0.0.1:8001/api/v1/namespaces/delete-me/finalize
Как и выше, это успешно завершается, но ничего не делает.
Принудительное удаление
kubectl delete ns delete-me --force --grace-period=0
Это фактически приводит к ошибке:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (Conflict): Operation cannot be fulfilled on namespaces "delete-me": The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system.
Однако на самом деле он ничего не делает.
Долгое время ждите
В тестовом кластере, который я настроил для устранения этой проблемы, я ждал более недели.Даже если пространство имен в конечном итоге может быть решено удалить, мне нужно удалить его быстрее, чем за неделю.
Убедитесь, что пространство имен пусто
Пространство имен пусто.
$ kubectl get -n delete-me all
No resources found.
etcdctl
$ etcdctl --endpoint=http://127.0.0.1:8001 rm /namespaces/delete-me
Error: 0: () [0]
Я почти уверен, что это ошибка, но я не знаю, как это интерпретировать.Это также не работает.Также пробовал с --dir
и -r
.
ctron/kill-kube-ns
Существует сценарий для принудительного удаления пространств имен .Это также не работает.
$ ./kill-kube-ns delete-me
Killed namespace: delete-me
$ kubectl get ns delete-me
NAME STATUS AGE
delete-me Terminating 1h
POST
при редактировании отредактированного ресурса в / finalize
Возвращает 405 .Я не уверен, что это канонический способ POST / финализации.
Ссылки
Этот появляется в be a повторяющиеся проблемы и нет из эти ресурсы помогли .
ошибка Kubernetes