我正在使用kubebuilder创建一个Kubernetes运算符。当启动此类对象时,我必须解析规范并根据一些计算来更新对象。
据我所知,我可以更新对象,元数据或托管字段的状态(我可能错了吗?)。似乎sigs.k8s.io/controller-runtime/pkg/client
库负责如何更新这些字段(我不确定)。我在理解docs时遇到了麻烦。
我有以下问题:
r.Status().Update(ctx, &thing);
来更新状态那样,如何更新/修补对象的注释?答案 0 :(得分:2)
Kubebuilder docs有点粗糙,但是在使用Kubebuilder构建CRD和控制器时仍然是一个方便的指南。它为您提供了一个相当详细的示例,可以很好地学习和参考,以了解如何做某些事情。
您问题的答案通常是“取决于情况”。您正在计算什么值,为什么?为什么需要将它们存储在对象上?该数据的生命周期是否与该对象的生命周期耦合在一起,或者即使删除了该对象,此计算的数据可能仍需要存在并由其他控制器使用吗?总的来说,有什么东西会与这些价值观互动吗?与他们有什么关系?
如果CRD的对帐控制器之外没有其他东西要与您要放置的数据进行交互,请考虑将其放在对象的状态内。
执行r.Status().Update(ctx, &thing)
可以避免触发任何副作用,因为它只会保留您对对象的状态子资源所做的更改,而不是其规范或元数据。
与自定义资源有关的常见事情是设置和删除终结器,终结器存在于对象的元数据中。