K8S资源无法删除处理方法

一、资源无法正常删除

在 Kubernetes 中,Finalizers 是一种机制,用于确保资源在删除之前完成特定的清理操作。它们主要用于防止资源被意外删除,直到所有依赖的资源或操作都已完成。


Finalizers 的作用

  1. 资源清理 在删除资源(如 Pod、Namespace、PersistentVolume 等)时,Finalizers 会确保相关的清理操作(如释放存储、断开网络、删除依赖资源等)已完成。

  2. 防止意外删除 Finalizers 可以防止资源被意外删除,直到所有依赖的资源或操作都已完成。

  3. 顺序删除 在复杂的资源依赖关系中,Finalizers 可以确保资源按正确的顺序删除。


Finalizers 的工作原理

  1. 资源删除流程

    • 当用户请求删除一个资源时,Kubernetes 会检查该资源是否包含 Finalizers。

    • 如果存在 Finalizers,Kubernetes 会将该资源标记为 Terminating 状态,但不会立即删除。

    • Kubernetes 会等待所有 Finalizers 被移除后,才会真正删除该资源。

  2. Finalizers 的移除

    • Finalizers 通常由控制器(Controller)或 Operator 负责移除。

    • 控制器会在完成清理操作后,从资源的 metadata.finalizers 字段中移除对应的 Finalizer。


Finalizers 的常见场景

  1. Namespace 删除 在删除 Namespace 时,Kubernetes 会确保该 Namespace 下的所有资源(如 Pod、Service、ConfigMap 等)都已被删除。

  2. PersistentVolume 删除 在删除 PersistentVolume 时,Kubernetes 会确保关联的存储资源已被释放。

  3. 自定义资源(CRD) 在删除自定义资源时,Operator 可能会使用 Finalizers 来确保相关的清理操作已完成。


Finalizers 的示例

查看 Finalizers
复制代码
kubectl get namespace <namespace-name> -o json | jq '.metadata.finalizers'
手动移除 Finalizers

如果 Finalizers 卡住导致资源无法删除,可以手动移除 Finalizers:

  1. 导出资源定义:

    复制代码
    kubectl get namespace <namespace-name> -o json > ns.json
  2. 编辑 ns.json,移除 spec.finalizers 字段:

    复制代码
    {
      "metadata": {
        "finalizers": []
      }
    }
  3. 更新资源:

    复制代码
    kubectl replace --raw "/api/v1/namespaces/<namespace-name>/finalize" -f ns.json

Finalizers 的注意事项

  1. 不要随意移除 Finalizers 手动移除 Finalizers 可能会导致资源未完成清理就被删除,从而引发问题(如资源泄漏)。

  2. Finalizers 卡住的原因 如果 Finalizers 长时间未移除,可能是控制器未正常运行,或者清理操作未完成。需要检查相关控制器的日志。

  3. Finalizers 的设计 在开发自定义控制器或 Operator 时,应合理设计 Finalizers,确保清理操作的原子性和可靠性。


总结

Finalizers 是 Kubernetes 中用于资源清理和删除顺序控制的重要机制。它们确保资源在删除之前完成所有必要的操作,避免资源泄漏或不一致的状态。然而,如果 Finalizers 未正确移除,可能会导致资源卡在 Terminating 状态,此时需要手动干预。

相关推荐
仙柒4152 小时前
Docker存储原理
运维·docker·容器
快乐的哈士奇4 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
weixin_449290016 小时前
Docker + MySQL 在 Windows 11 上的本地安装部署文档
mysql·docker·容器
Ysn07196 小时前
中文乱码:在 Docker 容器中设置中文语言环境
运维·python·docker·容器
米高梅狮子6 小时前
01.CentOS-Stream-8-packstack安装OpenStack
linux·云原生·容器·kubernetes·centos·自动化·openstack
亚空间仓鼠8 小时前
Docker容器化高可用架构部署方案(十三)
docker·容器·架构
米高梅狮子9 小时前
01.mysql的备份与恢复
运维·数据库·mysql·docker·容器·kubernetes·github
云游牧者10 小时前
K8S存储体系全解-从PV-PVC-SC到StatefulSet持久化实战
云原生·容器·kubernetes·pvc·pv·sc·进阶存储卷
古城小栈10 小时前
K8s 认证、授权 系统
云原生·容器·kubernetes
码点滴10 小时前
K8s 节点“半死“状态如何自动愈合?AI Agent 构建智能自愈与健康量化体系
人工智能·容器·kubernetes