核心场景:
return ctrl.Result{RequeueAfter: 10 * time.Minute}, nil
LastTransitionTime
字段避免重复执行time.Until(nextRun)
实现动态间隔(如Cron表达式解析)if !shouldRun {
return ctrl.Result{RequeueAfter: waitDuration}, nil
}
代码示例:
return ctrl.Result{Requeue: true}, nil // 立即重入协调队列
典型场景:
Pending
->Running
过渡阶段时持续检查终止条件:
return ctrl.Result{}, nil // 仅依赖Watch事件触发
使用策略:
paused
时暂停协调循环错误分类处理:
return ctrl.Result{}, fmt.Errorf("connection refused") // 默认指数退避重试
分层策略:
错误类型 | 处理方案 | 重试逻辑 |
---|---|---|
临时性错误(网络抖动) | 记录日志并返回错误 | 控制器默认的指数退避 |
持久性错误(配置错误) | 更新Status.Conditions字段 | 停止重试,等待人工干预 |
资源冲突(版本过期) | 获取最新资源版本后重试 | 立即重试(Requeue: true) |
关键约束:
// 根据资源名称哈希分片
if hash(resource.Name)%shards != currentShard {
return ctrl.Result{}, nil
}
模式 | 触发方式 | 适用场景 | 资源消耗 |
---|---|---|---|
定时轮询 | 固定时间间隔 | 定期维护任务 | 中 |
事件驱动 | Watch机制 | 敏感状态变更 | 低 |
混合模式 | 事件+条件重试 | 复杂状态机业务 | 高 |
操作建议:
metrics.RecordRequeueCount(reason, duration) // 记录重试原因和间隔
ctrl.Result
语义一致性通过灵活组合ctrl.Result
的返回策略,可实现从简单定时任务到复杂状态机的全场景覆盖,同时保障集群稳定性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。