强制删除Kubernetes Namespace
在测试环境使用 Kubernetes
删除 Namespace
提示 Terminating
但是一直失败无法无法进行下去.
操作
注意,使用此方法强制删除 Finalizers 是一种破坏性操作,在执行此操作前确保已备份所需的数据和资源。
- 以下操作都在控制台操作
kubctl
已经被我alias
成k
- 以下
namespace
采用ep0001
1. 获取信息
获取 Namespace
信息
k get namespace ep0001 -o json > ep0001.json
可以在目录下看到一个 ep0001.json
文件
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"creationTimestamp": "2023-08-17T05:56:03Z",
"deletionTimestamp": "2024-10-23T07:08:15Z",
"labels": {
"kubernetes.io/metadata.name": "ep0001",
"kubesphere.io/namespace": "ep0001"
},
"name": "ep0001",
"resourceVersion": "464998721",
"uid": "63a59f1e-1d2a-43c8-85bf-594ea9953230"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"conditions": [
{
"lastTransitionTime": "2024-10-23T07:08:25Z",
"message": "All resources successfully discovered",
"reason": "ResourcesDiscovered",
"status": "False",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2024-10-23T07:08:25Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2024-10-23T07:08:25Z",
"message": "Failed to delete all resource types, 1 remaining: admission webhook \"storageclass-accessor.storage.kubesphere.io\" denied the request: resource name may not be empty",
"reason": "ContentDeletionFailed",
"status": "True",
"type": "NamespaceDeletionContentFailure"
},
{
"lastTransitionTime": "2024-10-23T07:08:29Z",
"message": "All content successfully removed",
"reason": "ContentRemoved",
"status": "False",
"type": "NamespaceContentRemaining"
},
{
"lastTransitionTime": "2024-10-23T07:08:25Z",
"message": "All content-preserving finalizers finished",
"reason": "ContentHasNoFinalizers",
"status": "False",
"type": "NamespaceFinalizersRemaining"
}
],
"phase": "Terminating"
}
}
从以上文档可以看到 异常原因是 ContentDeletionFailed
但是我们不管内容
修改文档将 spec/finalizers
下的 kubernetes
删除
...
"spec": {
"finalizers": []
},
...
2. 开启代理
➜ ~ k proxy
Starting to serve on 127.0.0.1:8001
3. 提交请求
curl -k -H "Content-Type: application/json" -X PUT --data-binary @ep0001.json http://127.0.0.1:8001/api/v1/namespaces/ep0001/finalize
这样就去除了 Namespace
但是不建议这样操作.我这是测试环境就随便了.
原因
- 挂起(Finalizers):Namespace 中的某些资源使用了 Finalizers。这是 Kubernetes 中的一种机制,用于在删除资源之前执行一些清理操作。如果这些操作未能完成或被阻塞,Namespace 就会卡在 Terminating 状态。
- 子资源未被删除:Namespace 中的某些资源未能成功删除,可能是由于权限问题、API 资源的问题,或者某些控制器没有正确地执行删除操作。
- API Server 或控制器问题:Kubernetes API Server 或相关控制器在处理删除请求时遇到问题,可能导致 Namespace 无法正常删除。
评论