Назад | Перейти на главную страницу

Развертывание и настройка сложной схемы приложения Python

Вызов

Наше свежее приложение использует несколько сервисов:

Я отправлю его в модели SaS, это означает, что все эти сервисы будут размещены в нашем облаке (пока в AWS, а затем в openstack). Каждому заказчику будет предоставлен собственный экземпляр. Установка будет зависеть от потребностей / масштаба клиента - в некоторых случаях все службы будут работать на одной виртуальной машине, в некоторых будет несколько виртуальных машин для каждой службы. Конфигурация услуг зависит от клиента (как и дополнительные функции). Я хотел бы, чтобы был простой способ создания «демонстрационных» экземпляров - просто чтобы позволить будущему клиенту поиграть с нашим приложением.

Требования

Ищу решение, которое мне поможет:

Предложенное решение

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

Я предложил использовать анзибль как инструмент для создания виртуальных машин, настройки общих частей и последующего развертывания сервисов на хостах. Я бы вел отдельные инвентаризации для каждого клиента / экземпляра. Группы инвентаризации Ansible позволили бы установить все роли (службы) на одной виртуальной машине или разместить их на отдельной виртуальной машине. Я считаю, что это также поможет нам в обновлении услуг.

Вопросы

Некоторые вопросы у меня есть:

  1. Какие-нибудь проблемы вы видите в моей настройке?
  2. В какой ситуации может быть недостаточно ансибла, поэтому я хочу иметь что-то вроде докера?
  3. Как отслеживать отдельные экземпляры? Если я изменю playbook на доступный, как быть уверенным, что он запускается на каждом хосте в каждом экземпляре?
  4. Есть ли возможность автоматизировать создание правил брандмауэра для каждой виртуальной машины на основе ролей и доступного инвентаря?
  5. Есть еще совет?

Я заранее ценю все отзывы.

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

Какие-нибудь проблемы вы видите в моей настройке?

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

В какой ситуации Ansible может быть недостаточно, поэтому я хочу иметь что-то вроде докера?

Ansible должен хорошо выполнять всю вашу автоматизацию, даже если вы используете Docker. Я не так часто использовал Docker, но Docker, по сути, является оболочкой для lxc, а Ansible позволяет запускать команды либо на полной машине Linux, либо в контейнере lxc.

Как отслеживать отдельные экземпляры? Если я изменю playbook на доступный, как быть уверенным, что он запускается на каждом хосте в каждом экземпляре?

Каждый раз, когда вы меняете свои плейбуки Ansible, вам, по сути, придется обновлять контейнер Docker, если вы используете Docker. Затем из Docker вы можете использовать push свои изменения. Если вы не используете Docker, вам придется повторно запускать свои пьесы Ansible на всех затронутых серверах каждый раз, когда вы их меняете. Вы можете подумать о том, чтобы поразить ход ваших сборников пьес. Вы можете запускать эти playbook локально на каждом из серверов или удаленно с клиентской рабочей станции. Имейте в виду, что при наличии большого количества узлов, запущенных с одной клиентской рабочей станции, это может быть невозможно из-за ограничений сети и ЦП со стороны вашего клиента.

Есть ли возможность автоматизировать создание правил брандмауэра для каждой виртуальной машины на основе ролей и доступного инвентаря?

Да. Если вы используете Ansible, вы можете использовать шаблоны для настройки iptables на каждой из виртуальных машин.