Как сравнить спецификацию настраиваемого ресурса Kubernetes с ожидаемой спецификацией в контроллере GO?
Я пытаюсь реализовать свой первый оператор Kubernetes. Я хочу, чтобы операторский контроллер имел возможность сравнивать конфигурацию в работающем модуле с ожидаемой конфигурацией, определенной в пользовательском определении ресурса.
Например: Пользовательский ресурс
apiVersion: test.com/v1alpha1
kind: TEST
metadata::
name: example-test
spec:
replicas: 3
version: 20:03
config:
valueA: true
valueB: 123
Вышеупомянутый настраиваемый ресурс развернут, и запущены 3 модуля. Внесено такое изменение, что конфигурация "valueA" изменена на false.
В функции согласования контроллера GO я могу получить экземпляр TEST и увидеть "новую" версию конфигурации:
instance := &testv1alpha1.TEST{}
log.Info("New value : " + instance.Spec.Config.valueA)
Мне интересно, как я могу получить доступ к тому, какое значение "valueA" находится в моих работающих модулях, чтобы я мог сравнивать и воссоздавать модули, если оно изменилось?
Также второстепенный вопрос: нужно ли мне перебрать все запущенные модули в функции согласования, чтобы проверить каждый, или я могу сделать это как одну операцию?
1 ответ
Что это за конфиг? Если это конфигурация спецификации Pod, я бы посоветовал вам обновлять не отдельные модули, а спецификацию в развертывании, она автоматически перезапустит их. Если это переменные среды для приложений в этом модуле, я бы рекомендовал использовать ConfigMap для их хранения и обновить. Отвечая на ваш второй вопрос, в обоих случаях - это будет одна операция.
Чтобы получить Deployment или ConfigMap, вам необходимо иметь его имя и пространство имен, обычно с настраиваемым ресурсом, оно должно быть производным от его имени. Вот пример того, как вы можете получить экземпляр развертывания и обновить его.