
# 如何删除Terminating状态的命名空间？
Kubernetes中namespace有两种常见的状态，即Active和Terminating状态。当对应的命名空间下还存在运行的资源，但该命名空间被删除时才会出现Terminating状态，这种情况下只要等待Kubernetes本身将命名空间下的资源回收后，该命名空间将会被系统自动删除。
但是在某些情况下，即使命名空间下没有运行的资源，但依然无法删除Terminating状态的命名空间的情况，它会一直处于Terminating状态下。
解决这个问题的步骤为：
1. 查看命名空间状态，本文示例中的命名空间为rdbms，请根据自身情况进行替换。 
   ```
   kubectl  get ns  | grep rdbms
   ```
   回显如下：
   ```
   rdbms   Terminating   6d21h
   ```
   
   
2. 查看命名空间详细信息。 
   ```
   kubectl get ns rdbms -o yaml
   ```
   回显如下：
   ```
   apiVersion: v1
   kind: Namespace
   metadata:
     annotations:
       kubectl.kubernetes.io/last-applied-configuration: |
         {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"rdbms"}}
     creationTimestamp: "2025-09-11T15:19:43Z"
     deletionTimestamp: "2025-10-11T15:33:23Z"
     name: rdbms
     resourceVersion: "84553454"
     selfLink: /api/v1/namespaces/rdbms
     uid: 457788ddf-53d7-4hde-afa3-1fertg21ewe1
   spec:
     finalizers:
     - kubernetes
   status:
     phase: Terminating
     conditions:
     - lastTransitionTime: "2025-10-11T06:08:27Z"
       message: 'Discovery failed for some groups, 1 failing: unable to retrieve the
         complete list of server APIs: metrics.k8s.io/v1beta1: stale GroupVersion discovery:
         metrics.k8s.io/v1beta1'
       reason: DiscoveryFailed
       status: "True"
       type: NamespaceDeletionDiscoveryFailure
   ...
   ```
   - 如果status中有报错"DiscoveryFailed"：表示当前删除命名空间动作阻塞在kube-apiserver访问metrics.k8s.io/v1beta1接口的APIService资源对象。解决方案请参见[命名空间因APIService对象访问失败无法删除](https://support.huaweicloud.com/cce_faq/cce_faq_00325.html)。
   
   - 如果status中没有报错"DiscoveryFailed"，则继续执行以下步骤排查问题。
   
   
   
   
3. 查看集群中可以使用命名空间隔离的资源。 
   ```
   kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n rdbms
   ```
   发现rdbms命名空间下并无资源占用。
   
   
4. 尝试对命名空间进行删除。 
   ```
   kubectl  delete ns rdbms
   ```
   直接删除命名空间rdbms回显如下：
   ```
   Error from server (Conflict): Operation cannot be fulfilled on namespaces "rdbms": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.
   ```
   删除操作未能完成，并提示系统会在确定命名空间中无资源后自动删除该命名空间。
   
   
5. 使用强制删除。 
   ```
   kubectl  delete ns rdbms --force --grace-period=0
   ```
   回显如下：
   ```
   warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
   Error from server (Conflict): Operation cannot be fulfilled on namespaces "rdbms": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.
   ```
   依然无法删除该命名空间。
   
   
6. 大多数情况下，命名空间下的资源无法强制删除，您可以使用原生接口进行删除。 
   获取namespace的详情信息。
   ```
   kubectl  get ns rdbms  -o json > rdbms.json
   ```
   查看namespace定义的json配置，编辑json文件并删除掉spec部分。
   ```
   {
       "apiVersion": "v1",
       "kind": "Namespace",
       "metadata": {
           "annotations": {
               "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"rdbms\"}}\n"
           },
           "creationTimestamp": "2019-10-14T12:17:44Z",
           "deletionTimestamp": "2019-10-14T12:30:27Z",
           "name": "rdbms",
           "resourceVersion": "8844754",
           "selfLink": "/api/v1/namespaces/rdbms",
           "uid": "29067ddf-56d7-4cce-afa3-1fbdbb221ab1"
       },
       "spec": {
           "finalizers": [
               "kubernetes"
           ]
       },
       "status": {
           "phase": "Terminating"
       }
   }
   ```
   执行接口PUT请求更新后，命名空间将自动删除。
   ```
   curl --cacert /root/ca.crt --cert /root/client.crt --key /root/client.key -k -H "Content-Type:application/json" -X PUT --data-binary @rdbms.json https://x.x.x.x:5443/api/v1/namespaces/rdbms/finalize 
   {
     "kind": "Namespace",
     "apiVersion": "v1",
     "metadata": {
       "name": "rdbms",
       "selfLink": "/api/v1/namespaces/rdbms/finalize",
       "uid": "29067ddf-56d7-4cce-afa3-1fbdbb221ab1",
       "resourceVersion": "8844754",
       "creationTimestamp": "2019-10-14T12:17:44Z",
       "deletionTimestamp": "2019-10-14T12:30:27Z",
       "annotations": {
         "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"rdbms\"}}\n"
       }
     },
     "spec": {
     },
     "status": {
       "phase": "Terminating"
     }
   ```
   如果仍然无法删除命名空间，请查看metadata部分是否存在finalizers字段，如果存在，需要通过如下命令进入命名空间后删除该字段：
   ```
   kubectl edit ns rdbms
   ```
   ![](https://support.huaweicloud.com/cce-autopilot_faq/public_sys-resources/note_3.0-zh-cn.png)
   - 集群证书获取方法请参见[获取集群证书](https://support.huaweicloud.com/usermanual-cce/cce_10_0175.html)。
   
   - **https://x.x.x.x:5443** 为连接集群的地址。您可以登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，进入集群，查看连接信息的内网地址进行获取。
    
   
   
7. 再次查看namespace确认已经被删除。 
   ```
   kubectl  get ns  | grep rdb
   ```
   
   
 
