乔克
乔克
Published on 2024-11-15 / 9 Visits
0
0

Kubernetes中强制删除Terminating状态资源

前言

在 Kubernetes 中,经常遇到 Terminating 状态的资源,怎么删都删不掉,这里整理一些常遇到的问题。

强制删除 Pod

kubectl delete pod <your-pod-name> -n <name-space> --force --grace-period=0

加参数 --force --grace-period=0,grace-period 表示过渡存活期,默认 30s,在删除 POD 之前允许 POD 慢慢终止其上的容器进程,从而优雅退出,0 表示立即终止 POD

强制删除 PV、PVC

kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc xxx -p '{"metadata":{"finalizers":null}}'

删除 CRD 资源

kubectl patch crd/此处写CRD的名字 -p '{"metadata":{"finalizers":[]}}' --type=merge

强制删除 Namespace

(1)先用以下方式删除
kubectl delete ns <terminating-namespace> --force --grace-period=0

如果发现删除不了,就用下面的方式。

(2)删除顽固 Namespace

首先,导出顽固 Namespace 的 JSON 文件。

kubectl get namespace <terminating-namespace> -o json >tmp.json

然后,修改 JSON 文件,删除 finalizers 字段的值。

{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "creationTimestamp": "2021-11-24T02:28:58Z",
        "deletionTimestamp": "2021-12-13T02:58:33Z",
        "labels": {
            "kubesphere.io/namespace": "cert-manager"
        },
        "name": "cert-manager",
        "resourceVersion": "351925531",
        "selfLink": "/api/v1/namespaces/cert-manager",
        "uid": "67f1676b-9d78-44eb-8639-fcec47220cfa"
    },
	# 此位置
    "spec": {
    },
    "status": {
        "conditions": [
            {
                "lastTransitionTime": "2021-12-13T02:58:38Z",
                "message": "Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: acme.yourcompany.com/v1alpha1: the server is currently unable to handle the request",
                "reason": "DiscoveryFailed",
                "status": "True",
                "type": "NamespaceDeletionDiscoveryFailure"
            },
            {
                "lastTransitionTime": "2021-12-13T02:58:40Z",
                "message": "All legacy kube types successfully parsed",
                "reason": "ParsedGroupVersions",
                "status": "False",
                "type": "NamespaceDeletionGroupVersionParsingFailure"
            },
            {
                "lastTransitionTime": "2021-12-13T02:58:40Z",
                "message": "All content successfully deleted",
                "reason": "ContentDeleted",
                "status": "False",
                "type": "NamespaceDeletionContentFailure"
            }
        ],
        "phase": "Terminating"
    }
}

开启 Proxy。

kubectl proxy

执行以下命令进行删除。

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize

最后查看 Namespace 是否删除。如果没有,那就再试几次 _


Comment