ZBLOG

k8s 资源 finalizers 案例

Kubernetes(简称为k8s)的资源 finalizers 是一种机制,用于控制资源对象在删除时的处理逻辑。当一个资源对象被标记为删除时,finalizer 会确保在实际删除之前执行一些特定的操作。

以下是一个使用 finalizers 的示例:

  1. 创建一个名为myresource.yaml的资源定义文件,内容如下:
apiVersion: v1
kind: MyResource
metadata:
  name: my-resource
finalizers:
- my-finalizer.example.com
  1. 应用该资源定义文件创建 Kubernetes 资源对象:
$ kubectl apply -f myresource.yaml
  1. 删除该资源对象:
$ kubectl delete myresource my-resource
  1. 在删除过程中,Kubernetes 将会调用与 finalizer 关联的处理逻辑。可以使用自定义控制器或 Webhook 来实现这个逻辑。例如,在 Go 编写的自定义控制器中可以通过编写一个 Finalize 方法来执行所需的操作:
func (c *MyResourceController) Finalize(obj *v1.MyResource) error {
    // 执行必要的清理操作

    // 删除 finalizer 标记
    obj.Finalizers = removeString(obj.Finalizers, "my-finalizer.example.com")

    // 更新资源对象状态和元数据,并提交到 API Server
    _, err := c.clientset.ExampleV1().MyResources(obj.Namespace).Update(context.TODO(), obj, metav1.UpdateOptions{})
    if err != nil {
        return err
    }

    return nil
}

以上示例中,my-finalizer.example.com 是一个自定义的 finalizer 标识符。在删除资源对象时,Kubernetes 会调用控制器的 Finalize 方法来执行清理操作,并在完成后将该标识符从 finalizers 列表中移除。

通过使用 finalizers,您可以确保在删除资源对象之前执行必要的清理操作,以确保系统状态的一致性和稳定性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=7190

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?