Постоянство Configmap в кубернетес - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть модуль Kubernetes (назовем его POD-A ), и я хочу, чтобы он использовал определенный файл конфигурации для выполнения некоторых действий с использованием API k8s. Конфигурационный файл будет YAML или JSON, который будет проанализирован приложением внутри модуля.

Файл конфигурации размещается на сервере приложений в облаке, и его последняя версия может быть получена на основе триггера. Файл конфигурации содержит сведения о конфигурации всех развертываний в кластере k8s и будет использоваться для обновления развертываний с использованием API k8s в POD-A .

Теперь я думаю сохранить этот файл конфигурации в config-карте, и каждый раз, когда новый конфигурационный файл извлекается, новая карта конфигурации создается модулем, использующим API k8s.

Что я хочу сделать, это обновить предыдущую конфигурационную карту с помощью определенного флага (ключ и значение), который в основном поможет приложению узнать, какая версия развертывания является текущей. Допустим, у меня есть работающий кластер k8s с несколькими модулями, в нем есть карта конфигурации, которая содержит все подробности конфигурации для этих модулей (версия образа, пространство имен и т. Д.) И флаг, уведомляющий, что это текущее развертывание и приложение внутри POD-A узнает об этом, загрузив config-map. Теперь, когда новый файл конфигурации извлекается, создается новая карта конфигурации, и флаг для текущего развертывания устанавливается в значение false для предыдущей карты конфигурации и устанавливается в значение true для последней созданной карты конфигурации. Затем эта карта конфигурации используется для обновления всех модулей в кластере.

Я знаю, что есть много деталей, но мне пришлось объяснить их, чтобы задать следующие вопросы:

1) Можно ли использовать configmaps для этой цели?

2) Могу ли я обновить configmaps или мне нужно их полностью переписать? Я думаю о записи файла в configmap, потому что это было бы намного проще.

3) Я знаю, configmaps хранятся в etcd, но сохраняются ли они на диске или хранятся в памяти?

4) Допустим, POD-A выключится, это повлияет на configmaps? Они как-то связаны с жизненным циклом стручка?

5) Если сам кластер k8s выходит из строя, что происходит с `configmaps? Поскольку они находятся в etcd и если они сохранятся, то будут ли они снова доступны?

Примечание: также существует ограничение на размер конфигурационных карт , поэтому я должен иметь это в виду. Хотя я предполагаю, что 1 МБ достаточно для сохранения файла конфигурации, поскольку обычно он занимает несколько байтов.

1 Ответ

1 голос
/ 03 апреля 2019

1) Я думаю, вы не должны использовать его таким образом.

2) ConfigMaps - это ресурсы kubernetes. Вы можете обновить их.

3) Если включены резервные копии etcd на диск.

4) Нет. Жизненный цикл модуля не должен влиять на конфигурационные карты, если он не изменяет (удаляет) конфигурационную карту.

5) Если сам кластер выходит из строя. Предполагая, что etcd также работает на том же кластере, etcd не будет доступен, пока кластер не вернется снова. ETCD имеет возможность сохранять резервные копии на диск. Если это включено, когда etcd возвращается, он восстановит значения, которые были в резервной копии. Поэтому он должен быть доступен, когда кластер и т. Д. Запущены.

Существует несколько способов смонтировать configMap в модуле, например переменные env, файл и т. Д. Если вы измените карту конфигурации, Значения не будут обновляться в configMaps как файлы. Только значения для configMaps в качестве переменных env обновляются динамически. И теперь процесс, запущенный в модуле, должен обнаружить, что переменная env была обновлена, и предпринять некоторые действия.

Так что я думаю, что система будет слишком сложной.

Вместо этого запускайте развертывание, которое убивает старые модули и вызывает новое, которое использует обновленные configMaps.

...