Доступны ли для записи ConfigMaps Kubernete?

Можно ли напрямую изменить файл, смонтированный configMap? У нас есть приложение, которое читает файл конфигурации типа configMap, и приложение должно иметь возможность редактировать файл, и изменения должны сохраняться, если configMap используется совместно с другими модулями и при перезапуске модуля.

Если configMap для этого не предназначено, то что нужно перекинуть на consul для сохранения конфигурации?


person user1595858    schedule 27.08.2018    source источник


Ответы (3)


Да, карта конфигурации не предназначена для записи. Если вы взаимодействуете с файлами из карты конфигурации, вы можете вместо этого поместить файлы в доступный для записи том и смонтировать том. Или вы могли бы, как вы предлагаете, использовать централизованную настройку, такую ​​​​как консул. Учитывая, что приложение динамически записывает эти данные, вы можете рассматривать их состояние, а не конфигурацию. Тогда это может быть сохранено в базе данных. Другим вариантом может быть распределенный кэш например, redis или hazelcast.

person Ryan Dawson    schedule 29.08.2018
comment
Как ни странно, я наткнулся на этот вопрос, потому что часовой Redis фактически пытается записать состояние времени выполнения в свой файл конфигурации, что не работает. - person ffledgling; 25.03.2019

Насколько я знаю, изменения в ConfigMap будут существовать только локально в памяти.
То есть изменения не видны другим модулям, и при перезапуске модуля изменения будут потеряны.

Одним из решений является использование двоичного файла kubectl или API kubernetes из приложения для настройки, чтобы воссоздать ConfigMap после изменения конфигурации.

e.g. kubectl apply -f /path/to/updated/config.yaml

person stacksonstacks    schedule 27.08.2018
comment
Возможно, стоит упомянуть, что для этого требуется танец ServiceAccount-RoleBinding-Role? (Я только что сделал это, я могу опубликовать пример конфигурации, если это необходимо.) - person Caesar; 16.02.2021

Из документа Kubernetes его можно обновить, см. ссылка

Когда ConfigMap, уже используемый в томе, обновляется, спроецированные ключи в конечном итоге также обновляются. Kubelet проверяет актуальность смонтированного ConfigMap при каждой периодической синхронизации. Однако он использует свой локальный кэш на основе ttl для получения текущего значения ConfigMap. В результате общая задержка с момента обновления ConfigMap до момента проецирования новых ключей в pod может быть равна периоду синхронизации kubelet + ttl кеша ConfigMaps в kubelet.

person Honord    schedule 17.01.2019
comment
Речь идет об обновлении ConfigMap извне модулей, как команда Kubernetes. Запись файла тома ConfigMap (эквивалентного ключу ConfigMap) невозможна, но если бы это было возможно, эквивалентные файлы в других модулях, использующих ConfigMap, не обновлялись бы. - person Uri; 02.05.2019