Terraform: развертывание приложения Docker Compose на EKS / ECS - PullRequest
5 голосов
/ 09 апреля 2020

TL; DR

Я использую серверное приложение с открытым исходным кодом , работающее на Docker Compose . Имеет несколько сервисов, включая PostgreSQL DB и Redis.

Как лучше всего развернуть это приложение на AWS в полном объеме Ia C с Terraform?


Решения на данный момент

1. AWS ecs-cli

ecs-cli сейчас поддерживает отправку docker compose конфигов в Amazon ECS.

Однако я не думаю, он может быть интегрирован с рабочим процессом Terraform (что, возможно, не является большой суетой). Что я точно знаю, так это то, что ecs-cli не поддерживается в CloudFormation , поскольку эта проблема все еще открыта в настоящее время. Поэтому я предполагаю, что его нельзя легко добавить в Terraform.

2. Трудный путь EKS

  • Возьмите файл docker-compose.yml, переведите его в kubectl YAML.
  • (будьте готовы к этому при каждом обновлении пакета).
  • Развертывание с использованием Terraform + EKS API (минимум пример ).

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

3. Использование диаграммы Хелма

  • Написать диаграмму Хелма для приложения.
  • Запустить Terraform, чтобы запустить кластер.
  • Все еще запустить Terraform с helm Поставщик для установки приложения с Helm в кластере.

4. [Не в порядке] k8s Kompose

Я прочитал Kompose может автоматически преобразовать конфигурацию Docker Compose в конфигурацию k8s, но они не отображаются в AWS, а не говорить о Terraform.

5. [Не в порядке] Грязное решение AMI

  • Сборка пользовательского AMI EC2 с пакером.
  • Используя Terraform, настройте БД, Redis и все разрешения / network / et c .
  • Запустите экземпляр EC2 с пользовательским AMI.
  • AMI содержит (настроенный) код приложения, особенно docker-compose.yml. И Docker images.
  • AMI запускает сервис Docker Compose systemctl.

Это было бы как-то больно: длинные сборки, сложный мониторинг, отсутствие масштабирования.

Дополнительные примечания

  • Я упоминал, что мне нужно полный Ia C. Под этим я подразумеваю:
    1. Записанный конфиг (и только он) на master сообщает вам, что развернуто.
    2. Развертывание будет завершено без необходимости выполнения какой-либо другой командой моей команды , Он в основном работает как на CI / CD, так и на одиночных пу sh 'n' go.
    3. Мониторинг и оповещение легко настраиваются в Ia C.
  • Я хочу sh заменить некоторые сервисы компонентами AWS (а именно сервис PostgreSQL на RDS и сервис Redis с ElastiCache).
  • Приложение бывает , чтобы быть Apache Superset . Однако мне также интересно, что считается лучшим общим подходом к этой проблеме Docker Compose.

1 Ответ

0 голосов
/ 20 апреля 2020

1. Подождите и посмотрите

Кто знает, ecs-cli-v2 может быть лучше интегрировано с CloudFormation и / или Terraform.

2. Используйте диаграмму Шлема

Как указано в вопросе. Возможно, это лучшее решение, хотя и требующее (небольших) усилий для параметризации Хелма.

См. Также: Начало работы с Хелмом .

3. Docker Swarm + CloudFormation + Terraform

Docker Swarm now принимает входные данные из файла docker-compose.yml. Шаблон можно найти и настроить здесь . После настройки он может быть интегрирован в инфраструктуру Terraform.

В этом (3-летнем) учебнике объясняется, как использовать Docker Swarm mode на AWS.

Для запуска контейнера, если необходимо (не полностью исследовано, обратная связь приветствуется), вы можете использовать Terraform local-exec. Таким образом, вы можете S SH войти в главный узел и запустить docker stack deploy и другие подобные команды, сохраняя при этом все записанное в стиле Ia C.

...