По умолчанию Kubernetes не перезапускает Deployment автоматически, если меняется ConfigMap. В итоге поды могут продолжать работать со старыми настройками, пока администратор вручную не сделает kubectl rollout restart. К счастью, есть проверенные практики.

Почему так происходит

ConfigMap монтируется в поды как файлы или переменные окружения, но контроллер Deployment не отслеживает изменения содержимого ConfigMap. Поэтому изменений «на лету» не происходит.

Решение

Хэш-аннотации: добавить хэш от ConfigMap в аннотацию pod template в Deployment Example in Helm:

annotations:
 configmap-hash: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}

Изменение ConfigMap меняет аннотацию → Deployment пересоздаёт поды.

В качестве альтернативы можно использовать специальные контролеры для рестарта деплоймента. Например этот - Reloader. Но этот способ также требует добавления анотаций в Deployment или Statefulset, чтобы рестарт происходил автоматически. Минус этого способа что нужно разворачивать дополнительный компонент в кластере.

Вывод

Наиболее распространённый и гибкий способ — использовать аннотации с хэшем ConfigMap. Тогда любое изменение автоматически вызывает новый rollout, и поды запускаются уже с актуальной конфигурацией.