凯发k8国际娱乐官网入口-k8凯发> 云容器引擎 cce> > > 如何删除terminating状态的命名空间?
更新时间:2023-08-29 gmt 08:00

如何删除terminating状态的命名空间?-凯发k8国际娱乐官网入口

kubernetes中namespace有两种常见的状态,即active和terminating状态。当对应的命名空间下还存在运行的资源,但该命名空间被删除时才会出现terminating状态,这种情况下只要等待kubernetes本身将命名空间下的资源回收后,该命名空间将会被系统自动删除。

但是在某些情况下,即使命名空间下没有运行的资源,但依然无法删除terminating状态的命名空间的情况,它会一直处于terminating状态下。

解决这个问题的步骤为:

  1. 查看命名空间详情。
    $ kubectl  get ns  | grep rdb
    rdbms                  terminating   6d21h
    $ 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: "2020-05-07t15:19:43z"
      deletiontimestamp: "2020-05-07t15:33:23z"
      name: rdbms
      resourceversion: "84553454"
      selflink: /api/v1/namespaces/rdbms
      uid: 457788ddf-53d7-4hde-afa3-1fertg21ewe1
    spec:
      finalizers:
      - kubernetes
    status:
      phase: terminating
  2. 查看该命名空间下的资源。
    # 查看集群中可以使用命名空间隔离的资源
    $ kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n rdbms

    发现rdbms命名空间下并无资源占用。

  3. 尝试对命名空间进行删除。
    直接删除命名空间rdbms。
    $ kubectl  delete ns 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.

    删除操作未能完成,并提示系统会在确定命名空间中无资源后自动删除该命名空间。

  4. 使用强制删除。
    $ 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.

    依然无法删除该命名空间。

  5. 大多数情况下,命名空间下的资源无法强制删除,您可以使用原生接口进行删除。
    获取namespace的详情信息。
    $ kubectl  get ns rdbms  -o json > rdbms.json

    查看namespace定义的json配置,编辑json文件并删除掉spec部分。

    $ cat rdbms.json
    {
        "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://x.x.x.x:5443为连接集群的地址。您可以登录cce控制台,进入集群,查看连接信息的内网地址进行获取。
  6. 再次查看namespace确认已经被删除。
    $ kubectl  get ns  | grep rdb
分享:

more

网站地图