【kubernetes】记录一次namespace 处于Terminating状态的处理方法

记录一次k8s namespace 处于Terminating状态的处理方法




问题背景

使用k8s部署rook-ceph后,想要删除集群重新部署的,结果方法不对,导致rook-ceph命名空间状态一直处于Terminating,使用kubectl get all -n rook-ceph命令显示已经没有资源,但仍无法删除。

尝试过的方法

  1. 删除时带上–force --grace-period=0参数 ,无法删除;
    kubectl delete namespace rook-ceph --force --grace-period=0
  2. 使用kubectl edit namespaces rook-ceph将finalizer的value删除,显示命名空间成功被编辑,但是kubectl get ns看到rook-ceph命名空间仍然存在,且状态依旧是Terminating;
    参考文章:https://segmentfault.com/a/1190000016924414

最终成功的方法

NAMESPACE=rook-ceph
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize

将上面的代码执行完成后,再使用kubectl get ns命令,发现rook-ceph命名空间已经没了,最后别忘了把后台运行的kubectl proxy进程kill掉。
参考

### 如何使用 `kubectl` 删除 Deployment 当需要移除由 Kubernetes Deployment 控制器管理的应用部署时,可以利用 `kubectl delete` 命令来执行这一操作。对于想要删除名为 `web` 的 StatefulSet 及其关联的 Pod 资源的情况,省略 `--cascade=false` 参数将会触发默认行为——级联删除模式,在这种情况下不仅会终止 StatefulSet 自身还会清除它所创建的所有 Pod 实例[^1]。 然而,如果目标对象是一个 Deployment 类型资源而非 StatefulSet 或者 DaemonSet,那么应当采用如下所示的方式来进行删除: ```bash kubectl delete deployment <deployment-name> ``` 此命令将停止 Deployment 并清理与其有关的一切工作负载(比如 Pods)。值得注意的是,一旦执行该指令,默认设置下也会实行级联策略,确保相关组件被一同处理掉。 另外,假设有某些特定场景下的 Pod 处于异常状态而难以正常结束生命周期,例如长时间停留在 Terminating 状态不变化,这时可采取强制手段立即中断这些实例的生命期并将其从集群中彻底抹去: ```bash kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0 ``` 这条语句能够绕过常规等待周期直接摧毁指定命名空间内的 Pod 对象,并且不会给予任何宽限期让应用程序优雅关闭[^2]。 需要注意的是以上提及的操作指南适用于 Kubernetes 版本 v1.14.0 所描述的功能特性集合内[^3];不过通常来说,除非遇到版本间存在显著差异的情形,否则大多数基础功能在后续发行版里依然保持兼容性和一致性。 最后提醒一点,虽然这里讨论的内容主要围绕着如何有效地管理和处置 Deployments 层面的问题展开论述,但在实际生产环境中还应该考虑更多因素,如服务发现机制、持久化存储配置等方面的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值