k8s强制删除namespace
背景说明
手动删除ns后发现一直处于 Terminating 状态,无法删除
$ k get ns
NAME STATUS AGE
apisix Active 25d
calico-apiserver Active 116d
calico-system Active 116d
default Active 116d
devops Active 101d
envoy-gateway-system Active 4d
envoygateway Terminating 21m
gitea Active 24d
启动proxy
说明
可以使用 --port 参数指定端口,不指定默认8001
kubectl proxy
导出json格式到文件
export MYNS=envoygateway
kubectl get namespace ${MYNS} -o json > tmp.json
编辑 tmp.josn,删除 finalizers 字段的值
说明
删除 finalizers 字段
"finalizers": [
"xxx"
],
删除命名空间
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/${MYNS}/finalize
验证
$ k get ns
NAME STATUS AGE
apisix Active 25d
calico-apiserver Active 116d
calico-system Active 116d
default Active 116d
devops Active 101d
envoy-gateway-system Active 4d
gitea Active 24d
harbor Active 106d
export NS=xxx
kubectl get namespace $NS -o json \
| jq 'del(.spec.finalizers)' \
| kubectl replace --raw "/api/v1/namespaces/$NS/finalize" -f -