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

Другие вопросы по тегам