Amazon EC2 Container Service

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:48, 18 марта 2017.

Amazon EC2 Container Service – это высокопроизводительный сервис управления контейнерами с высокими возможностями масштабирования. Он поддерживает контейнеры Docker и позволяет с легкостью запускать приложения в автоматически управляемом кластере инстансов Amazon EC2. C Amazon ECS не требуется самостоятельно устанавливать, масштабировать и обслуживать инфраструктуру управления кластерами. С помощью простых вызовов API можно запускать и останавливать контейнерные приложения Docker, получать данные о состоянии всего кластера и пользоваться многими привычными возможностями, например группами безопасности, Elastic Load Balancing, томами EBS и ролями IAM. Используя сервис Amazon ECS, можно запланировать размещение контейнеров в вашем кластере с учетом потребности в ресурсах и требований к доступности.Также имеется возможность интеграции собственного планировщика или планировщиков сторонних разработчиков с учетом конкретных требований, связанных с вашим бизнесом или приложениями.

Возможности

Совместимость с Docker

Сервис Amazon EC2 Container Service поддерживает Docker и позволяет запускать контейнеры Docker в кластере инстансов Amazon EC2 и управлять ими. На каждом инстансе EC2 в кластере, управляемом Amazon ECS, работает демон Docker, поэтому любое приложение, которое вы упаковали в виде контейнера локально, будет развернуто и запущено в Amazon ECS без необходимости менять конфигурацию.

Управляемые кластеры

Работа с собственной инфраструктурой управления контейнерами обычно включает в себя установку, эксплуатацию и масштабирование своего собственного программного обеспечения для управления кластером, систем управления конфигурацией и решений для мониторинга. Разработка архитектуры и управление доступностью и масштабируемостью этих систем является непростой задачей. Сервис Amazon EC2 Container Service устраняет сложности, связанные с управлением контейнерами. При использовании Amazon ECS вам достаточно лишь запустить кластер инстансов контейнера и указать задания, которые требуется выполнить. Amazon ECS проделает всю остальную работу, связанную с управлением кластером.

Определения заданий

Amazon EC2 Container Service позволяет легко определять задания с помощью декларативного шаблона JSON, называемого определением задания. С помощью определения задания можно указать один или несколько контейнеров, необходимых для выполнения задания, включая репозиторий и образ Docker, требования к памяти и процессору, томам общих данных, а также к тому, как контейнеры связаны друг с другом. Можно запустить столько заданий, сколько необходимо из одного файла определения заданий, который можно зарегистрировать с помощью сервиса. Файлы определения заданий также позволяют осуществлять контроль версий спецификации приложения.

Программное управление

Amazon EC2 Container Service предоставляет вам набор простых API, позволяющих осуществлять интеграцию и расширение сервиса. API позволяют создавать и удалять кластеры, регистрировать и отменять регистрацию заданий, запускать и прекращать работу контейнеров Docker, а также предоставлять подробные сведения о состоянии кластера и его инстансов. Также можно использовать AWS CloudFormation для распределения кластеров Amazon ECS, регистрации определений заданий и планирования использования контейнеров.

Планирование

Amazon EC2 Container Service включает в себя планировщики, которые размещают контейнеры в ваших кластерах, основываясь на ваших потребностях в ресурсах (например процессоре или оперативной памяти), а также требованиях к доступности. Используя доступные планировщики, вы можете запланировать продолжительную работу приложений и сервисов, а также пакетные задания. API Amazon ECS также предоставляют полную информацию о состоянии кластера, что позволяет вам писать собственные планировщики или интегрировать существующие планировщики сторонних разработчиков (например Marathon). Amazon ECS – это система оптимистического параллелизма с общим состоянием, которая предоставляет полные сведения о состоянии кластера для всех планировщиков. Вы можете разработать свои собственные планировщики или интегрировать планировщики сторонних производителей, используя API Amazon ECS для получения информации о состоянии кластера и размещения контейнеров в соответствующем местоположении.

  • Автоматическое восстановление контейнеров

Планировщик Amazon ECS Service будет автоматически восстанавливать работу неисправных контейнеров, чтобы гарантировать наличие необходимого количества контейнеров, поддерживающих работу вашего приложения.

  • Развертывание контейнеров

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

Балансировка нагрузки

Amazon ECS интегрирован с сервисом Elastic Load Balancing (ELB), что позволяет распределять трафик между вашими контейнерами. Вы указываете определение задания и балансировщик ELB, который необходимо использовать, а планировщик Amazon ECS Service будет автоматически добавлять и удалять контейнеры из балансировщика. В определении задания можно указать динамический порт, в этом случае контейнеру, запланированному для инстанса EC2, будет передан неиспользуемый порт. Для совместного использования ELB с несколькими сервисами можно также использовать маршрутизацию на основе путей.

Локальная разработка

Интерфейс командной строки Amazon EC2 Container Service (Amazon ECS CLI) позволяет упростить локальную разработку, а также поможет легко настроить кластер Amazon ECS и связанные с ним ресурсы (например инстанс EC2). Amazon ECS CLI поддерживает Docker Compose – инструмент с открытым исходным кодом для определения и запуска многоконтейнерных приложений. Вы можете применить одно и то же определение Compose для определения многоконтейнерного приложения как на компьютере для разработки, так и в рабочей среде. Amazon ECS CLI – это инструмент с открытым исходным кодом, который можно загрузить здесь.

Мониторинг

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

Ведение логов

Чтобы упростить диагностику ошибок, журналы агента ECS каждого инстанса контейнера и журналы контейнера Docker можно пересылать в сервис Amazon CloudWatch Logs. Можно также записывать все свои вызовы API Amazon ECS и получать файлы журналов с помощью AWS CloudTrail. Записанная информация включает в себя идентификацию оператора, совершившего вызов API, время вызова API, IP-адрес источника, совершившего вызов API, параметры запроса, а также элементы ответа, возвращенные сервисом Amazon ECS. CloudTrail предоставляет доступ к истории вызовов API, совершенных из консоли управления Amazon ECS, AWS SDK и интерфейса командной строки AWS, а также делает возможным проведение анализа безопасности, отслеживание изменения ресурсов и аудит соответствия.

Поддержка репозитория

Amazon EC2 Container Service можно использовать с любым сторонним или доступным частным реестром Docker, а также с Docker Hub – репозиторием образов, размещаемом в Docker. Вам необходимо лишь указать репозиторий в определении задания, а Amazon ECS будет извлекать подходящие образы для ваших приложений.

Безопасность

Amazon EC2 Container Service позволяет указать роль IAM для каждого задания ECS. Это позволяет назначить инстансам контейнера ECS роль с минимальными правами. При этом будет соблюдена политика доступа с минимальными привилегиями и предоставлена возможность раздельно управлять ролями инстанса и задания. Вы также будете видеть, какое задание какую роль использует, – это можно отслеживать по журналам CloudTrail.

Архитектура Amazon ECS

Amazon ECS является региональным сервисом, упрощающим запуск контейнеров приложений (наборов приложений, хранилище приложений) с высокой доступностью при помощи метода разделения региона на несколько зон доступности. Вы можете создать кластер Amazon ECS в новом или уже существующем облаке (VPC). После того, как кластер запущен и работает, вы можете составить список задач и сервисов, которые контейнер Docker отобразит для запуска через ваш кластер. Изображения контейнеров хранятся и достаются из контейнера регистров, который может быть как внутри AWS инфраструктуры, так и снаружи.

Overview.png

Преимущества Amazon ECS

  • Простое управление кластерами в любых масштабах;
  • Гибкое размещение контейнеров;
  • Использование с другими сервисами AWS;
  • Расширяемость;
  • Производительность нужного масштаба;
  • Безопасность.

Поднятие WordPress + MySql с помощью Amazon ECS

Для начала нужно зарегистрировать аккаунт Amazon, вот здесь есть достаточно простая инструкция.

После этого зайти в так называемую консоль от Amazon. Поменять регион в верхнем правом углу на US West (Oregon). Во вкладке All services -> Compute -> EC2 -> Key Pairs создать пару ключей. Нажать на Create Key Pair и ввести название пары. Например: UserName-us-west-2. Для чего это нужно: AWS использует криптографию с открытым ключом, чтобы защитить информацию о входе в систему для вашей виртуальной машины. Простым языком: когда мы создадим свою виртуальную машину, данный ключ нам понадобится, чтобы подключиться к ней по SSH. Далее нужно перейти к созданию кластера, в котором будут храниться наши контейнеры, сюда. В принципе, можно перейти сюда, нажать кнопку Get started и пройти визард, который будет вести за ручку сквозь процесс настройки кластера и задач, но так нельзя будет увидеть всей мощи системы и гибкости настроек. Поэтому будет лучше не использовать визард и приступить к дальнейшей настройки. Затем нужно нажать Create Cluster и заполнить следующие поля:

  • Cluster name (Например: WordPressMySql)
  • Create an empty cluster (Снять галочку, если она стоит)
  • EC2 instance type (Выбрать именно t2.micro, так как он бесплатен)
  • Number of instances (Ввести 1)
  • Key pair (Выбрать из списка заданную пару, в данном случае, UserName-us-west-2)
  • Container instance IAM role (Выбрать созданную при прохождении инструкции по регистрации)

Далее нажать Create и подождать создания кластера. После того, как процесс завершится, нажать View Cluster. Теперь самое время создать задания для кластера. Из вкладок слева перейти по Task Definitions и нажать Create a Task Definition. Для поднятия WordPress с MySql уже есть подготовленный .json файл с конфигурацией. Далее нужно нажать Configure via JSON и в открывшемся окне заменить содержимое на код, приведённый ниже. А также в параметре Network Mode выставить Bridge и нажать Create.

{
  "containerDefinitions": [
    {
      "name": "wordpress",
      "links": [
        "mysql"
      ],
      "image": "wordpress",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80
        }
      ],
      "memory": 300,
      "cpu": 10
    },
    {
      "environment": [
        {
          "name": "MYSQL_ROOT_PASSWORD",
          "value": "password"
        }
      ],
      "name": "mysql",
      "image": "mysql",
      "cpu": 10,
      "memory": 300,
      "essential": true
    }
  ],
  "family": "WordPressMySqlTask"
}

Теперь нужно запустить задание как сервис на кластере. Перейти обратно во вкладку Clusters, нажать по WordPressMySql -> Services -> Create и заполнить следующие поля:

  • Task Definition (Выбрать WordPressMySqlTask)
  • Cluster (Выбрать WordPressMySql)
  • Service name (Например: WordPressMySqlService)
  • Number of tasks (Ввести 1)

Далее нажать Create Service. Затем перейти к кластеру во вкладку Tasks и подождать когда статус с PENDING изменится на RUNNING. После нажатия по заданию в списке должен открыться список контейнеров, далее нажать на wordpress и найти External Link. Перейти по ней, и появится страница инициализации. Всё готово.

Если текстовой инструкции не хватает или непонятен какой-то момент, можно просмотреть видео ниже.

Ссылки