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


Контейнеры в Azure Container Apps

Служба Azure Container Apps берет на себя управление 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"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Настройка Описание Примечания
image Имя образа контейнера для приложенного контейнера. Это значение имеет формат repository/<IMAGE_NAME>:<TAG>.

Избегайте использования статических тегов, например latest для образов контейнеров. Использование статических тегов может привести к проблемам кэширования и может затруднить устранение неполадок приложения. Вместо этого используйте уникальные теги для каждого развертывания, например хэш Git или дату и время, чтобы обеспечить правильное отслеживание и развертывание обновлений.
name Дружественное имя контейнера. Используется для создания отчетов и идентификации.
command Команда запуска контейнера. Эквивалентно полю entryPoint в Docker.
args Аргументы команды запуска. Записи в этом массиве объединяются в список параметров, который передается команде запуска.
env Массив пар name/value, определяющих переменные среды. Вместо поля secretRef для ссылки на секрет используйте value.
resources.cpu Количество ЦП, выделенных для контейнера. См. требования к выделению виртуальных процессоров и памяти
resources.memory Объем ОЗУ, выделенный для контейнера. См. требования к выделению vCPU и памяти
volumeMounts Массив с определениями монтирования томов. Вы можете определить временные или постоянные тома хранилища для контейнера. Дополнительные сведения о томах хранилища см. в статье Использование подключений к хранилищу в Контейнерах приложений Azure.
probes Массив проб работоспособности, настроенных в контейнере. Дополнительные сведения о параметрах проверок см. в статье Проверки работоспособности в Azure Container Apps.

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

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

Виртуальные ЦП (ядра) Память
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 в шаблоне контейнерного приложения.

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

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

Инициализационные контейнеры определяются в массиве 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 Container Registry

Управляемое удостоверение Azure можно использовать для аутентификации в Реестре контейнеров Azure вместо имени пользователя и пароля. Дополнительные сведения см. в разделе «Управляемые удостоверения в Azure Container Apps».

Чтобы использовать управляемое удостоверение с реестром, удостоверение должно быть включено в приложении и ему должна быть назначена роль 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"
            }]
        }
        ...
    }
}

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

Ограничения

Для Azure Container Apps действуют следующие ограничения.

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

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

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

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

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