云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > Kubernetes(K8S)强制删除命名空间

Kubernetes(K8S)中强制删除命名空间的实现方式

作者:ICT董老师

本文介绍了在Kubernetes中删除处于Terminating状态的命名空间mysql-operator的步骤,包括检查并清理残留资源、强制删除命名空间等方法

当 Kubernetes 中的命名空间 mysql-operator 一直处于 Terminating 状态无法删除时,通常是由于资源未被正确清理或 finalizers 未完成导致的。

以下是分步骤的解决方案:

一、检查并清理残留资源

1. 列出命名空间下的所有资源

kubectl get all --namespace=mysql-operator
#检查是否有未被删除的 Pod、Deployment、Service、PVC 等资源。

2. 手动删除残留资源

#如果发现残留资源,逐个删除:
kubectl delete pod <pod-name> -n mysql-operator
kubectl delete deployment <deployment-name> -n mysql-operator
kubectl delete service <service-name> -n mysql-operator
kubectl delete pvc <pvc-name> -n mysql-operator
#重复此操作直至所有资源被清除。

二、强制删除命名空间(终极方案)

如果清理残留资源后仍无法删除命名空间,可能是 finalizers 未完成导致的。此时需通过编辑命名空间配置来强制删除。

1. 导出命名空间配置

kubectl get namespace mysql-operator -o json > mysql-operator.json

2. 编辑 JSON 文件

使用文本编辑器打开 mysql-operator.json,找到 spec.finalizers 字段(通常为 [“kubernetes”]),将其清空:

json
"spec": {
  "finalizers": []
}

3. 通过 API 强制删除

启动 kubectl proxy 以访问 API 服务器:

kubectl proxy --port=8001 &
#使用 curl 提交修改后的 JSON 文件:
curl -k -H "Content-Type: application/json" -X PUT --data-binary @mysql-operator.json http://localhost:8001/api/v1/namespaces/mysql-operator/finalize

4. 验证删除结果

kubectl get namespace mysql-operator
#如果命名空间已消失,说明删除成功。

#强制删除pod
kubectl delete pod mycluster-0 --grace-period=0 --force
kubectl patch pod mycluster-0 -p '{"metadata":{"finalizers":null}}' --type=merge

#通过 patch 命令强制移除InnoDBCluster资源:
kubectl patch innodbcluster <cluster-name> -n <namespace> --type=json -p='[{"op": "remove", "path": "/metadata/finalizers"}]'
docker system prune -a
volumes:
- name: datadir
persistentVolumeClaim:
claimName: datadir-mycluster-0

datadirVolumeClaimTemplate

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文