惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
G
Google Developers Blog
D
Docker
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
I
InfoQ
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News

二丫讲梵

学习周刊-总第258期-2026年第15周 学习周刊-总第257期-2026年第14周 学习周刊-总第256期-2026年第13周 学习周刊-总第255期-2026年第12周 学习周刊-总第254期-2026年第11周 学习周刊-总第253期-2026年第10周 临时插播一条羊毛,免费领取450元大模型API代金券 学习周刊-总第252期-2026年第09周 学习周刊-总第251期-2026年第08周 学习周刊-总第250期-2026年第07周 学习周刊-总第249期-2026年第06周 诚邀评论,聊聊你所知欲知的我 学习周刊-总第248期-2026年第05周 我的QQ动态之2015年 我的QQ动态之2014年 我的QQ动态之2013年 我的QQ动态之2012年 我的QQ动态-2010-2011年 我的QQ动态-创栏小叙 学习周刊-总第247期-2026年第04周 Nexus社区版权益阉割--一文告诉你有哪些版本可以选择 学习周刊-总第246期-2026年第03周 学习周刊-总第245期-2026年第02周 学习周刊-总第244期-2026年第01周 学习周刊-总第243期-2025年第52周 学习周刊-总第242期-2025年第51周 开源项目ZenOps:带你领略禅意运维 学习周刊-总第241期-2025年第50周 用京东金融,享负债人生 学习周刊-总第240期-2025年第49周
k8s删除namespace之后状态一直为Terminating
二丫讲梵 · 2023-07-16 · via 二丫讲梵

使用 k8s 时,执行如下命令删除一个 namespace:

$ kubectl delete ns local

1

随后查看该 ns 的状态,可以看到该 ns 始终保持在 Terminating 状态:

$ kubectl get ns local

NAME    STATUS        AGE
local   Terminating   3d1h

1
2
3
4

如果出现这种问题,一般情况下都是finalizers字段捣的鬼。

参看这篇文章:熟悉又陌生的 k8s 字段:finalizers (opens new window) 可以了解到:

Finalizers 字段属于 Kubernetes GC 垃圾收集器,是一种删除拦截机制,能够让控制器实现异步的删除前(Pre-delete)回调。其存在于任何一个资源对象的  Meta (opens new window)  中,在 k8s 源码中声明为  []string,该 Slice 的内容为需要执行的拦截器名称。

通常删除不掉可能是因为集群内有某些 webhook,从而导致这个问题,如果此时该 webhook 并不能确定是否可以删除,那么网上提到的,直接编辑 ns,删除 finalizers 的值是无法解决的,仍旧会遇到如下报错:

$ kubectl edit ns local

error: namespaces "local" could not be patched: Internal error occurred: failed calling webhook "rancherauth.cattle.io": Post "https://rancher-webhook.cattle-system.svc:443/v1/webhook/validation?timeout=10s": no endpoints available for service "rancher-webhook"
You can run `kubectl replace -f /tmp/kubectl-edit-550962354.yaml` to try this update again.

1
2
3
4

这个时候,可以参考此文档的方案解决:移除該死的 Terminating Namespace (opens new window)

上边文档最后留了一个脚本,用于删除这种状态的 namespace 的 finalizers 字段,因为脚本还缺了一些内容,因此调整之后补充如下:

#!/bin/bash
if [[ $# -ne 1 ]]; then
echo "Please input only namespace name"
exit 1
fi
ns=$1
kubectl get ns ${ns} -o json > tmp.json
cat ./tmp.json | jq 'del(.spec.finalizers[])' > ./modify.json
cat ./tmp.json | jq 'del(.metadata.finalizers[])' > ./modify.json
kubectl replace --raw "/api/v1/namespaces/${ns}/finalize" -f ./modify.json
rm -f tmp.json modify.json

1
2
3
4
5
6
7
8
9
10
11

然后执行脚本,将名称空间放在第一个位置参数即可:bash remove-ns.sh local

1689427249424