J.C*_*age 4 go kubernetes kubernetes-custom-resources
我们有一个 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
}
Run Code Online (Sandbox Code Playgroud)
当自定义事件太多时,我们已经确定了协调逻辑中可能存在的瓶颈。因此,代码已更新为具有非阻塞协调逻辑。例子:
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
}
Run Code Online (Sandbox Code Playgroud)
然而,有些地方非阻塞 go 例程可能会返回
return ctrl.Result{Requeue: true}, nil
或
return ctrl.Result{RequeueAfter: someTime}, nil
在这种情况下,我们如何将此类事件重新排队到协调循环中,因为返回不会返回到调用者 Reconcile()
我认为更好的方法是使用并发协调,允许处理其他请求,而单个协调请求处理速度很慢。这样,协调请求队列就不会被阻塞,并且空闲的 go 例程相当便宜,因此它不会对您的性能产生太大影响。
查看:
MaxConcurrentReconcileshttps : //pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/controllercontroller-runtime
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |