Обновление аннотаций к метаданным
Я использую kubebuilder для создания оператора Kubernetes. Когда инициируется объект моего типа, я должен проанализировать спецификацию и обновить объекты на основе нескольких вычислений.
Насколько я могу судить, я могу либо обновить статус объекта, метаданные или управляемое поле (я могу ошибаться?). Похоже, чтоsigs.k8s.io/controller-runtime/pkg/client
библиотека отвечает за то, как обновлять эти поля (я не совсем уверен). У меня проблемы с пониманием документации.
У меня есть следующие вопросы:
- Есть ли руководство по передовым методам хранения конфигурации объекта между статусом, метаданными (метками или аннотациями) и управляемыми полями?
- Как мне обновить / исправить аннотации объекта аналогично тому, как я бы использовал
r.Status().Update(ctx, &thing);
обновить статус?
1 ответ
Документация Kubebuilder немного сырая, но, тем не менее, является удобным руководством при создании CRD и контроллеров с помощью Kubebuilder. Он проведет вас через довольно подробный пример, который здорово изучить и вернуться к нему, чтобы увидеть, как делать определенные вещи.
Обычно ответ на ваш вопрос: "Это зависит от обстоятельств". Какие значения вы рассчитываете и почему? Зачем нужно хранить их на объекте? Связан ли жизненный цикл этих данных с жизненным циклом этого объекта, или эти вычисленные данные должны существовать и использоваться другими контроллерами, даже когда объект удален? В общем, будет ли что-нибудь взаимодействовать с этими ценностями? Что он будет с ними делать?
Если ничто другое, кроме контроллера согласования для CRD, не будет взаимодействовать с данными, которые вы вводите, подумайте о том, чтобы поместить их в статус объекта.
Делать r.Status().Update(ctx, &thing)
предотвратит запуск каких-либо побочных эффектов, поскольку сохранит только изменения, внесенные вами в подресурс Status объекта, а не его спецификацию или метаданные.
Обычно с настраиваемыми ресурсами устанавливают и удаляют финализаторы, которые находятся в метаданных объекта.