侧边栏壁纸
博主头像
乔克博主等级

每一篇文章都经得起时间的推敲。

  • 累计撰写 78 篇文章
  • 累计创建 69 个标签
  • 累计收到 15 条评论

目 录CONTENT

文章目录

Kubernetes中强制删除Terminating状态资源

乔克
2022-03-05 / 0 评论 / 0 点赞 / 228 阅读 / 2,564 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-03-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告 广告

前言

在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是否删除。如果没有,那就再试几次_

0

评论区