При обновлении Helm на карте конфигурации новые данные автоматически вводятся в работающий модуль?

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

Моя общая цель - избежать взаимодействия с работающим модулем, такого как удаление или перезапуск / переустановка.

Я видел много информации об изменении sha1sum и поиске обходных путей, но мой вопрос более простой - узнают ли модули автоматически о новых элементах configmap?

---- ОБНОВЛЕНИЕ --- Итак, в итоге мы сделали следующее:

helm upgrade -n release -f release / values.yaml --recreate-pods

хотя это завершает работу существующего модуля, другой модуль сразу же запускается после выдачи команды, что означает «почти нулевое» время простоя.


person texasdave    schedule 07.02.2019    source источник


Ответы (3)


Нет, модули автоматически не узнают о содержимом изменения карты конфигурации.

В случае обновления helm, вам нужно использовать синтаксис шаблона helm, чтобы добавить хеш-значение файла конфигурации конфигурации в метаданные модуля (или шаблона модуля). Это создает связь между конфигурацией и модулем.

Если вы это сделаете, модуль (или шаблон модуля) будет обновлен, даже если будет изменена только карта конфигурации. Тогда никакого ручного вмешательства не требуется.

person Paul Annetts    schedule 07.02.2019

Если ваша диаграмма Helm создает ConfigMap, и эта ConfigMap монтируется как том в модуле, то при обновлении ConfigMap файловая система контейнера также обновляется. Затем приложение должно заметить, что файлы были изменены.

Такие приемы, как установка хэша содержимого файла как аннотации модуля предназначены специально для того, чтобы вызвать обновление развертывания таким образом, чтобы удалить и воссоздать существующие модули. Это хорошо! Модули в Kubernetes очень одноразовые, и если вы удалите модуль, управляемый развертыванием, он будет автоматически воссоздан. Если ваше приложение считывает содержимое ConfigMap только во время запуска (это очень типично), вам нужно сделать что-то вроде этого, чтобы Pod перезапустился сам по себе (скопировано из связанной документации):

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
person David Maze    schedule 08.02.2019
comment
видите ли вы возможность использовать это решение в сочетании с флагом --wait команды обновления руля? на мой взгляд, воссоздание модуля таким образом не считается частью нового выпуска, и команда обновления не ждет, пока модули будут запущены после перезапуска - person alex; 20.04.2021
comment
Изменение значения аннотации приведет к тому, что контроллер развертывания создаст новые поды, точно так же, как при изменении изображения, и helm upgrade --wait должен дождаться этого. - person David Maze; 20.04.2021
comment
Я понял, что флаг --wait не работает для OpenShift DeploymentConfigs, который я использую вместо Deployments, но все равно спасибо - person alex; 27.04.2021

Используя штурвал:

spec:
  strategy:
    type: "Recreate"
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "dmi.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      {{- with .Values.podAnnotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      labels:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum | trunc 10}}

Пока ваша конфигурационная карта будет изменяться, модуль будет воссоздавать, потому что контрольная сумма будет изменена. Я использовал стратегию: воссоздать, потому что мое решение не требует скользящего обновления. Но это должно работать и с скользящим обновлением.

person Constantin Radulescu    schedule 23.11.2020
comment
Пожалуйста, объясните, что делает ваш код и как он это делает. - person M-Chen-3; 24.11.2020