Kubernetes 的 NameSpace 无法删除处理

获取要删除 NameSpace 的 JSON 文件:

复制代码
NAMESPACE=cert-manager
kubectl get ns ${NAMESPACE} -o json > namespace.json

然后,编辑 namespace.json, 从 finalizers 字段中删除 kubernetes 的值并保存,示例如下:

复制代码
{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        ...: ...
    },
    "spec": {
        "finalizers": []
    },
    "status": {
        "phase": "Terminating"
    }
}

之后,可以通过 kubectl proxy 设置 APIServer 的临时 IP 和端口

复制代码
kubectl proxy --port=6880 &

最后,进行 API 调用来强制删除:

复制代码
curl -k -H "Content-Type: application/json" -X  PUT --data-binary @namespace.json http://127.0.0.1:6880/api/v1/namespaces/${NAMESPACE}/finalize

验证是否已经成功删除:

复制代码
kubectl get ns ${NAMESPACE}

编排成脚本

📝Notes:

依赖组件:

  • kubectl
  • jq
  • curl

force-delete-ns.sh

复制代码
#!/bin/bash
set -ex
PATH=$PATH:.
NAMESPACE=$1    # 读取命令行第一个参数
kill -9  $(ps -ef|grep proxy|grep -v grep |awk '{print $2}')
kubectl proxy --port=6880 &
kubectl get namespace ${NAMESPACE} -o json |jq '.spec = {"finalizers":[]}' > namespace.json
curl -k -H  "Content-Type: application/json"  -X  PUT --data-binary @namespace.json 127.0.0.1:6880/api/v1/namespaces/${NAMESPACE}/finalize

使用方式示例:

复制代码
bash force-delete-ns.sh cert-manager
相关推荐
珂玥c9 小时前
k8s集群网络插件caclico切换为flannel
云原生·容器·kubernetes
Zhu7589 小时前
【问题处理】minIO(AIStor)在k8s部署后,API访问失败的问题,TLS
云原生·容器·kubernetes
Altruiste11 小时前
minikube 搭clickhouse 集群
clickhouse·kubernetes
古城小栈12 小时前
通过 Kind 快速构建 k8s 集群
云原生·kubernetes·kind
珂玥c14 小时前
kubeadm方式部署 k8s 1.21
云原生·容器·kubernetes
小义_15 小时前
【Kubernetes】(十九)监控与升级
云原生·容器·kubernetes
炸炸鱼.17 小时前
Kubernetes Pod 深度理解:从入门到实战
云原生·容器·kubernetes·pod
云游牧者17 小时前
K8S网络策略全解-NetworkPolicy与GlobalNetworkPolicy实战
网络·容器·kubernetes·cni
宇明一不急17 小时前
k8s 常用的正则表达式
云原生·容器·kubernetes
云游牧者18 小时前
K8S-HPA自动扩缩容实战指南
云原生·容器·kubernetes·hpa·弹性伸缩·hpv