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

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

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

Эфемерное хранилище

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

Число виртуальных ЦП Общее эфемерное хранилище
0.25 или ниже 1 ГиБ
0,5 или более поздней версии 2 ГиБ
1 или ниже 4 ГиБ
Более 1 8 ГиБ

Хранилище область контейнера

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

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

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

Хранилище область реплики

Вы можете подключить временный временный том, эквивалентный EmptyDir (пустому каталогу) в Kubernetes. Это хранилище область реплика. Используйте том для EmptyDir совместного использования данных между контейнерами в одной реплика.

Хранилище реплики область имеет следующие характеристики:

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

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

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

Требование Instructions
Учетная запись 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 раздел определения приложения контейнера и определите том. Если у вас уже есть volumes массив, добавьте новый том в массив.
      • Это 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_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          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
    

Полный пример см. в спецификации YAML.

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

  • volumes Добавьте массив в template раздел определения приложения контейнера и определите том. Если у вас уже есть volumes массив, добавьте новый том в массив.
    • Это 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"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_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.

  1. В портал Azure перейдите к приложению-контейнеру.

  2. Выберите управление редакцией в меню слева.

  3. Выберите "Создать новую версию".

  4. Выберите контейнер, в котором требуется подключить том.

  5. В области контекста контейнера выберите вкладку "Подключение тома".

  6. В разделе " Эфемерное хранилище" создайте новый том со следующими сведениями.

    • Имя тома: имя эфемерного тома.
    • Путь подключения: абсолютный путь в контейнере для подключения тома.
  7. Нажмите кнопку "Сохранить", чтобы сохранить изменения и выйти из области контекста.

  8. Нажмите кнопку "Создать", чтобы создать новую редакцию.

Том службы файлов Azure

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

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

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

Файлы Azure поддерживает протоколы S МБ и NFS. Вы можете подключить общую папку Файлы Azure с помощью любого протокола. Общую папку, определяемую в среде, необходимо настроить с тем же протоколом, который используется общей папкой в учетной записи хранения.

Примечание.

Поддержка подключения общих папок NFS в приложениях контейнеров Azure доступна в предварительной версии.

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

  • Создайте определение хранилища в среде "Приложения контейнеров".
  • Если вы используете NFS, ваша среда должна быть настроена с пользовательской виртуальной сетью, а учетная запись хранения должна быть настроена, чтобы разрешить доступ из виртуальной сети. Дополнительные сведения см. в общих папках NFS в Файлы Azure.
  • Если среда настроена с помощью настраиваемой виртуальной сети, необходимо разрешить порты 445 и 2049 в группе безопасности сети (NSG), связанной с подсетью.
  • Определите том типа AzureFile (S МБ) или NfsAzureFile (NFS) в редакции.
  • Определите подключение тома в одном или нескольких контейнерах в редакции.
  • Используемая Файлы Azure учетная запись хранения должна быть доступна из виртуальной сети приложения контейнера. Дополнительные сведения см. в разделе Предоставление доступа из виртуальной сети.
    • Если вы используете NFS, необходимо также отключить безопасную передачу. Дополнительные сведения см. в Файлы Azure общих папок NFS и разделе "Создание общей папки NFS Azure" в этом руководстве.

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

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

Настройка

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

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

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

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --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> именем общей папки в учетной записи хранения.

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

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

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

    • volumes Добавьте массив в template раздел определения приложения контейнера и определите том. Если у вас уже есть volumes массив, добавьте новый том в массив.
      • Это name идентификатор тома.
      • Для storageType, используйте AzureFile для S МБ или NfsAzureFile для NFS. Это значение должно соответствовать типу хранилища, определенному в среде.
      • Для 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 app.yaml
    

Полный пример см. в спецификации 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": "2023-05-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 раздел определения приложения контейнера и определите том. Если у вас уже есть volumes массив, добавьте новый том в массив.
      • Это name идентификатор тома.
      • Для storageType, используйте AzureFile для S МБ или NfsAzureFile для NFS. Это значение должно соответствовать типу хранилища, определенному в среде.
      • Для storageNameэтого используйте имя хранилища, определенного в среде.
    • Для каждого контейнера в шаблоне, который требуется подключить Файлы Azure хранилище, определите подключение тома в volumeMounts массиве определения контейнера.
      • Имя volumeName , определенное в массиве volumes .
      • Это mountPath путь в контейнере для подключения тома.

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

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

  1. В портал Azure перейдите в среду приложений контейнеров.

  2. Выберите Файлы Azure в меню слева.

  3. Выберите Добавить.

  4. В контекстном меню "Добавить общую папку " введите следующие сведения:

    • Имя: имя общей папки.
    • служба хранилища имя учетной записи: имя учетной записи хранения, содержащей общую папку.
    • служба хранилища ключ учетной записи: ключ доступа для учетной записи хранения.
    • Общая папка: имя общей папки.
    • Режим доступа: режим доступа для общей папки. Допустимые значения: "Чтение и запись" и "Только чтение".
  5. Нажмите кнопку "Добавить ", чтобы выйти из области контекста.

  6. Нажмите кнопку "Сохранить", чтобы зафиксировать изменения.

  7. Перейдите к приложению-контейнеру.

  8. Выберите управление редакцией в меню слева.

  9. Выберите "Создать новую версию".

  10. Выберите контейнер, в который нужно подключить том.

  11. В области контекста контейнера выберите вкладку "Подключение тома".

  12. В разделе "Общие папки" создайте новый том со следующими сведениями.

    • Имя общей папки: добавленная общая папка.
    • Путь подключения: абсолютный путь в контейнере для подключения тома.
  13. Нажмите кнопку "Сохранить", чтобы сохранить изменения и выйти из области контекста.

  14. Нажмите кнопку "Создать", чтобы создать новую редакцию.