K8S删除资源后一直处于Terminating状态无法删除解决方法

原因

使用kubectl delete 删除某命名空间是一直处于Terminating状态无法删除,首先排查了该命名空间下是否还存在deployment pod等资源发现没有后,等了很久还是无法删除后发现是因为该名称空间的“finalizers”字段有值导致
在这里插入图片描述

Finalizer(终结器)是Kubernetes中一种机制,用于确保在删除资源之前执行某些清理操作。Finalizer可以被资源对象的控制器(如Controller Manager)添加到资源的metadata.finalizers字段中。当删除资源时,Kubernetes会检查metadata.finalizers字段中的Finalizer列表,并确保在删除资源之前,所有Finalizer中定义的清理操作都已完成。
Finalizer的存在是为了保证资源的完整性和一致性。在资源删除的过程中,Finalizer可以执行一些清理操作,如释放关联的资源、撤销引用、通知其他系统等。这些清理操作可能需要一定的时间来完成,以确保资源被正确地清理和释放。
当一个资源被标记为删除时,Kubernetes会将该资源的状态设置为Terminating,并在metadata.finalizers字段中添加一个特殊的Finalizer。这个Finalizer的存在会阻止资源被立即删除,直到所有Finalizer中定义的清理操作都完成。
只有在所有Finalizer中定义的清理操作完成后,Kubernetes才会继续删除资源,将它从系统中完全移除。
Finalizer的使用可以确保资源在删除时进行必要的清理操作,以避免数据丢失或资源泄露等问题。它提供了一种可靠的机制,确保资源的删除过程是可控和可预测的。
需要注意的是,如果某个资源的Finalizer阻止了删除操作的完成,那么必须解决导致阻塞的问题或手动移除Finalizer,才能继续进行删除操作。这样可以确保资源在删除之前完成必要的清理操作,并避免潜在的数据损失或资源泄露问题。

解决方法如下

  1. 导出namespace资源对象
 # kubectl get namespaces ops -o json > ./ops.json
  1. 修改导出的文件将“finalizers”字段内的值清空
# vim ops.json

在这里插入图片描述
在这里插入图片描述
3.打开一个新的终端,使用kubectl起一个代理

# kubectl proxy 
Starting to serve on 127.0.0.1:8001

4.调用apiserver api删除该命名空间

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

5.到此成功删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Kubernetes 集群中删除所有处于 Terminating 状态Pod,可以使用以下命令: ``` kubectl delete pod --field-selector=status.phase=Terminating ``` 请注意,这将删除所有处于 Terminating 状态Pod,并且无法撤消。因此,应谨慎使用此命令。 ### 回答2: KubernetesK8s)是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。要删除所有处于Terminating(终止)状态Pod,可以使用以下语句: ``` kubectl get pods --field-selector=status.phase=Terminating -o json | kubectl delete -f - ``` 该语句使用了kubectl命令,并结合了一些参数和标志来执行特定的操作。 - `kubectl get pods`:获取当前集群中的所有Pod。 - `--field-selector=status.phase=Terminating`:使用字段过滤器,仅返回状态TerminatingPod。 - `-o json`:输出格式为JSON,以便用于后续的操作。 - `|`:管道命令符,将前一个命令的输出作为后一个命令的输入。 - `kubectl delete -f -`:从标准输入中读取JSON文件,并根据其内容删除对应的资源。 这样,执行该语句后,Kubernetes将会删除所有处于Terminating状态Pod。 需要注意的是,使用该语句删除Pod时,确保你有足够的权限执行操作,并且在执行前仔细确认一次,以免误删除正在使用或重要的Pod。同时,建议根据具体情况调整语句,以确保只删除目标Pod。 ### 回答3: 要删除所有Terminating状态pod,可以使用以下命令: kubectl delete pod --all --grace-period=0 --force 这个命令中的参数含义如下: - "kubectl delete pod":删除pod的命令 - "--all":指定要删除所有的pod - "--grace-period=0":设置pod的终止期为0,即立即终止 - "--force":强制删除pod,即使pod处于Terminating状态 通过使用这个命令,所有处于Terminating状态pod都会被立即删除,不会等待额外的终止期。 需要注意的是,执行此命令可能会导致数据丢失或应用程序中断,因此在执行之前请谨慎确认。另外,删除操作是不可逆的,无法恢复被删除pod,所以请确保操作的可行性和必要性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱吃肉@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值