k8s 删除名称空间后始终处于Terminating的解决办法

发布于 2022-06-11  228 次阅读


问题

最近发现测试集群中的一些名称空间,处于僵尸状态Terminating,无法删除,即使采用--force 也无济于事,找到了以下方法解决这个问题。

问题图示

k8s-删除名称空间.png

问题解决

#先导出json文件
kubectl get namespace 名称空间的名字 -o json > tmp.json
#删除finalizers列表
sed -i '/"finalizers"\: \[/,+2d' tmp.json
#在另一个master终端执行kubectl proxy

#在当前终端执行接口推送数据
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/名称空间的名字/finalize &>/dev/null

使用脚本方式

cat >> delete_ns.sh <<\EOF
kubectl get namespace $1 -o json > tmp.json
# 修改导出文件,删除其中的finalizers这一项,其他保持不变
sed -i '/"finalizers"\: \[/,+2d' tmp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/$1/finalize &>/dev/null
if [ $? -eq 0 ];then
    echo "删除成功"
else
    echo "删除失败"
fi
EOF

# 执行
sh delete_ns.sh 名称空间的名字