k8s集群强制删除某些资源

K8s运维

0.前言

在k8s集群中,通常我们删除pod和pod所依赖存储资源的顺序为:删除pod--> 删除pvc ---> 删除pv --> 删除名称空间,有些时候如果删除顺序不对比如先删除了namespace会导致kubelet阻塞,之后再删除pod就会出现pod一直处于terminate状态,这个时候就要采取一些强硬的手段或者特别的方法来删除pod、pv、pvc等资源,今天就来看下有哪些办法可以强制删除pod,pv,pvc和namespace等资源,并对集群本身没有太大影响。

1.强制删除pod

正常情况下删除pod的命令如下:

kubectl delete pod <pod-name> -n <namespace>

如果需要强制删除pod,就需要添加别的参数,命令如下:

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

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

2.强制删除pv,pvc

遇到pv,pvc夯住的情况,使用删除命令是没用的,可以通过修改配置的方式从ectd中完全删除pv,pvc,命令如下: (1)删除pv

kubectl patch pv <pv-name> -p '{"metadata":{"finalizers":null}}'

(2)删除pvc

kubectl patch pvc <pvc-name> -p '{"metadata":{"finalizers":null}}'

其实都是修改finalizers字段,将其置为空。

3.强制删除namespace

正常的强制删除命令如下:

kubectl delete ns <terminating-namespace> --force --grace-period=0

如果执行以上命令没用,可以使用如下办法: (1)首先将namespace资源导入yaml文件

kubectl get namespace <terminating-namespace> -o yaml

(2)查看namespace中的finalizers字段

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    cattle.io/status: '{"Conditions":[{"Type":"ResourceQuotaInit","Status":"True","Message":"","LastUpdateTime":"2024-12-24T03:45:30Z"},{"Type":"InitialRolesPopulated","Status":"True","Message":"","LastUpdateTime":"2024-12-24T03:45:30Z"}]}'
    field.cattle.io/projectId: c-m-lmzvtvb5:p-k4h7v
    lifecycle.cattle.io/create.namespace-auth: "true"
  creationTimestamp: "2024-12-24T03:46:49Z"
  labels:
    field.cattle.io/projectId: p-k4h7v
    kubernetes.io/metadata.name: <terminating-namespace>
  name: <terminating-namespace>
  resourceVersion: "28181022"
  uid: 4019db96-7d9c-478b-bb17-4df80ab87ea3
spec:
  finalizers:
  - kubernetes
status:
  phase: Terminating

(3)以json的格式导出namespace

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

(4)编辑json文件

{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "annotations": {
            "cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2024-12-24T03:45:30Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2024-12-24T03:45:30Z\"}]}",
            "field.cattle.io/projectId": "c-m-lmzvtvb5:p-k4h7v",
            "lifecycle.cattle.io/create.namespace-auth": "true"
        },
        "creationTimestamp": "2024-12-24T03:46:49Z",
        "labels": {
            "field.cattle.io/projectId": "p-k4h7v",
            "kubernetes.io/metadata.name": "<terminating-namespace>"
        },
        "name": "<terminating-namespace>",
        "resourceVersion": "2818101",
        "uid": "4019db96-7d9c-478b-bb17-4df80ab87ea3"
    },
    // "spec": {
    //    "finalizers": [] // 将这三行删除
    // },
    "status": {
        "phase": "Terminating"
    }
}

(5)开启kube-proxy

kubectl proxy

注意:执行该命令后,终端会被卡住,可以开启一个新的终端 (6)发起请求删除namespace

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

之后检查namespace,会发现namespace已经被删除掉了。

4.结语

虽然以上办法可以强制删除pod等资源,但在日常工作中还是少用为好,正确的操作更为重要。

0
0
0
0
关于作者
相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论