基于fabric8.io实现K8s长时间运行自定义资源控制器咨询
自定义资源(CR)状态管理与重试逻辑实现参考
一、CR状态设置(PENDING)实现
- 在CR的Java实体类中定义状态结构,比如新增
Status内部类,包含phase枚举(可选值:PENDING、READY、FAILED),并在类上添加@Status注解(fabric8.io库要求识别状态字段)。 - 处理CR创建事件时,先实例化CR的状态对象,将
phase设为PENDING,然后调用mixedOperation.updateStatus(updatedCr)将状态更新提交至K8s API Server。
二、重试与异步集群状态检查逻辑
方案1:基于fabric8.io Reconciler框架(推荐)
- 替换直接Watch逻辑为Reconciler模式:fabric8的Reconciler原生支持周期性调和,适配长时间异步操作场景。
- 实现
Reconciler接口,在reconcile方法中处理核心逻辑:- 首次调和:触发CockroachLabs API创建集群,更新CR状态为
PENDING。 - 后续调和(通过
@ReconciliationInterval配置间隔,例如30秒):调用CockroachLabs API查询集群状态。- 若集群就绪:更新CR状态为
READY,结束调和周期。 - 若仍在创建:保持
PENDING状态,等待下一次调和。 - 若创建失败:设置CR状态为
FAILED并记录错误信息,结束调和。
- 若集群就绪:更新CR状态为
- 首次调和:触发CockroachLabs API创建集群,更新CR状态为
- 实现
方案2:基于Watch+定时任务(兼容现有MixedOperation Watch)
- 保留现有MixedOperation Watch的基础上,结合
ScheduledExecutorService实现定时检查:- 收到CR创建事件后,为该CR创建一个定时任务,每隔固定时间调用CockroachLabs API检查状态。
- 每次检查后根据结果更新CR状态:就绪则标记为
READY并取消任务;失败则标记为FAILED并取消任务;未就绪则继续执行任务。 - 监听CR删除事件时,同步取消对应定时任务,避免资源泄漏。
三、fabric8.io核心参考方向
- 聚焦Custom Resource Status Management章节,掌握状态字段的定义、注解使用及更新API的调用方式。
- 学习Reconciler Framework文档,理解调和周期、状态流转的实现逻辑。
- 参考官方提供的Custom Resource示例项目,其中包含状态更新、异步调和的完整代码示例。
内容的提问来源于stack exchange,提问作者Micke
相关产品推荐
相关产品推荐

