Учебник. Развертывание многоконтейнерной группы с использованием шаблона Resource Manager

Служба "Экземпляры контейнеров Azure" поддерживает развертывание нескольких контейнеров в одном узле с использованием группы контейнеров. Группу контейнеров удобно использовать при создании сопроводительного приложения для ведения журнала, мониторинга или любой другой задачи, для которой службе требуется дополнительный связанный процесс.

В этом руководстве объясняется, как выполнить простую настройку сопроводительного приложения с двумя контейнерами, развернув шаблон Azure Resource Manager с помощью Azure CLI. Узнайте следующие темы:

  • Настройка шаблона для многоконтейнерной группы.
  • Развертывание группы контейнеров
  • Просмотр журналов контейнеров.

Шаблон Resource Manager можно легко адаптировать под такие сценарии, в которых нужно развернуть дополнительные ресурсы служб Azure (например, общую папку Azure или виртуальную сеть) в группе контейнеров.

Примечание.

Многоконтенерные группы сейчас ограничены контейнерами Linux.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Настройка шаблона

Для начала скопируйте следующий код JSON в новый файл с именем azuredeploy.json. В Azure Cloud Shell для создания файла в рабочей папке можно применить Visual Studio Code.

code azuredeploy.json

Этот шаблон Resource Manager определяет группу контейнеров с двумя контейнерами, общедоступным IP-адресом и двумя предоставленными портами. Первый контейнер в группе запускает веб-приложение с выходом в Интернет. Второй контейнер (сопроводительный) осуществляет HTTP-запрос к основному веб-приложению через локальную сеть группы.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerGroupName": {
      "type": "string",
      "defaultValue": "myContainerGroup",
      "metadata": {
        "description": "Container Group name."
      }
    }
  },
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "[parameters('containerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2019-12-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                },
                {
                  "port": 8080
                }
              ]
            }
          },
          {
            "name": "[variables('container2name')]",
            "properties": {
              "image": "[variables('container2image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": 80
            },
            {
                "protocol": "tcp",
                "port": 8080
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "containerIPv4Address": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
    }
  }
}

Чтобы использовать частный реестр образов контейнеров, добавьте объект в документ JSON в следующем формате: Пример реализации такой конфигурации см. в справочнике по шаблонам Resource Manager для службы "Экземпляры контейнеров Azure".

"imageRegistryCredentials": [
  {
    "server": "[parameters('imageRegistryLoginServer')]",
    "username": "[parameters('imageRegistryUsername')]",
    "password": "[parameters('imageRegistryPassword')]"
  }
]

Развертывание шаблона

Создайте группу ресурсов с помощью команды az group create.

az group create --name myResourceGroup --location eastus

Разверните шаблон с помощью команды az deployment group create.

az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json

В течение нескольких секунд вы должны получить исходный ответ Azure.

Просмотр состояния развертывания

Чтобы просмотреть состояние развертывания, используйте следующую команду az container show.

az container show --resource-group myResourceGroup --name myContainerGroup --output table

Если вы хотите просмотреть запущенное приложение, перейдите к его IP-адресу в своем браузере. Например, в этом примере выходных данных используется IP-адрес 52.168.26.124:

Name              ResourceGroup    Status    Image                                                                                               IP:ports              Network    CPU/Memory       OsType    Location
----------------  ---------------  --------  --------------------------------------------------------------------------------------------------  --------------------  ---------  ---------------  --------  ----------
myContainerGroup  danlep0318r      Running   mcr.microsoft.com/azuredocs/aci-tutorial-sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest  20.42.26.114:80,8080  Public     1.0 core/1.5 gb  Linux     eastus

Просмотр журналов контейнеров

Просмотрите выходные данные журнала контейнера с помощью команды az container logs. Аргумент --container-name определяет контейнер, из которого извлекаются журналы. В этом примере указывается контейнер aci-tutorial-app.

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-app

Выходные данные:

listening on port 80
::1 - - [02/Jul/2020:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"

Чтобы просмотреть журналы для сопроводительного контейнера, выполните аналогичную команду с именем контейнера aci-tutorial-sidecar.

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-sidecar

Выходные данные:

Every 3s: curl -I http://localhost                          2020-07-02 20:36:41

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  1663    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT
ETag: W/"67f-16006818640"
Content-Type: text/html; charset=UTF-8
Content-Length: 1663
Date: Thu, 02 Jul 2020 20:36:41 GMT
Connection: keep-alive

Как видите, сопроводительное приложение периодически выполняет HTTP-запрос к основному веб-приложению через локальную сеть группы, чтобы убедиться, что оно работает. Пример сопроводительного приложения можно расширить, реализовав активацию оповещения при получении кода ответа HTTP, который отличается от 200 OK.

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

Из этого руководства вы узнали, как с помощью шаблона Azure Resource Manager развернуть многоконтейнерную группу в службе "Экземпляры контейнеров Azure". Вы научились выполнять следующие задачи:

  • Настройка шаблона для многоконтейнерной группы.
  • Развертывание группы контейнеров
  • Просмотр журналов контейнеров.

Дополнительные примеры шаблонов см. в статье Шаблоны Azure Resource Manager для службы "Экземпляры контейнеров Azure".

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