实现Kubernetes资源的自定义终结器

实现Kubernetes资源的自定义终结器,kubernetes,Kubernetes,如果我正在实现我的Kubernetes CRD,则似乎要实现自定义终结器:代码段非常简单,因为对象上的第一个删除请求为元数据.deletionTimestamp字段设置了一个值,而不是删除触发监视对象的自定义控制器来执行它的任何终结器的对象把手 但是,让我们想象一下,我想为默认的Kubernetes资源设置一个自定义终结器,比如命名空间、部署或其他:这可能吗?好的,以命名空间为例进行了一点测试 #k创建我的命名空间 创建名称空间/我的名称空间 #k编辑我的命名空间 (…添加.metadata.f

如果我正在实现我的Kubernetes CRD,则似乎要实现自定义终结器:代码段非常简单,因为对象上的第一个删除请求为
元数据.deletionTimestamp
字段设置了一个值,而不是删除触发监视对象的自定义控制器来执行它的任何终结器的对象把手


但是,让我们想象一下,我想为默认的Kubernetes资源设置一个自定义终结器,比如命名空间、部署或其他:这可能吗?

好的,以
命名空间
为例进行了一点测试

#k创建我的命名空间
创建名称空间/我的名称空间
#k编辑我的命名空间
(…添加.metadata.finalizers列表)
#k获取我的命名空间-o yaml
版本:v1
种类:名称空间
元数据:
creationTimestamp:“2019-09-08T06:50:25Z”
定稿人:
-许诺/做某事
名称:我的命名空间
资源版本:“1131”
selfLink:/api/v1/namespace/my namespace
uid:75b5bae8-1d5b-44c6-86bc-E63231AABFD
规格:
定稿人:
-库伯内特斯
地位:
阶段:活动
#k删除我的命名空间
名称空间“我的名称空间”已删除
如果我打开另一个终端,我可以看到资源处于
终止
状态

#k获取我的命名空间
姓名身份年龄
我的命名空间终止6m8s
因此,实际上资源被标记为删除,因为我得到了一个
deletionTimestamp

k get ns my namespace-o jsonpath='{.metadata.deletionTimestamp}'
2019-09-08T06:58:07
要完成删除,我只需要一个简单的(使用Kubernetes Go客户端)来获取对象的更改(或者一个简单的客户端)来获取事件,在异步模式下处理我的业务逻辑(如预删除钩子)并删除我的完全限定的终结器……为了简单起见,我用
kubectl
测试了删除它,结果成功了


仅供参考,终结器必须是完全合格的,因为有一个过程,所以它必须根据模式
prometering/无论你想要什么
,注意第一部分必须遵守
DNS-1123
规范。

是的,这是可能的。你有没有尝试过一些特定的不起作用的东西与kubernetes中终结器验证相关的特定代码: