在非阻塞协调循环中重新排队 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 routine 可能会返回 return ctrl.Result{Requeue: true}, nil 或 return ctrl.Result{RequeueAfter: someTime}, nil


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


拉丁的传说
浏览 90回答 1
1回答

子衿沉夜

我认为更好的方法是使用并发协调,允许处理其他请求,而单个协调请求处理起来很慢。这样协调请求队列就不会被阻塞,空闲的 go 例程相当便宜,所以它不应该对你的性能产生太大影响。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go