Поделиться через


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

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

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

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

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

Примечание.

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

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

Предпосылки

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

Для начала скопируйте следующий код 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 со следующим форматом. Пример реализации этой конфигурации см. в справочной документации по шаблону ACI Resource Manager .

"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-запрос к основному веб-приложению через локальную сеть группы, чтобы убедиться, что оно работает. Пример работы с sidecar можно расширить, чтобы активировать оповещение при получении кода ответа HTTP, отличающегося от 200 OK.

Дальнейшие действия

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

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

Дополнительные примеры шаблонов см. в шаблонах Azure Resource Manager для экземпляров контейнеров Azure.

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