以下是 Finalizers 的工作原理和使用方式:
工作原理:
1. 添加 Finalizer: 当你创建一个 Kubernetes 对象时,你可以为其添加 Finalizer。这通常在控制器或操作符中完成,以确保对象的清理逻辑被执行。
apiVersion: v1
kind: MyResource
metadata:
name: myresource-1
finalizers:
- myfinalizer.example.com
2. 删除对象: 当你尝试删除带有 Finalizer 的对象时,Kubernetes 不会立即删除它。相反,它会在删除前检查是否有 Finalizer。
3. 执行清理逻辑: 如果对象上存在 Finalizer,Kubernetes 将等待在执行删除操作之前运行 Finalizer 中定义的清理逻辑。这可以包括释放资源、通知其他系统、或执行其他必要的操作。
4. 移除 Finalizer: 一旦清理逻辑完成,控制器或操作符将从对象的 finalizers 字段中移除相应的 Finalizer。这样,对象就可以被删除了。
示例:
以下是一个简单的示例,演示如何在一个自定义资源定义 (CRD) 中使用 Finalizer:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
names:
kind: MyResource
plural: myresources
scope: Namespaced
versions:
- name: v1
served: true
storage: true
---
apiVersion: example.com/v1
kind: MyResource
metadata:
name: myresource-1
finalizers:
- myfinalizer.example.com
在这个示例中,myresource-1 对象有一个名为 myfinalizer.example.com 的 Finalizer。当删除这个对象时,Kubernetes 将等待执行清理逻辑,然后删除对象。
Finalizers 提供了一种确保对象在被删除之前执行特定操作的机制,这对于处理与对象关联的外部资源或异步任务非常有用。
转载请注明出处:http://www.zyzy.cn/article/detail/9698/Kubernetes