Kubernetes删除ns实现方式(namespace)

 更新时间:2026年01月28日 14:51:49   作者:潇洒哥Kahn  
文章介绍了在Kubernetes中删除无法正常删除的命名空间(namespace)的几种方法,首先,通过查看和修改命名空间的JSON文件来删除`finalizers`,然后使用`kubectl proxy`命令来绕过Kubernetes的安全机制,最终成功删除了命名空间

一、前言

删除某个应用或模块的时候,可能会出现命名空间的状态一直处于Terminating状态,无论是重启k8s还是重启所有服务器都没卵用。

k8s遇到有无法删除的ns(namespace)命名空间的时候,可以尝试几种删除方式

二、删除命名空间namespace

1、先查看k8s

[root@k8s-master1 ~]# kubectl get ns
NAME                          STATUS        AGE
cattle-impersonation-system   Terminating   2d14h
cattle-system                 Terminating   2d14h
default                       Active        13d
ingress-nginx                 Terminating   4d13h
kube-node-lease               Active        13d
kube-public                   Active        13d
kube-system                   Active        13d
monitoring                    Active        12d

2、可以先逐步尝试以下几种删除kubernetes命名空间namespace的方法

kubectl delete ns <要删除的命名空间>
kubectl delete ns <要删除的命名空间> --froce
kubectl delete ns <要删除的命名空间> --force --grace-period=0

3、如果上面的3中方法依然无法删除kubernetes命名空间,则可以再尝试使用接口去删除

三、使用接口的方式删除kubernetes命名空间

1、获取命名空间的json文件,下面以删除ingress-nginx这个命名空间为例。

kubectl get ns ingress-nginx -o json > delete-ns-ingress-nginx.json

如得到的源文件:

{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "annotations": {
            "cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2023-06-28T22:44:35Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2023-06-28T22:44:41Z\"}]}",
            "field.cattle.io/projectId": "c-m-x64sl2w6:p-4845x",
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/instance\":\"ingress-nginx\",\"app.kubernetes.io/name\":\"ingress-nginx\"},\"name\":\"ingress-nginx\"}}\n",
            "lifecycle.cattle.io/create.namespace-auth": "true",
            "management.cattle.io/no-default-sa-token": "true"
        },
        "creationTimestamp": "2023-06-26T15:26:03Z",
        "deletionGracePeriodSeconds": 0,
        "deletionTimestamp": "2023-06-29T15:06:06Z",
        "finalizers": [
            "controller.cattle.io/namespace-auth"            #删除这一行,并且保持finalizers数组为空,即[]
        ],
        "labels": {
            "app.kubernetes.io/instance": "ingress-nginx",
            "app.kubernetes.io/name": "ingress-nginx",
            "kubernetes.io/metadata.name": "ingress-nginx"
        },
        "name": "ingress-nginx",
        "resourceVersion": "147165",
        "uid": "7dc28b36-5960-4237-b1b5-41b8d6e20f7c"
    },
    "spec": {},
    "status": {
        "conditions": [
            {
                "lastTransitionTime": "2023-06-29T15:06:14Z",
                "message": "All resources successfully discovered",
                "reason": "ResourcesDiscovered",
                "status": "False",
                "type": "NamespaceDeletionDiscoveryFailure"
            },
            {
                "lastTransitionTime": "2023-06-29T15:06:14Z",
                "message": "All legacy kube types successfully parsed",
                "reason": "ParsedGroupVersions",
                "status": "False",
                "type": "NamespaceDeletionGroupVersionParsingFailure"
            },
            {
                "lastTransitionTime": "2023-06-29T15:06:14Z",
                "message": "All content successfully deleted, may be waiting on finalization",
                "reason": "ContentDeleted",
                "status": "False",
                "type": "NamespaceDeletionContentFailure"
            },
            {
                "lastTransitionTime": "2023-06-29T15:08:52Z",
                "message": "All content successfully removed",
                "reason": "ContentRemoved",
                "status": "False",
                "type": "NamespaceContentRemaining"
            },
            {
                "lastTransitionTime": "2023-06-29T15:06:14Z",
                "message": "All content-preserving finalizers finished",
                "reason": "ContentHasNoFinalizers",
                "status": "False",
                "type": "NamespaceFinalizersRemaining"
            }
        ],
        "phase": "Terminating"
    }
}

2、搜索json文件中finalizers,将其数组置空。如本次没删之前

 

 3、在k8s的master节点上开启proxy

kubectl proxy

 注意看端口是8001

4、再开一个k8s-master节点的终端以便我们执行命令

curl -k -H "Content-Type: application/json" -X PUT --data-binary @delete-ns-ingress-nginx.json http://127.0.0.1:8001/api/v1/namespaces/ingress-nginx/finalize

注:delete-ns-ingress-nginx.json 是刚才你导出并修改后的json文件,注意执行命令的时候前面有@字符。

http://127.0.0.1:8001/api/v1/namespaces/ingress-nginx/finalize 中的 ingress-nginx 换成你要删除的命名空间字符串

执行完命令后,又返回一堆的字符串,不用管它。

5、再次查看所有Kubernetes的命名空间看目标ns是否被删除了

可以看到本次要删除的命名空间ingress-nginx已经被彻底干掉了。

总结

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

相关文章

  • Kubernetes如何限制不同团队只能访问各自namespace实现

    Kubernetes如何限制不同团队只能访问各自namespace实现

    这篇文章主要为大家介绍了Kubernetes如何限制不同团队只能访问各自namespace实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • IoT边缘集群Kubernetes Events告警通知实现示例

    IoT边缘集群Kubernetes Events告警通知实现示例

    这篇文章主要为大家介绍了IoT边缘集群Kubernetes Events告警通知实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 详解kubernetes pod的编排和生命周期

    详解kubernetes pod的编排和生命周期

    这篇文章主要介绍了kubernetes pod的编排和生命周期的相关资料,帮助大家更好的理解和学习使用K8S,感兴趣的朋友可以了解下
    2021-04-04
  • k8s入门实战deployment使用详解

    k8s入门实战deployment使用详解

    这篇文章主要为大家介绍了k8s入门实战deployment使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • k8s pod始终处于pending状态的解决方案

    k8s pod始终处于pending状态的解决方案

    新K8s部署后服务重启导致dashboard无法访问,所有Pod处于Pending状态,原因分析显示,因节点污点引发调度失败,删除污点后问题解决,总结Pending原因分为三类:调度问题(污点、资源不足)、镜像问题(拉取失败)、依赖性问题(卷/Secret/ConfigMap缺失)
    2025-08-08
  • K8s实战教程之容器和 Pods资源分配问题

    K8s实战教程之容器和 Pods资源分配问题

    这篇文章主要介绍了K8s实战教程之容器和 Pods资源分配,本篇文章通过配置集群中运行的容器的 CPU 请求和限制,你可以有效利用集群上可用的 CPU 资源,通过将 Pod CPU 请求保持在较低水平,可以使 Pod 更有机会被调度,需要的朋友可以参考下
    2022-07-07
  • kubernetes需要默认的serviceaccount的原因解析

    kubernetes需要默认的serviceaccount的原因解析

    这篇文章主要介绍了kubernetes为何需要默认的serviceaccount,ServiceAccount 是 Kubernetes 中的一种重要概念,它的实际使用场景包括很多,本文给大家讲解的非常详细,需要的朋友可以参考下
    2023-04-04
  • Kubernetes 权限管理认证鉴权详解

    Kubernetes 权限管理认证鉴权详解

    这篇文章主要为大家介绍了Kubernetes 权限管理认证鉴权详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 再分享6个可无限激活阿里云盘邀请码,不信你不能激活阿里云盘

    再分享6个可无限激活阿里云盘邀请码,不信你不能激活阿里云盘

    这篇文章主要分享6个可无限激活的阿里云盘邀请码,不信你不能激活阿里云盘,需要的朋友可以参考下
    2020-11-11
  • 不同k8s集群间服务如何相互访问实现详解

    不同k8s集群间服务如何相互访问实现详解

    这篇文章主要为大家介绍了不同k8s集群间服务如何相互访问实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论