有时 k8s 命名空间namespace 删除时卡住,会一直处于 Terminating,我们可以通过 kubectl proxy 提供 api 强制删除
请明确知道自己的行为,并确保此命名空间的确不再使用,以免在生产环境中强制删除造成无法挽回的后果
一、准备删除脚本
准备删除脚本 ns-del.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #!/bin/bash if [ "$#" -ne 1 ]; then echo "Usage: $0 <namespace>" exit 1 fi NAMESPACE=$1 kubectl proxy --port=8015 & PROXY_PID=$! sleep 3 kubectl get namespace ${NAMESPACE} -o json | jq '.spec = {"finalizers":[]}' > ns-del-meta.json RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -H "Content-Type: application/json" -X PUT --data-binary @ns-del-meta.json 127.0.0.1:8015/api/v1/namespaces/${NAMESPACE}/finalize) if [ "$RESPONSE" -eq 200 ] || [ "$RESPONSE" -eq 204 ]; then echo "Namespace $NAMESPACE force deleted successfully." else echo "Failed to force delete namespace $NAMESPACE. HTTP status code: $RESPONSE" fi kill $PROXY_PID rm ns-del-meta.json
|
二、删除命名空间
1 2 3 4
| $ sudo bash ns-del.sh <要删除的namespace>
Starting to serve on 127.0.0.1:8015 Namespace xxx force deleted successfully.
|