更新元数据注释

时间:2019-09-21 23:01:25

标签: kubernetes kubernetes-custom-resources kubebuilder

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

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

我有以下问题:

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

1 个答案:

答案 0 :(得分:2)

Kubebuilder docs有点粗糙,但是在使用Kubebuilder构建CRD和控制器时仍然是一个方便的指南。它为您提供了一个相当详细的示例,可以很好地学习和参考,以了解如何做某些事情。

您问题的答案通常是“取决于情况”。您正在计算什么值,为什么?为什么需要将它们存储在对象上?该数据的生命周期是否与该对象的生命周期耦合在一起,或者即使删除了该对象,此计算的数据可能仍需要存在并由其他控制器使用吗?总的来说,有什么东西会与这些价值观互动吗?与他们有什么关系?

如果CRD的对帐控制器之外没有其他东西要与您要放置的数据进行交互,请考虑将其放在对象的状态内。

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

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