强制删除Kubernetes Namespace

在测试环境使用 Kubernetes 删除 Namespace提示 Terminating但是一直失败无法无法进行下去.

操作

注意,使用此方法强制删除 Finalizers 是一种破坏性操作,在执行此操作前确保已备份所需的数据和资源。

  1. 以下操作都在控制台操作
  2. kubctl 已经被我 aliask
  3. 以下 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但是不建议这样操作.我这是测试环境就随便了.

原因

  1. 挂起(Finalizers):Namespace 中的某些资源使用了 Finalizers。这是 Kubernetes 中的一种机制,用于在删除资源之前执行一些清理操作。如果这些操作未能完成或被阻塞,Namespace 就会卡在 Terminating 状态。
  2. 子资源未被删除:Namespace 中的某些资源未能成功删除,可能是由于权限问题、API 资源的问题,或者某些控制器没有正确地执行删除操作。
  3. API Server 或控制器问题:Kubernetes API Server 或相关控制器在处理删除请求时遇到问题,可能导致 Namespace 无法正常删除。