Непрерывное развертывание с чарами Juju

Я изучаю возможность развертывания инфраструктуры наших приложений с использованием Juju.

Мое приложение построено с использованием Play Framework и работает на виртуальной машине Java. Я предполагаю следующую установку:

  • Прокси-сервер для разгрузки SSL (возможно, избыточный, если это не слишком сложно)
  • Основной узел, на котором запущено приложение и JVM
  • Запущенное приложение вторичного узла (горячее резервирование) и JVM

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

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

Мои приложения создаются на частной машине Jenkins, и в результате получается zip-файл, содержащий приложение (в виде запускаемого сценария bash) со всеми его зависимостями.

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

  • Отправьте почтовый индекс на сервер
  • Разверните новый прокси, основной и дополнительный узел с приложением
  • Переключиться на новый прокси

Я хочу создать очарование для этого, но я не уверен, как поступить.

Можно ли развернуть сверток изнутри очарования? Если так, то как?

Обратите внимание, что любые советы приветствуются. Мне не нужны конкретные реализации, только указатели и общие указания.

1 ответ

Отправка "встроенного" приложения в вашу среду - довольно распространенный метод, особенно для тех, кто использует такие инструменты, как докер.

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

Таким образом, вы бы создали прокси-брелок, который, в дополнение к install а также start крючки, relation-joined а также relation-broken скрипты Эти сценарии изменят параметры прокси-сервера при присоединении отношения, чтобы добавить новое местоположение приложения и впоследствии удалить местоположение приложения в поврежденном. Это позволит вам поддерживать работоспособность прокси и менять серверы приложений по желанию.

Служба приложения будет иметь аналогичные сценарии подключения для отправки своего местоположения в прокси-службу. Ему также понадобится опция конфигурации charm для расположения zip-файла приложения, в котором он должен быть развернут. Когда приложения install Хук запускается, он будет затем потянуть вниз ZIP-файл в месте, указанном извлечения, а затем запустить его в start крюк.

Непрерывное развертывание - то, где Джуджу действительно сияет. Сначала вам понадобится загрузочная среда juju bootstrap <your-env-name> а также juju switch <your-env-name>,

Ваш экземпляр Jenkins создаст ваш zip-файл прокси-сервера и zip-файла приложения, а затем загрузит их в место, куда ваши серверы смогут получить доступ. Если вы находитесь на EC2, это, вероятно, будет на S3. Затем он будет принимать к сведению пути расположения и номер сборки, а также имена служб работающих в настоящее время прокси и служб приложений.

Затем он запустит:

juju deploy your-proxy your-proxy-<build-number>
juju deploy your-application your-application-<build-number>
juju add-unit your-application-<build-number> -n 2

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

juju add-relation your-proxy-<build-number> your-application-<build-number>
# add code here to switch to new proxy
juju destroy your-proxy-<old-build-number>
juju destroy your-application-<old-build-number> 

Это предполагает, что вы будете перестраивать свой прокси каждый раз, когда ваше приложение изменяется. Если нет, то просто удалите шаги прокси из приведенных выше команд. Это также предполагает, что приложениям требуется время для запуска, и вы не захотите понизить время простоя, поэтому upgrade-charm крючок не сработает.

Другие вопросы по тегам