登录
首页 >  Golang >  Go问答

刷新自定义 Kubernetes 控制器的状态的 Golang 实现

来源:stackoverflow

时间:2024-03-01 14:45:23 334浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《刷新自定义 Kubernetes 控制器的状态的 Golang 实现》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我正在构建一个 go kubernetes 运算符。我使用 kubebuilder 来创建它。 我想在 crd 状态中存储一些内部详细信息。我已经尝试过:

  • 更新整个资源:
if err = r.client.update(ctx, upcrd); err != nil {
    return ctrl.result{}, client.ignorenotfound(err)
}
  • 并且仅更新状态:
if err = r.status().update(ctx, upcrd); err != nil {
    return reconcile.result{}, client.ignorenotfound(err)
}

状态结构定义如下:

type HAAuditStatus struct {
    ChaosStrategyCron  cron.EntryID       `json:"chaosStrategyCron,omitempty"`
    TestStatus         TestStatus         `json:"testStatus,omitempty"`
    MetricStatus       MetricStatus       `json:"metricStatus,omitempty"`
    RoundRobinStrategy RoundRobinStrategy `json:"roundRobinStrategy,omitempty"`
    FixedStrategy      FixedStrategy      `json:"fixedStrategy,omitempty"`
    NextChaosDateTime  int64              `json:"nextChaosDateTime,omitempty"`
    Created            bool               `json:"created,default=false"`
}

不会引发任何错误,并且修改的规格字段实际上会保留,但状态字段不会保留,其值在下一个协调步骤中仍保留默认值。 我查看了 github 或 stackoverflow 上的其他问题,但提出的任何建议都解决了我的问题,但我无法弄清楚问题是什么。为了获得更大的了解,您可以参考算子所在的仓库。

非常欢迎任何建议:)


正确答案


我可能已经找到状态未更新的原因了。

在更新状态之前,我还更新了规范字段(以便向用户提供有关创建的资源的一些反馈)。

该问题是由于规格更新触发了新的协调,并且此更新后的指令(其中包括状态更新)未执行。

我意识到使用规范向用户提供反馈是不合适的,而事件更适合此目的。

以上就是《刷新自定义 Kubernetes 控制器的状态的 Golang 实现》的详细内容,更多关于的资料请关注golang学习网公众号!

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