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


Контейнеры в Контейнерах приложений Azure

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

Приложения контейнеров Azure: контейнеры

Приложения-контейнеры Azure поддерживают:

Кроме того, к ним относятся следующие функции:

  • Приложения используют template раздел конфигурации для определения образа контейнера и других параметров. Изменения в template разделе конфигурации активируют новую редакцию приложения контейнера.
  • в случае аварийного завершения работы контейнер автоматически перезапускается.

К функциям заданий относятся:

  • Выполнение заданий использует template раздел конфигурации для определения образа контейнера и других параметров при каждом запуске выполнения.
  • Если контейнер завершает работу с кодом выхода, отличного от нуля, выполнение задания помечается как неудачное. Задание можно настроить для повтора неудачных выполнений.

Настройка

Большинство приложений-контейнеров имеют один контейнер. В расширенных сценариях приложение может также иметь боковую и инициативную контейнеры. В определении приложения контейнера основное приложение и его контейнеры боковинка перечислены в containers массиве в properties.template разделе, а контейнеры инициализации перечислены в массиве initContainers . В следующем фрагменте показаны доступные параметры конфигурации при настройке контейнеров приложения.

{
  "properties": {
    "template": {
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "env": [
            {
              "name": "HTTP_PORT",
              "value": "80"
            },
            {
              "name": "SECRET_VAL",
              "secretRef": "mysecret"
            }
          ],
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/appsettings",
              "volumeName": "appsettings-volume"
            }
          ],
          "probes": [
            {
              "type": "liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "liveness probe"
                  }
                ]
              },
              "initialDelaySeconds": 7,
              "periodSeconds": 3
            },
            {
              "type": "readiness",
              "tcpSocket": {
                "port": 8081
              },
              "initialDelaySeconds": 10,
              "periodSeconds": 3
            },
            {
              "type": "startup",
              "httpGet": {
                "path": "/startup",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "startup probe"
                  }
                ]
              },
              "initialDelaySeconds": 3,
              "periodSeconds": 3
            }
          ]
        }
      ]
    },
    "initContainers": [
      {
        "name": "init",
        "image": "[parameters('init_container_image')]",
        "resources": {
          "cpu": 0.25,
          "memory": "0.5Gi"
        },
        "volumeMounts": [
          {
            "mountPath": "/appsettings",
            "volumeName": "appsettings-volume"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Параметр Description Примечания
image Имя образа контейнера для контейнера приложения. Это значение имеет формат repository/<IMAGE_NAME>:<TAG>.
name Удобное имя контейнера. Используется для создания отчетов и идентификации.
command Команда запуска контейнера. Эквивалентно полю entryPoint в Docker.
args Аргументы для команды запуска. Записи в этом массиве объединяются в список параметров, который передается команде запуска.
env Массив пар name/value, определяющих переменные среды. Вместо поля value для ссылки на секрет используйте secretRef.
resources.cpu Количество ЦП, выделенных для контейнера. См. требования к выделению виртуальных ЦП и памяти
resources.memory Объем ОЗУ, выделенный для контейнера. См. требования к выделению виртуальных ЦП и памяти
volumeMounts Массив с определениями подключений томов. Вы можете определить временные или постоянные тома хранилища для контейнера. Дополнительные сведения о томах хранилища см. в статье Использование подключений к хранилищу в Контейнерах приложений Azure.
probes Массив проб работоспособности, настроенных в контейнере. Дополнительные сведения о параметрах проб см. в статье Пробы работоспособности в Контейнерах приложений Azure.

Требования к выделению виртуальных ЦП и памяти

При использовании плана потребления общий объем ЦП и памяти, выделенной для всех контейнеров в приложении-контейнере, должен добавиться к одному из следующих сочетаний.

Виртуальные ЦП (ядра) Память
0.25 0.5Gi
0.5 1.0Gi
0.75 1.5Gi
1.0 2.0Gi
1.25 2.5Gi
1.5 3.0Gi
1.75 3.5Gi
2.0 4.0Gi
2.25 4.5Gi
2.5 5.0Gi
2.75 5.5Gi
3.0 6.0Gi
3.25 6.5Gi
3.5 7.0Gi
3.75 7.5Gi
4.0 8.0Gi

Примечание.

Приложения, использующие план потребления только в среде потребления , ограничиваются не более 2 ядер и 4 Гига памяти.

Несколько контейнеров

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

Для большинства сценариев микрослужб рекомендуется развернуть каждую службу как отдельное приложение контейнера.

Несколько контейнеров в одном приложении-контейнере совместно используют жесткие диски и сетевые ресурсы и имеют одинаковый жизненный цикл приложения.

Существует два способа запуска дополнительных контейнеров в приложении контейнера: контейнеры на стороне и контейнеры инициализации.

Контейнеры на стороне

Вы можете определить несколько контейнеров в одном приложении контейнера для реализации шаблона бокового контейнера.

Ниже приведены примеры контейнеров боковинка:

  • Агент, который считывает журналы из основного контейнера приложений на общем томе и перенаправит их в службу ведения журнала.

  • Фоновый процесс, который обновляет кэш, используемый контейнером основного приложения в общем томе.

Эти сценарии являются примерами и не представляют только способы реализации бокового автомобиля.

Чтобы запустить несколько контейнеров в контейнерном приложении, добавьте несколько контейнеров в массив containers в шаблоне контейнерного приложения.

Контейнеры инициализации.

Вы можете определить один или несколько контейнеров инициализации в приложении-контейнере. Контейнеры инициализации выполняются до контейнера основного приложения и используются для выполнения задач инициализации, таких как скачивание данных или подготовка среды.

Контейнеры init определяются в initContainers массиве шаблона приложения контейнера. Контейнеры выполняются в том порядке, в который они определены в массиве, и должны успешно завершиться до запуска контейнера основного приложения.

Примечание.

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

Реестры контейнеров

Вы можете развернуть образы, размещенные в частных реестрах, указав их учетные данные в конфигурации Контейнеров приложений.

Чтобы использовать реестр контейнеров, необходимо определить реестр в registries массиве в properties.configuration разделе шаблона ресурса приложения контейнера. Поле passwordSecretRef определяет имя секрета в имени массива secrets, где вы определили пароль.

{
  ...
  "registries": [{
    "server": "docker.io",
    "username": "my-registry-user-name",
    "passwordSecretRef": "my-password-secret-name"
  }]
}

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

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

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "docker-hub-password",
        "value": "my-docker-hub-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "docker.io",
        "username": "someuser",
        "passwordSecretRef": "docker-hub-password"
      }
    ]
  }
}

Примечание.

Docker Hub ограничивает количество скачиваемых образов Docker. Когда ограничение достигнуто, контейнеры в приложении не будут запускаться. Используйте реестр с достаточными ограничениями, например Реестр контейнеров Azure, чтобы избежать этой проблемы.

Управляемое удостоверение с помощью Реестр контейнеров Azure

Управляемое удостоверение Azure можно использовать для проверки подлинности с помощью Реестр контейнеров Azure вместо использования имени пользователя и пароля. Дополнительные сведения см. в разделе "Управляемые удостоверения" в приложениях контейнеров Azure.

Чтобы использовать управляемое удостоверение с реестром, удостоверение должно быть включено в приложении и оно должно быть назначено acrPull в реестре. Чтобы настроить реестр, используйте идентификатор ресурса управляемого удостоверения для удостоверения, назначаемого пользователем, или system удостоверения, назначаемого системой, в identity свойстве реестра. Не настраивайте имя пользователя и пароль при использовании управляемого удостоверения.

{
    "identity": {
        "type": "SystemAssigned,UserAssigned",
        "userAssignedIdentities": {
            "<IDENTITY1_RESOURCE_ID>": {}
        }
    }
    "properties": {
        "configuration": {
            "registries": [
            {
                "server": "myacr1.azurecr.io",
                "identity": "<IDENTITY1_RESOURCE_ID>"
            },
            {
                "server": "myacr2.azurecr.io",
                "identity": "system"
            }]
        }
        ...
    }
}

Дополнительные сведения о настройке назначаемых пользователем удостоверений см. в разделе "Добавление удостоверения, назначаемого пользователем".

Ограничения

Для Контейнеров приложений DNS действуют следующие ограничения.

  • Привилегированные контейнеры: приложения контейнеров Azure не разрешают режим привилегированных контейнеров с доступом на уровне узла.

  • Операционная система. Требуются образы контейнеров под управлением Linux (linux/amd64).

  • Максимальный размер изображения:

    • Профиль рабочей нагрузки потребления поддерживает образы контейнеров, составляющие до 8 ГБ для каждого приложения или реплики заданий.
    • Выделенные профили рабочей нагрузки поддерживают более крупные образы контейнеров. Так как профиль выделенной рабочей нагрузки может запускать несколько приложений или заданий, несколько образов контейнеров совместно используют доступное место на диске. Фактический поддерживаемый размер изображения зависит от ресурсов, потребляемых другими приложениями и заданиями.

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