普通删除方法没用,使用以下解决方法

1. 获取Terminating状态的namespace
jack@jack ~ % kubectl  get namespace
NAME                                     STATUS        AGE
bluehelix                                Active        146d
broker                                   Active        146d
cattle-fleet-clusters-system             Active        87d
cert-manager                             Terminating   87d
2. 查询要删除的namespace下是否还有资源
jack@jack ~ % kubectl  get all -n cert-manager
No resources found in cert-manager namespace.
3. 导出为json
kubectl get ns cert-manager      -o json > cert-manager.json
4. 删除json文件中的finalize关键字字段
删除前 
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
    },

删除后
    "spec": {
        "finalizers": []
    },
5. 开启 proxy
jack@jack ~ % kubectl proxy
Starting to serve on 127.0.0.1:8001
6. 另起终端  指定刚才的json文件 执行以下命令进行删除操作
curl -k -H "Content-Type: application/json" -X PUT --data-binary @cert-manager.json http://127.0.0.1:8001/api/v1/namespaces/{Terminating_namespace}/finalize  
7. 再次获取namespace状态,删除成功
jack@jack ~ % kubectl  get namespace
NAME                                     STATUS        AGE
bluehelix                                Active        146d
broker                                   Active        146d
cattle-fleet-clusters-system             Active        87d
8. 如果仍然无法删除命名空间,请查看metadata部分是否存在finalizers字段,如果存在,需要通过如下命令进入命名空间后删除该字段,把metadata部分存在finalizers字段都删掉即可
kubectl edit ns cert-manager 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐