Я начинаю сейчас с Kubernetes и Operator SDK, и я пытаюсь создать свой первый оператор, и у меня, вероятно, простой вопрос.
Вопрос
Как обнаружить изменение конфигурации в пользовательском ресурсе yaml в согласовании l oop и выполнить действие в соответствии с изменением?
У меня есть некоторые свойства конфигурации, указанные в моей CR Spe c:
apiVersion: my.example.com/v1alpha1
kind: StoreApp
metadata:
name: mystoreapp
spec:
username: technicalUser
password: abcd1234
catalogs:
- name: Bikes
description: Bikes_description
- name: Cars
description: Cars_description
Я хочу, чтобы при добавлении нового пользовательского ресурса такого типа мой контроллер создавал новый модуль с образом моего приложения, работающего внутри (в веб-сервере). Когда мое приложение запущено и работает в первый раз, я хочу настроить его (добавить каталоги из spe c) через HTTP-запрос от оператора. Пока все в порядке, но я также хочу изменить эти каталоги, когда мое приложение работает и работает.
Например, я хочу добавить новый каталог в spe c (через патч kubectl). Будет вызван метод согласования моего оператора, и как я могу понять, что spe c изменен? Я не уверен, что это хорошая идея сделать HTTP-вызовы в мое приложение, чтобы получить все каталоги и сравнить их с каталогами из spe c. Это правильный способ понять, что есть изменение?
Я думаю о двух других способах найти что-то обновленное, но я не уверен, будут ли они работать должным образом, и являются ли они лучшим способом сделать это? ,
Первая идея - запросить экземпляр StoreApp с помощью client.Get (...), но, насколько я понимаю, это вызовет сервер API и получит обновленную версию mystoreapp. , Я читал о каком-то локальном индексе, который действует как кеш для этих объектов, и я могу проверить, есть ли разница между кэшированным объектом и объектом, возвращаемым с сервера API. Но я не нашел, как получить объект из этого локального индекса, поэтому я не смог сравнить два объекта.
Чтобы создать карту, в которой я храню ха sh из дыру spe c объекта и каждый раз проверять этот ха sh с ха sh объекта, полученного с client.Get (...). Я думаю, что это будет работать, но должен быть лучший способ сделать это.
Я прочитал несколько Java операторов для K8s, и были методы, такие как onAdd, onUpdate, onDelete. Я не мог найти что-то подобное в Operatod SDK. Есть ли что-то подобное в Operator SDK?
Каждый ответ будет полезен. Заранее спасибо!
С наилучшими пожеланиями, Христиан