如果我正在实现我的Kubernetes CRD,似乎很容易实现自定义finalizers:代码片段非常简单,因为对对象的第一个删除请求会设置metadata.deletionTimestamp
字段的值,而不是删除触发自定义控制器监视对象以执行任何处理finalizers的对象。
然而,假设我想为默认的Kubernetes资源(如Namespace、Deployment或其他)设置自定义finalizer:这是否可能?
如果我正在实现我的Kubernetes CRD,似乎很容易实现自定义finalizers:代码片段非常简单,因为对对象的第一个删除请求会设置metadata.deletionTimestamp
字段的值,而不是删除触发自定义控制器监视对象以执行任何处理finalizers的对象。
然而,假设我想为默认的Kubernetes资源(如Namespace、Deployment或其他)设置自定义finalizer:这是否可能?
好的,以命名空间
为例进行了一些测试。
# k create ns my-namespace
namespace/my-namespace created
# k edit ns my-namespace
(... adding the .metadata.finalizers list)
# k get ns my-namespace -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2019-09-08T06:50:25Z"
finalizers:
- prometherion/do-something
name: my-namespace
resourceVersion: "1131"
selfLink: /api/v1/namespaces/my-namespace
uid: 75b5bae8-1d5b-44c6-86bc-e632341aabfd
spec:
finalizers:
- kubernetes
status:
phase: Active
# k delete ns my-namespace
namespace "my-namespace" deleted
# k get ns my-namespace
NAME STATUS AGE
my-namespace Terminating 6m8s
所以,实际上,由于我获得了一个deletionTimestamp
,这个资源被标记为要删除:
k get ns my-namespace -o jsonpath='{.metadata.deletionTimestamp}'
2019-09-08T06:58:07
kubectl
测试删除它并且它起作用了。
仅供参考,由于有一验证过程,因此必须完全限定Finalizer,因此必须根据模式prometherion / whatever_you_want
声明它,注意第一部分必须符合DNS-1123
规范。