Kubernetes/使用文档/Kubernetes强制删除资源.md
offends 7a2f41e7d6
All checks were successful
continuous-integration/drone Build is passing
synchronization
2024-08-07 18:54:39 +08:00

2.7 KiB
Raw Blame History

本文作者:丁辉

Kubernetes强制删除资源

卸载 Mount 挂载

umount $(mount | grep /var/lib/kubelet/pods | awk '{print $3}')

强制删除 Pod

指定你的 Pod 名称

POD_NAME=
  • 强制删除 Terminating Pod

    kubectl delete pod ${POD_NAME} --force
    
  • 立刻终止并强制删除 Terminating Pod

    kubectl delete pod ${POD_NAME} --grace-period=0 --force
    
  • 通过修改系统参数删除 Terminating Pod(仅Centos)

    通过设置 fs.may_detach_mounts=1 , Linux内核可以允许卸载这些挂载点即使它们仍然被一些进程占用。

    sysctl -w fs.may_detach_mounts=1
    
  • 通过修改 finalizers 删除 Terminating Pod

    当你删除一个资源(比如 PodKubernetes 会将该资源的 finalizers 字段设置为一个非空的数组,这些 finalizers 是用来执行删除操作的一系列步骤。一旦这些步骤全部完成Kubernetes 就会将资源完全删除。但是,有时候 Pod 可能会被卡在 Terminating 状态,无法正常删除,这可能是因为某些 finalizers 的执行未能成功完成,从而导致 Pod 无法被删除。

    kubectl patch pod ${POD_NAME} -p '{"metadata":{"finalizers":null}}'
    

强制删除当前 Namespace 下所有 Pvc Pv

  • 设置变量

    export YOURNAMESPACE=你的名称空间
    
  • 删除 Pvc

    for line in  $(kubectl get pvc -n $YOURNAMESPACE | awk ' NR > 1{print $1}') ;do  kubectl delete pvc  $line  -n $YOURNAMESPACE ; echo $line; done
    
  • 删除 Pv

    for line in  $(kubectl get pv -n $YOURNAMESPACE | awk ' NR > 1{print $1}') ;do  kubectl delete pv  $line  -n $YOURNAMESPACE ; echo $line; done
    
  • 若发现 Pv 还是删除不了

    for line in  $(kubectl get pv -n $YOURNAMESPACE | awk ' NR > 1{print $1}') ;do  kubectl patch pv $line -p '{"metadata":{"finalizers":null}}' -n $YOURNAMESPACE ; kubectl delete pv  $line  -n $YOURNAMESPACE ;echo $line; done
    

强制删除 Namespace

方法一

  • 先手动强制删除试试

    kubectl delete ns $YOURNAMESPACE --force --grace-period=0
    

方法二

  • 导出 JSON 文件

    kubectl get namespace $YOURNAMESPACE -o json > ns.json
    
  • 编辑 ns.josn 删除 finalizers 字段的值

    "spec": {
        "finalizers": []
      },
    
  • 开启proxy

    kubectl proxy --port=8081
    
  • 删除

    curl -k -H "Content-Type:application/json" -X PUT --data-binary @ns.json http://127.0.0.1:8081/api/v1/namespaces/$YOURNAMESPACE/finalize
    

删除Evicted pod

kubectl get pod -A | grep Evicted | awk '{print $2" -n "$1}' | xargs kubectl delete pod