Бывает, что не удаляется Namespace в Kubernetes кластере. Как правило, это происходит из-за невыполнения каких-то finalizers. Придётся их нам удалить принудительно.
1. Сохраним конфиг неймспейса в json формате
kubectl get namespace <terminating-namespace> -o json > /tmp/tempfile.json
2. Откроем и отредактируем полученный файл. Надо удалить секцию finalizers из массива.
3. Теперь обратно применим наш отредактированный файл в кубер.
kubectl replace --raw "/api/v1/namespaces/<terminating-namespace>/finalize" -f /tmp/tempfile.json
4. Теперь можно проверить, что неймстпейса больше нет.
kubectl get namespaces
Повторить для всех «залипших» неймспейсов.
Небольшой BASH скрипт для автоматизации удаления залипших неймспейсов
#!/bin/bash
kubectl get namespaces
for ns in $(kubectl get namespaces | grep Terminating | awk '{print $1}'); do
echo "Clean finaliers for $ns"
kubectl get namespace $ns -o json | jq '.spec.finalizers=[]' > /tmp/tempfile.json
kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f /tmp/tempfile.json
done
kubectl get namespaces
В моём случае, были проблемы из-за криво переустановленного prometheus-adapter из одного неймспейса в другой. Часть apiservice не удалилась и конфликтовала.
kubectl get apiservices
После удаления кривого аписервиса — всё стало ок
kubectl delete apiservices v1beta1.custom.metrics.k8s.io