Использование подключений к хранилищу в приложениях-контейнерах Azure

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

Тип хранилища Описание Примеры использования
Файловая система контейнера Временное хранилище, ограниченное локальным контейнером Написание локального кэша приложений.
Временное хранилище Временное хранилище, ограниченное отдельной репликой Совместное использование файлов между контейнерами в реплике. Например, основной контейнер приложения может записывать файлы журналов, обрабатываемые контейнером на стороне.
Файлы Azure Постоянное хранилище Запись файлов в общую папку, чтобы сделать данные доступными для других систем.

Примечание

Функции подключения томов в приложениях контейнеров Azure доступны в предварительной версии.

Файловая система контейнера

Контейнер может записывать данные в собственную файловую систему.

Хранилище файловой системы контейнера имеет следующие характеристики:

  • Хранилище является временным и исчезает при завершении или перезапуске контейнера.
  • Файлы, записанные в это хранилище, видны только процессам, выполняемым в текущем контейнере.
  • Гарантии емкости отсутствуют. Доступное хранилище зависит от объема дискового пространства, доступного в контейнере.

Временное хранилище

Вы можете подключить временный том, эквивалентный emptyDir в Kubernetes. Временное хранилище ограничивается одной репликой.

Временное хранилище имеет следующие характеристики:

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

Чтобы настроить временное хранилище, сначала определите EmptyDir том в редакции. Затем определите подключение тома в одном или нескольких контейнерах в редакции.

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

Требование Инструкции
Учетная запись Azure Если у вас ее нет, создайте бесплатную учетную запись.
Среда "Приложения-контейнеры Azure" Создайте среду приложений-контейнеров.

Конфигурация

При использовании временного хранилища необходимо использовать Azure CLI с определением YAML для создания или обновления приложения контейнера.

  1. Чтобы обновить существующее приложение-контейнер для использования временного хранилища, экспортируйте спецификацию приложения в YAML-файл с именем app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Внесите следующие изменения в спецификацию приложения контейнера.

    • volumes Добавьте массив в template раздел определения приложения контейнера и определите том.
      • Это name идентификатор тома.
      • Используйте EmptyDir в качестве storageType.
    • Для каждого контейнера в шаблоне, который требуется подключить временное хранилище, добавьте volumeMounts массив в определение контейнера и определите подключение тома.
      • Имя volumeName , определенное в массиве volumes .
      • Это mountPath путь в контейнере для подключения тома.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Обновите приложение-контейнер с помощью YAML-файла.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Чтобы создать временный том и подключить его в контейнере, внесите следующие изменения в ресурс приложений-контейнеров в шаблоне ARM:

  • volumes Добавьте массив в template раздел определения приложения контейнера и определите том.
    • Это name идентификатор тома.
    • Используйте EmptyDir в качестве storageType.
  • Для каждого контейнера в шаблоне, который требуется подключить временное хранилище, добавьте volumeMounts массив в определение контейнера и определите подключение тома.
    • Имя volumeName , определенное в массиве volumes .
    • Это mountPath путь в контейнере для подключения тома.

Пример фрагмента шаблона ARM:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Полный пример см. в спецификации API шаблона ARM .

Файлы Azure

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

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

Файлы Azure хранилище имеет следующие характеристики:

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

Чтобы включить хранилище Файлы Azure в контейнере, необходимо настроить контейнер следующим образом:

  • Создайте определение хранилища типа AzureFile в среде контейнерных приложений.
  • Определите том хранилища в редакции.
  • Определите подключение тома в одном или нескольких контейнерах в редакции.

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

Требование Инструкции
Учетная запись Azure Если у вас ее нет, создайте бесплатную учетную запись.
Учетная запись хранения Azure Создание учетной записи хранения.
Среда "Приложения-контейнеры Azure" Создайте среду приложений-контейнеров.

Конфигурация

При использовании Файлы Azure необходимо использовать Azure CLI с определением YAML для создания или обновления приложения контейнера.

  1. Добавьте определение хранилища типа AzureFile в среду контейнерных приложений.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    <STORAGE_ACCOUNT_KEY> Замените <STORAGE_ACCOUNT_NAME> имя и ключ учетной записи хранения. Замените <STORAGE_SHARE_NAME> именем общей папки в учетной записи хранения.

    Допустимые значения: --access-modeReadWrite и ReadOnly.

  2. Чтобы обновить существующее приложение-контейнер для подключения общей папки, экспортируйте спецификацию приложения в YAML-файл с именем app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Внесите следующие изменения в спецификацию приложения контейнера.

    • volumes Добавьте массив в template раздел определения приложения контейнера и определите том.
      • Это name идентификатор тома.
      • Для storageType используйте AzureFile.
      • Для storageNameэтого используйте имя хранилища, определенного в среде.
    • Для каждого контейнера в шаблоне, который требуется подключить Файлы Azure хранилище, добавьте volumeMounts массив в определение контейнера и определите подключение тома.
      • Имя volumeName , определенное в массиве volumes .
      • mountPath Путь в контейнере для подключения тома.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. Обновите приложение контейнера с помощью YAML-файла.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml my-app.yaml
    

В следующих фрагментах шаблона ARM показано, как добавить общий ресурс Файлы Azure в среду приложений контейнеров и использовать его в приложении-контейнере.

  1. Добавьте дочерний storages ресурс в среду контейнерных приложений.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. Обновите ресурс приложения контейнера, чтобы добавить подключение тома и тома.

    {
      "apiVersion": "2022-03-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • volumes Добавьте массив в template раздел определения приложения контейнера и определите том.
      • Это name идентификатор тома.
      • Для storageType используйте AzureFile.
      • Для storageNameэтого используйте имя хранилища, определенного в среде.
    • Для каждого контейнера в шаблоне, который требуется подключить Файлы Azure хранилище, добавьте volumeMounts массив в определение контейнера и определите подключение тома.
      • Имя volumeName , определенное в массиве volumes .
      • mountPath Путь в контейнере для подключения тома.

Полный пример см. в спецификации API шаблона ARM .