强制删除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 " " | 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