NameSpaces状态一直为Terminating

木木2年前技术文章1191

问题描述

删除ingress-nginx后发现ingress-nginx的命名空间一直为销毁中,大致查看了下发现命名空间中已经没有其他资源。

https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090942358.png

https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090942523.png

该状态已经持续了十几个小时

强制删除命名空间

```Plain Text kubectl delete --force ns ingress-nginx

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090945022.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090945022.png)

可以发现强制删除ns也是不行的,执行会在这里卡很久

# 编辑删除

强制删除也无效时我们可以进行编辑删除

Plain Text kubectl edit ns ingress-nginx

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202209291627121.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202209291627121.png)

将其中finalizers字段设置为`[]`

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090952947.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090952947.png)

保存后再次进行删除

Plain Text kubectl delete ns --force ingress-nginx

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090958532.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112090958532.png)

这里删除报错,先不去深究原因,试一下另一种删除方式

# 调用API进行删除

首先将该namespces的配置导出

Plain Text kubectl get ns ingress-nginx -o json > tmp.json

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091000992.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091000992.png)

编辑导出的配置文件

Plain Text vim tmp.json

删除`spec`和`status`的部分

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091002397.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091002397.png)

删除后如下

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091003555.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091003555.png)

启动代理

Plain Text kubectl proxy

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091005131.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091005131.png)

此时代理启动在本机的8001端口

调用api进行删除

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

![https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091010754.png](https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091010754.png)

再次查看namespaces

Plain Text kubectl get ns

```

https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091011761.png

依旧没有被删除

研究下编辑删除中的finalizers字段

Finalizers

Finalizers 字段属于 Kubernetes GC 垃圾收集器,是一种删除拦截机制,能够让控制器实现异步的删除前(Pre-delete)回调。其存在于任何一个资源对象的 Meta[1] 中,在 k8s 源码中声明为 []string,该 Slice 的内容为需要执行的拦截器名称。

对带有 Finalizer 的对象的第一个删除请求会为其 metadata.deletionTimestamp 设置一个值,但不会真的删除对象。一旦此值被设置,finalizers 列表中的值就只能被移除。

metadata.deletionTimestamp 字段被设置时,负责监测该对象的各个控制器会通过轮询对该对象的更新请求来执行它们所要处理的所有 Finalizer。当所有 Finalizer 都被执行过,资源被删除。

metadata.deletionGracePeriodSeconds 的取值控制对更新的轮询周期。

每个控制器要负责将其 Finalizer 从列表中去除。

每执行完一个就从 finalizers 中移除一个,直到 finalizers 为空,之后其宿主资源才会被真正的删除。


这里我们可以看到需要finalizers为空时,才会删除资源。而我们ns的列表不为空,所以无法被真正删除。再次查看下ns的配置。

https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202112091021101.png

可以看到是由于rancher导致的,此时我们删除rancher所在命名空间(之前已经删除过rancher),发现同样问题。

编辑ns的配置文件

https://teamo-md.oss-cn-shanghai.aliyuncs.com/img/202209291627121.png

删除finalizers字段的内容后,namespaces被删除。


相关文章

SQL Server优化入门系列(二)—— 等待事件

SQL Server优化入门系列(二)—— 等待事件

在上一篇文章中(SQL Server优化入门系列(一)——快速定位阻塞SQL),我们介绍了如何快速定位SQL Server中当前正在执行的SQL,以及被阻塞的SQL。这里,我们将介绍如何通过等待事件来...

Spark优化之配置参数

Spark优化之配置参数

一、资源参数优化所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各 个使用资源的地方,通过调节各种参数,来优化资源使用的效率,从而提升Spark作业的执行性能。以下参数就是Spark中...

HDFS元数据损坏恢复方法

HDFS元数据损坏恢复方法

HDFS JournalNode 编辑目录(dfs.journalnode.edits.dir)下数据损坏(单节点损坏或所有节点数据损坏),如何恢复 HDFS?单节点损坏a)  &...

 大数据集群监控配置操作指导(三)Flink监控开启jmx

大数据集群监控配置操作指导(三)Flink监控开启jmx

官网的关于 flnk+prometheus的文章https://flink.apache.org/features/2019/03/11/prometheus-monitoring.htmlprome...

MySQL运维实战之备份和恢复(8.4)xtrabackup恢复全量备份

恢复全量备份恢复全量备份大致可以分成以下几步:解压备份文件、prepare备份文件、将数据copy到目标实例相关目录、启动数据库实例。解压文件如果备份时使用了xbstream,需要先解压备份文件。我们...

MySQL 8.0 不可见索引使用

一、具体信息1、在提供 SQL 优化意见的时候包括了两个冗余索引的内容,具体内容如下:查看慢 SQL 的时候发现 database 库 table 表中存在冗余索引,具体冗余索引情况如下:KEY `k...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。