Добавление данных вспомогательной БД во время развертывания

Мое приложение состоит из двух контейнеров: самого приложения и базы данных. Я планирую обернуть приложение в виде диаграммы, тем самым проложив путь для легкого воспроизводимого развертывания.

Помимо настройки / чтения envs среды (с которой helm + kubernetes, похоже, справляется очень хорошо), часть конфигурации приложения:

убедитесь, что база данных предварительно заполнена специальными вспомогательными данными (например, существует пользователь с правами администратора, некоторые имена ролей пользователей, необходимые для создания новых пользователей, и т. д.).

Мне нравится идея иметь читаемые файлы yaml, содержащие всю конфигурацию в удобочитаемом формате. Однако на первый взгляд кажется, что helm каким-либо образом не поможет с этим (записи БД) конфигурацией.

При этом где лучше всего разместить код / ​​конфигурацию, гарантирующую, что БД содержит определенные вспомогательные записи? Конфигурационный файл yaml? Скрипт инициализации контейнера, написанный на bash?


person gmile    schedule 02.06.2017    source источник


Ответы (1)


Вы правы, Kubernetes или Helm не могут помочь с подготовкой ваших предварительно заполненных записей / схемы базы данных.

Вам, вероятно, следует, чтобы ваше приложение инициализировало эти предварительно заполненные данные. Если вы не хотите использовать эту логику в своем приложении, вы можете отправить сценарий инициализации и настроить контейнер инициализации с Kubernetes.

Kubernetes гарантирует, что каждый раз при перезапуске контейнера приложения первым запускается контейнер инициализации. В контейнере инициализации вы можете выполнить сценарий bash / python / ..., который проверяет наличие нужных вам записей.

person Ahmet Alp Balkan    schedule 02.06.2017
comment
Спасибо, Ахмет! Я не знал о концепции контейнеров инициализации. Это очень полезно. У меня есть модуль приложения и модуль БД в отдельных контроллерах ReplicationControllers (так что оба могут масштабироваться независимо, в случае необходимости). Как вы думаете, к какому контроллеру репликации будет принадлежать контейнер инициализации? Я думаю, это должен быть контроллер репликации, содержащий код приложения? - person gmile; 03.06.2017
comment
Я думаю, поскольку эти записи нужны приложению, оно принадлежит контейнеру инициализации приложения, а не БД. Но если БД обслуживает только одну службу, вы также можете инициализировать ее в контейнере инициализации БД. Но я уверен, что вы можете повторно использовать код, если вы отправите скрипт вместе с приложением. Также используйте ReplicaSets или Deployments вместо контроллеров репликации. - person Ahmet Alp Balkan; 04.06.2017