【问题标题】:Updating Metadata Annotations更新元数据注释
【发布时间】:2020-01-22 11:30:53
【问题描述】:
我正在使用 kubebuilder 创建一个 Kubernetes 算子。当启动我的对象时,我必须解析规范并根据一些计算更新对象。
据我所知,我可以更新对象、元数据或托管字段的状态(我可能错了?)。看来sigs.k8s.io/controller-runtime/pkg/client 库负责如何更新这些字段(我不完全确定)。我无法理解docs。
我有以下问题:
- 是否有关于在状态、元数据(标签或注释)和托管字段之间存储对象配置的最佳实践指南?
- 如何更新/修补对象的注释,类似于使用
r.Status().Update(ctx, &thing); 更新状态?
【问题讨论】:
标签:
kubernetes
kubernetes-custom-resources
kubebuilder
【解决方案1】:
Kubebuilder docs 有点原始,但在使用 Kubebuilder 构建 CRD 和控制器时仍然是一个方便的指南。它会引导您完成一个相当详细的示例,非常适合学习和参考,以了解如何做某些事情。
您的问题的答案通常是“视情况而定”。你在计算什么值,为什么?为什么需要将它们存储在对象上?该数据的生命周期是否与该对象的生命周期耦合,或者即使该对象被删除,该计算数据是否需要继续存在并被其他控制器使用?一般来说,有什么东西会与这些价值观相互作用吗?和他们有什么关系?
如果除了 CRD 的协调控制器之外没有其他东西会与您放入的数据进行交互,请考虑将其放入对象的状态中。
执行r.Status().Update(ctx, &thing) 将避免触发任何副作用,因为它只会保留您对对象的状态子资源所做的更改,而不是其规范或元数据。
与自定义资源有关的常见事情是设置和删除终结器,它们存在于对象的元数据中。