如何修复 删除Kubernetes名称空间时卡在终止状态

如何修复 删除Kubernetes名称空间时卡在终止状态

最近重新部署了k8s环境, 之前用的是内置etcd cluster。现在需要转换成外部etc cluster方案,提高系统的稳定性, 尤其是master节点可以部署多台,提升整体系统的搞可用性。

首先部署五个节点的etcd cluster, 然后部署两台k8s 的master节点, 然后添加worker节点。一切都看起来很棒,并且部署了好几个一应用都很棒,工作正常。直到部署storage os作为k8s的存贮系统系统时,麻烦出现了。

有几个storage os 的pod死活无法启动, 整个存贮系统系统就是起不来。几乎在整整一天的时间, 我增加部署、删除部署、移动节点、终止节点,修改配置等等,整个弄乱了。头大, 最终放弃,决定第二天再来搞。

第二天,大雨滂沱,空气里弥漫着潮湿的味道,走在雨中,就算打着伞,衣服和裤子都淋湿了,运动鞋变成了水鞋。我决定,删了整个 storage os 部署。重新来一遍。

kubectl delete -f comeonk8s/storage/

一切似乎都正常,毕竟破坏比建设容易多了。然鹅,还是太naive,有一个 storage os 的 name space “storageos-operator”, 过去一个小时了还在,一直处于“Terminating” 状态,又等了半个小时,还是“Terminating” 状态。事情复杂啦。沮丧之余转向谷歌,开始寻找是否有人有同样的问题。查找了一通,有相当多的类似情况,尝试了大多数都没有效果,直到找到github这个问题:https://github.com/kubernetes/kubernetes/issues/60807, 尝试上面的各个方法,没有解决。最后的最后,找到了这篇文章How to fix — Kubernetes namespace deleting stuck in Terminating state。 按照步骤做下来,解决了。方法如下:

第一步 将name space 作为JSON转储到一个文件中

kubectl get namespace storageos-operator -o json > so.json

vi so.json

       "name": "storageos-operator",
        "resourceVersion": "183682",
        "selfLink": "/api/v1/namespaces/storageos-operator",
        "uid": "8f62002c-044a-4b07-968f-02cbfe821901"
    },
    "spec": {
        "finalizers": [
           "kubernetes"
        ]
    },
    "status": {
        "conditions": [
            {

从 “finalizers”: [
“kubernetes”
]

删除 “kubernetes”

        "name": "storageos-operator",
        "resourceVersion": "183682",
        "selfLink": "napi/v1/naespaces/storageos-operator",
        "uid": "8f62002c-044a-4b07-968f-02cbfe821901"
    },
    "spec": {
        "finalizers": [
        ]
    },
    "status": {
        "conditions": [
            {

第二步 执行清理命令

现在有了这个修改后的json文件,可以指示k8s集群删除那个烦人的名称空间storageos-operator 啦。

kubectl replace --raw "/api/v1/namespaces/storageos-operator/finalize" -f ./so.json

记得替换你的k8s cluster自己的名称空间:/api/v1/namespaces/<your_namespace_here>/finalize

运行该命令后,storageos-operator名称空间现在终于删除成功。然后重新检查了好几遍 comeonk8s/storageos/ 下相关的文件。

kubectl apply -f comeonk8s/storageos/

一切正常!!

k8s其它 resource

这里要注意的关键是您要修改的资源,在我的例子中,它是用于名称空间的。猜测 pods, deployments, services,等等。应该也可以用同样的方法, 也可以删除 这些处于“Terminating”状态的资源

szit0755

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想删除一个名称空间,但是它的状态一直显示为Terminating,那么可以尝试以下步骤: 1. 等待一段时间。删除一个名称空间可能需要一些时间,特别是当该名称空间中有很多资源需要删除时。你可以等待一段时间,直到名称空间状态变成了"NotFound",表示名称空间已经被删除。 2. 强制删除名称空间。如果名称空间一直处于Terminating状态,你可以尝试使用下面的命令来强制删除它: kubectl delete namespace <namespace-name> --force --grace-period=0 这个命令会强制删除名称空间,即使它还没有完全停止。 3. 删除名称空间的Finalizers。如果名称空间一直处于Terminating状态,并且你无法使用kubectl delete命令删除它,那么你可以尝试删除名称空间的Finalizers。Finalizers是一种用于确保在删除资源之前执行某些操作的机制。你可以使用下面的命令来删除名称空间的Finalizers: kubectl get namespace <namespace-name> -o json > namespace.json 然后编辑namespace.json文件,找到spec.finalizers字段,将其删除并保存文件。 最后使用下面的命令将修改后的json文件应用到Kubernetes中: kubectl replace --raw "/api/v1/namespaces/<namespace-name>/finalize" -f ./namespace.json 这个命令会删除名称空间的Finalizers,从而允许你删除名称空间。 注意:在进行任何删除操作之前,请确保你已经备份了相关的数据。如果你不确定如何操作,请咨询Kubernetes管理员或者开发人员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值