k8s如何強制刪除pod&pv&pvc和ns&namespace方法
namespace、pod、pv、pvc全部處于“Terminating”狀態時,此時的該名稱空間下的所有控制器都已經被刪除了,之所以出現pod、pvc、pv、ns無法刪除,那是因為kubelet 阻塞,有其他的資源在使用該namespace,比如CRD等,嘗試重啟kubelet,再刪除該namespace 也不好使。
正確的刪除方法:刪除pod–> 刪除pvc —> 刪除pv --> 刪除名稱空間
一、強制刪除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}}'
直接刪除k8s etcd數據庫中的記錄!
三、強制刪除ns
在嘗試以下命令強制刪除也不好使:
kubectl delete ns <terminating-namespace> --force --grace-period=0
解決方法:
1)運行以下命令以查看處于“Terminating”狀態的namespace:
kubectl get namespaces
2)選擇一個Terminating namespace,并查看namespace 中的finalizer。運行以下命令:
kubectl get namespace <terminating-namespace> -o yaml
3)導出json格式到文件
kubectl get namespace <terminating-namespace> -o json >tmp.json
4)編輯tmp.josn,刪除finalizers 字段的值
{"apiVersion": "v1","kind": "Namespace","metadata": {"creationTimestamp": "2019-11-20T15:18:06Z","deletionTimestamp": "2020-01-16T02:50:02Z","name": "<terminating-namespace>","resourceVersion": "3249493","selfLink": "/api/v1/namespaces/knative-eventing","uid": "f300ea38-c8c2-4653-b432-b66103e412db"},"spec": { #從此行開始刪除"finalizers": []}, # 刪到此行"status": {"phase": "Terminating"}
}
5)開啟proxy
kubectl proxy
執行該命令后,當前終端會被卡住
6)打開新的一個窗口,執行以下命令
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
7)確認處于Terminating 狀態的namespace已經被刪除
kubectl get namespaces
如果還有處于Terminating 狀態的namespace,重復以上操作,刪除即可!
k8s強制刪除pod、svc、namespace(Terminating)驅逐pod,coredns
k8s強制刪除hang死狀態pod