更新元数据注释

Updating Metadata Annotations

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

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

我有以下问题:

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

您问题的答案通常是,"it depends."您计算的是什么值,为什么?为什么需要将它们存储在对象上?此数据的生命周期是否耦合到此对象的生命周期,或者此计算数据是否需要继续存在并被其他控制器使用,即使对象已被删除?一般来说,有什么东西会与这些价值观相互作用吗?他们要做什么?

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

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

自定义资源的一个常见操作是设置和删除位于对象元数据中的终结器。