Разное

Не удаляется Namespace в Kubernetes

31.03.2022

Бывает, что не удаляется 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *