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


Использование подключений хранилища в приложениях контейнеров 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 поддерживает протоколы SMB (блок сообщений сервера) и NFS (сетевая файловая система). Вы можете подключить общую папку Файлы Azure с помощью любого протокола. Общую папку, определяемую в среде, необходимо настроить с тем же протоколом, который используется общей папкой в учетной записи хранения.

Примечание.

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

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

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

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

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

Настройка

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

Пошаговое руководство по подключению общей папки SMB см. в статье "Создание подключения хранилища Файлы 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 идентификатор тома.
      • Используется storageTypeAzureFile для SMB или 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 идентификатор тома.
      • Используется storageTypeAzureFile для SMB или 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. Нажмите кнопку "Создать", чтобы создать новую редакцию.