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
相关推荐
青衫客362 小时前
浅谈Kubernetes在systemd cgroup模式下的Slice/Scope组织结构
云原生·容器·kubernetes
王九思2 小时前
Podman 介绍
docker·云原生·kubernetes·podman
Gold Steps.6 小时前
K8S基于 Argo Rollouts 的高级版本发布实践
云原生·容器·kubernetes
孤岛悬城7 小时前
61 K8s之Pod控制器与配置资源管理
云原生·容器·kubernetes
噎住佩奇7 小时前
kubeadm方式部署单节点k8s
云原生·容器·kubernetes
十月南城8 小时前
Kubernetes入门地图——核心对象、网络与存储的抽象关系与心智模型
网络·容器·kubernetes
Java程序员威哥8 小时前
Java应用容器化最佳实践:Docker镜像构建+K8s滚动更新(生产级完整模板+避坑指南)
java·开发语言·后端·python·docker·kubernetes·c#
不做码农好多年,该何去何从。8 小时前
云原生k8s(一)
云原生·容器·kubernetes
Y.O.U..10 小时前
Kubernetes-PV(PersistentVolume)和PVC(PersistentVolumeClaim)
云原生·容器·kubernetes
Curvatureflight10 小时前
Kubernetes完全指南:从集群搭建到生产部署
云原生·容器·kubernetes