在 Kubernetes 中,Finalizers(终结器)是一种用于控制对象删除过程的机制。Finalizers 允许在删除对象之前执行一些清理或其他定制的操作。这是在处理一些持久性资源时特别有用,例如清理与对象关联的外部资源或执行异步操作。

以下是 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