订阅博客
收藏博客
微博分享
QQ空间分享

K8S Namespace无法删除,状态Terminating解决办法

频道:Kubernetes 标签: 时间:2018年12月03日 浏览:3438次 评论:0条

首先检查哪些namespace无法删除,此时应保证namespace中没有资源

查看namespace资源如下:

➜  ~ kubectl get all -n ingress


➜  ~ kubectl get ns |grep -vi "active"

NAME               STATUS        AGE

cattle-system      Terminating   98d

ingress            Terminating   141d

local              Terminating   98d


kubectl get ns local -o json > local.json

➜  ~ cat local.json

{

    "apiVersion": "v1",

    "kind": "Namespace",

    "metadata": {

        "annotations": {

            "cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2018-08-27T08:10:43Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2018-08-27T08:10:43Z\"}]}",

            "lifecycle.cattle.io/create.namespace-auth": "true",

            "management.cattle.io/system-namespace": "true"

        },

        "creationTimestamp": "2018-08-27T08:10:42Z",

        "deletionTimestamp": "2018-11-07T03:06:16Z",

        "finalizers": [

            "controller.cattle.io/namespace-auth"

        ],

        "name": "local",

        "resourceVersion": "37774346",

        "selfLink": "/api/v1/namespaces/local",

        "uid": "b0d838e5-a9d0-11e8-bbd6-00163e069697"

    },

    "spec": {

        "finalizers": [

            "kubernetes"

        ]

    },

    "status": {

        "phase": "Terminating"

    }

}


删除json文件中对应的这2行,然后保存

执行以下命令

curl -H "Content-Type: application/json" -X PUT --data-binary @local.json http://<master_node_ip>:8080/api/v1/namespaces/local/finalize

稍等一会, namespace 就会被删除掉了



如果以上方法无法奏效,那么可以采取以下方法解决:

# 删除default namespace下的pod名为pod-to-be-deleted-0
ETCDCTL_API=3 etcdctl del /registry/pods/default/pod-to-be-deleted-0

# 删除需要删除的NAMESPACE
etcdctl del /registry/namespaces/NAMESPACENAME


操作etcd数据库需要谨慎,不建议如此操作,只是作为一个最后的解决方案

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。