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
相关推荐
陈陈CHENCHEN3 分钟前
【Kubernetes】多集群管理实践 - kubeconfig
kubernetes
hwj运维之路1 小时前
超详细ubuntu22.04部署k8s1.28高可用(二)【结合ingress实现业务高可用】
运维·云原生·容器·kubernetes
切糕师学AI1 小时前
.NET Core Web 中的健康检查端点(Health Check Endpoint)
前端·kubernetes·.netcore
Cyber4K5 小时前
【Kubernetes专项】K8s 控制器 DaemonSet 从入门到企业实战应用
云原生·容器·kubernetes
切糕师学AI5 小时前
RKE(Rancher Kubernetes Engine) 是什么?
云原生·容器·kubernetes·rancher
龙飞056 小时前
Kubernetes 排障实战:PVC 一直 Pending 的原因与解决方案
运维·学习·云原生·容器·kubernetes
岁岁种桃花儿7 小时前
流量入口Nginx动态发现K8s Ingress Controller实操指南
nginx·架构·kubernetes
冗量7 小时前
Kubernetes (K8s) 基础知识、部署与运维指南
运维·容器·kubernetes
青衫客367 小时前
从 TLS 到 Kubernetes PKI:一条证书链如何支撑整个集群安全(问题合集)
容器·kubernetes·k8s·tls
塔克拉玛攻城狮1 天前
最新!银河麒麟v11 kubeadm部署k8s v1.35.0高可用集群
kubernetes·银河麒麟