Как сравнить спецификацию пользовательского ресурса 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» находится в моих работающих модулях, чтобы я мог сравнивать и воссоздавать модули, если оно изменилось?

Также второстепенный вопрос: нужно ли мне перебрать все запущенные модули в функции согласования, чтобы проверить каждый, или я могу сделать это как одну операцию?


person Kerry Gunn    schedule 08.04.2020    source источник


Ответы (1)


Что это за конфиг? Если это конфигурация спецификации Pod, я бы посоветовал вам обновлять не отдельные модули, а спецификацию в развертывании, она автоматически перезапустит их. Если это переменные среды для приложений в этом модуле, я бы рекомендовал использовать ConfigMap для их хранения и обновить. Отвечая на ваш второй вопрос, в обоих случаях - это будет единичная операция.

Чтобы получить Deployment или ConfigMap, вам нужно иметь его имя и пространство имен, обычно с настраиваемым ресурсом, оно должно быть производным от его имени. Вот пример того, как вы можете получить экземпляр развертывания и обновить его.

person Grigoriy Mikhalkin    schedule 08.04.2020
comment
Конфигурация предназначена для приложения, которое запускается в модуле. Так что, возможно, мне нужно извлечь конфигурацию из настраиваемого ресурса в карту конфигурации. Я посмотрю на пример. Спасибо за ссылку. - person Kerry Gunn; 08.04.2020