k8s删除Terminating 的命名空间等资源
在k8s中执行删除命名空间后,命名空间没有被删除而是处于Terminating状态,
·
背景
在k8s中执行删除命名空间后,命名空间没有被删除而是处于Terminating状态,此时再执行删除仍然删除不掉
解决
将要删除的命名空间信息导出为json数据(下面traefik-v2 替换成你需要删除的命名空间名称)
kubectl get ns traefik-v2 -o json > tmp.json
编辑导出的tmp.json文件,删除其中的如下配置
vi tmp.json
删除标红的spec中所有内容
删除后如下
开启代理
kubectl proxy
新开启一个终端执行如下命令(其中traefik-v2替换成你自己的命名空间名称)
注意:新终端的当前所在目录需要和之前终端一致,因为需要找到tmp.json文件
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/traefik-v2/finalize
如下图已经删除了
如果还是删除不掉,往下看,进行下面的操作将 “<namespace-name>” 替换成你自己的命名空间
1. 检查命名空间中是否有任何正在运行的资源
使用以下命令检查命名空间中是否存在任何正在运行的资源:
kubectl get pods --namespace <namespace-name>
kubectl get deployments --namespace <namespace-name>
kubectl get replicasets --namespace <namespace-name>
如果有正在运行的资源,需要先将其删除或终止。
2. 检查命名空间中是否有任何 Finalizer
Finalizer 是防止命名空间被删除的钩子。使用以下命令检查命名空间中是否存在任何 Finalizer:
kubectl get namespace <namespace-name> -o yaml
如果存在 Finalizer,需要手动将其删除。可以使用 kubectl 命令逐个删除 Finalizer,或者使用以下命令一次性删除所有 Finalizer:
kubectl patch namespace <namespace-name> --type=json -p='[{"op": "remove", "path": "/metadata/finalizers"}]'
3. 使用 --ignore-not-found 标志
在删除命名空间时,可以使用 --ignore-not-found 标志来忽略不存在的资源。这将强制删除命名空间,即使其中包含正在运行的资源或 Finalizer。
kubectl delete namespace <namespace-name> --ignore-not-found
4. 使用 --cascade=orphan 标志
–cascade=orphan 标志将删除命名空间及其所有内容,包括所有正在运行的资源和 Finalizer。
kubectl delete namespace <namespace-name> --cascade=orphan
**注意:**使用 --cascade=orphan 标志时要小心,因为它会删除命名空间中的所有内容,包括数据和配置。在使用此标志之前,请确保您已备份所有重要数据。
更多推荐
所有评论(0)