Управление контейнерами DC/OS с помощью REST API Marathon (не рекомендуется)

Предупреждение

Служба контейнеров Azure (ACS) выводится из эксплуатации. В нее больше не добавляются новые компоненты или функциональные возможности. Все API, интерфейс портала, команды CLI и документы помечаются как нерекомендуемые.

Дополнительные сведения см. в статье Поддержка Службы контейнеров Azure будет прекращена 31 января 2020 года.

Мы рекомендуем развернуть одно из следующих решений Azure Marketplace:

См. дополнительные сведения о Службе Azure Kubernetes.

DC/OS — это среда для развертывания и масштабирования кластерных рабочих нагрузок, в которой используемое оборудование рассматривается абстрактно. На базе DC/OS работает платформа, которая управляет планированием и выполнением вычислительных рабочих нагрузок. Хотя доступны платформы для многих популярных рабочих нагрузок, в этом документе описывается, как приступить к созданию и масштабированию развертываний контейнеров с помощью REST API Marathon.

Предварительные требования

Для выполнения этих примеров вам потребуется кластер DC/OS, настроенный в службе контейнеров Azure. Необходимо также удаленное подключение к этому кластеру. Дополнительные сведения об этих компонентах см. в следующих статьях.

Доступ к API DC/OS

После подключения к кластеру службы контейнеров Azure вы можете получить доступ к DC/OS и связанным REST API через http://localhost:local-port. В этом документе для примера используется туннелирование через порт 80. Например, конечные точки Marathon можно получить в URI, начиная с http://localhost/marathon/v2/.

Дополнительные сведения о разных доступных API-интерфейсах см. в документации Mesosphere по API для Marathon и API для Chronos, а также в документации Apache по API для планировщика Mesos.

Сбор сведений из DC/OS и Marathon

Прежде чем развертывать контейнеры в кластере DC/OS, соберите информацию об этом кластере, в частности имена агентов DC/OS и сведения об их состоянии. Для этого отправьте запрос к конечной точке master/slaves REST API DC/OS. Если все пойдет хорошо, запрос вернет список агентов DC/OS и несколько свойств для каждого из них.

curl https://localhost/mesos/master/slaves

Теперь, используя конечную точку DC/OS /apps , проверьте наличие развернутых приложений в кластере DC/OS. Если это новый кластер, вы увидите пустой массив приложений.

curl localhost/marathon/v2/apps

{"apps":[]}

Развертывание контейнера формата Docker

Контейнеры формата Docker развертываются с помощью REST API Marathon и JSON-файла, описывающего предстоящее развертывание. Приведенный ниже пример развертывает контейнер Nginx на частном агенте в кластере.

{
  "id": "nginx",
  "cpus": 0.1,
  "mem": 32.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
      ]
    }
  }
}

Чтобы развернуть контейнер формата Docker, сохраните файл JSON в доступном месте. Затем выполните следующую команду, чтобы развернуть контейнер. Укажите имя JSON-файла (в данном примере это marathon.json).

curl -X POST https://localhost/marathon/v2/apps -d @marathon.json -H "Content-type: application/json"

Выход аналогичен приведенному ниже:

{"version":"2015-11-20T18:59:00.494Z","deploymentId":"b12f8a73-f56a-4eb1-9375-4ac026d6cdec"}

Если теперь отправить в Marathon запрос на получение сведений о приложениях, в выходных данных появятся сведения об этом новом приложении.

curl localhost/marathon/v2/apps

Обращение к контейнеру

Убедитесь, что Nginx выполняется в контейнере на одном из частных агентов в кластере. Чтобы найти узел и порт, на которых работает контейнер, выполните запрос запущенных задач к Marathon.

curl localhost/marathon/v2/tasks

Найдите значение host в выходных данных (IP-адрес вида 10.32.0.x), а также значение ports.

Теперь установите подключение терминала SSH (но не туннельное подключение) по полному доменному имени службы управления кластером. Подключившись, выполните приведенный ниже запрос, указав правильные значения host и ports.

curl http://host:ports

Пример выходных данных сервера Nginx приведен ниже.

Nginx from container

Масштабирование контейнеров

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

{ "instances": 3 }

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

Примечание

URI — http://localhost/marathon/v2/apps/, за которым следует идентификатор приложения для масштабирования. Если вы используете пример Nginx, предоставленный здесь, URI будет иметь следующий код. http://localhost/marathon/v2/apps/nginx.

curl https://localhost/marathon/v2/apps/nginx -H "Content-type: application/json" -X PUT -d @scale.json

Если теперь отправить в конечную точку Marathon запрос о количестве экземпляров приложения, вы увидите, что теперь есть три контейнера Nginx.

curl localhost/marathon/v2/apps

Аналогичные команды PowerShell

Эти же действия можно выполнить с помощью команд PowerShell в системе Windows.

Чтобы собрать сведения о кластере DC/OS, в частности имена и состояния агентов, выполните следующую команду:

Invoke-WebRequest -Uri https://localhost/mesos/master/slaves

Контейнеры формата Docker развертываются с помощью Marathon и файла JSON, описывающего предполагаемое развертывание. Приведенный ниже пример кода развертывает контейнер Nginx и привязывает порт 80 агента DC/OS к порту 80 контейнера.

{
  "id": "nginx",
  "cpus": 0.1,
  "mem": 32.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
      ]
    }
  }
}

Чтобы развернуть контейнер формата Docker, сохраните файл JSON в доступном месте. Затем выполните следующую команду, чтобы развернуть контейнер. Укажите путь к JSON-файлу (в данном примере это marathon.json).

Invoke-WebRequest -Method Post -Uri https://localhost/marathon/v2/apps -ContentType application/json -InFile 'c:\marathon.json'

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

{ "instances": 3 }

Выполните следующую команду для создания дополнительных экземпляров приложения:

Примечание

URI — http://localhost/marathon/v2/apps/, за которым следует идентификатор приложения для масштабирования. Если вы используете приведенный здесь пример Nginx, универсальный код ресурса (URI) будет иметь следующий код. http://localhost/marathon/v2/apps/nginx.

Invoke-WebRequest -Method Put -Uri https://localhost/marathon/v2/apps/nginx -ContentType application/json -InFile 'c:\scale.json'

Следующие шаги