登录
首页 >  Golang >  Go问答

重新排列 Kubernetes 事件以在非阻塞的协调循环中进行

来源:stackoverflow

时间:2024-02-16 17:45:21 291浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《重新排列 Kubernetes 事件以在非阻塞的协调循环中进行》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我们有一个 kubernetes 集群,其中会触发协调以响应自定义事件。 使用以下格式在 golang 中实现:

type reconciler struct {}

func (reconciler) reconcile(ctx context.context, o reconcile.request) (reconcile.result, error) {
    // implement business logic of reading and writing objects here
    return reconcile.result{}, nil
}

我们已经发现,当自定义事件太多时,协调逻辑中可能存在瓶颈。因此,代码已更新为具有非阻塞协调逻辑。 示例:

type reconciler struct {}

func (reconciler) Reconcile(ctx context.Context, o reconcile.Request) (reconcile.Result, error) {
    go func() {
        // Implement business logic of reading and writing objects here
    }()
    return reconcile.Result{}, nil
}

但是,有些地方非阻塞 go 例程可能会返回 return ctrl.result{重新排队: true}, nil 或者 return ctrl.result{requeueafter: sometime}, nil

在这种情况下,我们如何将此类事件重新排队到协调循环,因为返回不会返回到调用者 reconcile()


正确答案


我认为更好的方法是使用并发协调,允许处理其他请求,而单个协调请求处理速度很慢。这样,协调请求队列就不会被阻塞,并且空闲的 go 例程相当便宜,因此它不会对您的性能产​​生太大影响。

查看 controller-runtime 中的 MaxConcurrentReconcileshttps://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/controller

理论要掌握,实操不能落!以上关于《重新排列 Kubernetes 事件以在非阻塞的协调循环中进行》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>