強制刪除namespace
當刪除ns 時候里面還有其他資源,那么就會導致刪除不了ns ,一直處於Terminating 狀態,然后再在此命名空間內部新增資源的時候就會導致失敗,所以要強制刪除。
kubectl get namespace monitoring -o json > monitoring.json
vi monitoring.json 刪除下面部分

新增一個代理端口,代理的其實就是apiserver的非加密端口8080,運行此命令后會占用終端,需要再開一個窗口執行curl命令
kubectl proxy --port=8081
curl -k -H "Content-Type: application/json" -X PUT --data-binary @monitoring.json http://127.0.0.1:8081/api/v1/namespaces/monitoring/finalize
注意:在高版本的k8s中默認只開啟了加密端口,所以需要手動開啟api的非加密8080。例如通過kubeadm安裝的集群可直接更改配置文件
vi /etc/kubernetes/manifests/kube-apiserver.yaml
把--insecure-port=0 改為 --insecure-port=8080 即可,等待幾秒自動生效。
解釋:之所以通過8080 非加密端口執行刪除命令,是因為加密端口需要證書認證。
快捷方式: 一條命了搞定
kubectl get namespace kube-node-lease -o json | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" | kubectl replace --raw /api/v1/namespaces/kube-node-lease/finalize -f -
強制刪除POD
kubectl delete pod PODNAME --force --grace-period=0
強制刪除pv,pvc
kubectl patch persistentvolume pvc-63583510-95ba-461c-a71c-0b84c269be40 -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc pvc-common-rw-0 -p '{"metadata":{"finalizers":null}}' -n nlp