1

我正在使用 kubebuilder 创建一个 Kubernetes 运算符。当启动我的对象时,我必须解析规范并根据一些计算更新对象。

据我所知,我可以更新对象、元数据或托管字段的状态(我可能错了?)。看来sigs.k8s.io/controller-runtime/pkg/client图书馆负责如何更新这些字段(我不完全确定)。我无法理解文档

我有以下问题:

  • 是否有关于在状态、元数据(标签或注释)和托管字段之间存储对象配置的最佳实践指南?
  • 如何更新/修补对象的注释,类似于我r.Status().Update(ctx, &thing);用来更新状态的方式?
4

1 回答 1

3

Kubebuilder文档有点原始,但在使用 Kubebuilder 构建 CRD 和控制器时仍然是一个方便的指南。它会引导您完成一个相当详细的示例,该示例非常适合学习和参考,以了解如何做某些事情。

您的问题的答案通常是“视情况而定”。你在计算什么值,为什么?为什么需要将它们存储在对象上?该数据的生命周期是否与该对象的生命周期耦合,或者即使该对象被删除,该计算数据是否需要继续存在并被其他控制器使用?一般来说,有什么东西会与这些价值观相互作用吗?这和他们有什么关系?

如果除了 CRD 的协调控制器之外没有其他东西会与您放入的数据进行交互,请考虑将其放入对象的状态中。

这样做r.Status().Update(ctx, &thing)将避免触发任何副作用,因为它只会保留您对对象的状态子资源所做的更改,而不是其规范或元数据。

与自定义资源有关的常见事情是设置和删除终结器,它们存在于对象的元数据中。

于 2019-09-21T23:34:01.037 回答