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

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

Примечание.

Чтобы предотвратить сбои развертывания, избегайте использования специальных символов в именах томов. Например, том с именем credentials.json содержит специальный символ (.), который приводит к ошибке развертывания.

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

Примечание.

Контейнеры приложений Azure не поддерживает подключение общих папок из Azure NetApp Files или Хранилище BLOB-объектов Azure.

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

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

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

Контейнерное хранилище с ограниченной областью

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

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

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

Хранилище с областью действия реплики

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

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

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

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

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

Требование Инструкции
учетная запись Azure Если у вас нет учетной записи, создайте бесплатную учетную запись.
среда Контейнеры приложений 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 в виде тома в контейнере.

Important

Контейнеры приложений Azure поддерживает только классические файловые ресурсы Azure, которые создаются внутри учетной записи хранения (Microsoft.Storage/storageAccounts/fileServices/sharesтипа ресурса). Container Apps не поддерживает новый Microsoft.FileShares тип ресурсов верхнего уровня. Если попытаться смонтировать ресурс Microsoft.FileShares, операция завершается сбоем. Чтобы создать поддерживаемый файловый ресурс, см. Создание классического файлового ресурса Azure.

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

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

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

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

На портале Azure откройте Container App.
В области навигации слева в разделе "Параметры" выберите "Подключения хранилища".

Здесь можно добавить новую точку монтирования:

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

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

Требование Инструкции
учетная запись Azure Если у вас нет учетной записи, создайте бесплатную учетную запись.
учетная запись служба хранилища 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_NAME> и <STORAGE_ACCOUNT_KEY> именем и ключом вашей учетной записи хранения. Замените <STORAGE_SHARE_NAME> именем общей папки в учетной записи хранения.

    Допустимые --access-mode значения: ReadWrite и 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 для SMB или NfsAzureFile для NFS. Это значение должно соответствовать типу хранилища, определенному в среде.
      • Для storageName используйте имя хранилища, определенного в среде.
      • Строка mountOptions - это строка, разделённая запятыми, содержащая параметры монтирования. Дополнительные сведения см. в разделе Параметры mountOptions в Файлы Azure.
      • Этот secrets список представляет собой список секретов для подключения в томе. Дополнительные сведения см. в разделе "Подключение секретов" в томе.
    • Для каждого контейнера в шаблоне, для которых требуется подключить хранилище Файлы Azure, определите монтирование тома в массив volumeMounts определения контейнера.
      • Имя volumeName , определенное в массиве volumes .
      • Это mountPath путь в контейнере для монтирования тома.
      • Это subPath путь в томе для монтирования. Если это значение не указано, корневая директория тома монтируется. Для получения дополнительной информации см. раздел Подпуть.
    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
            subPath: my-sub-path
        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",
                  "subPath": "my-sub-path"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • volumes Добавьте массив в template раздел определения приложения контейнера и определите том. Если у вас уже есть volumes массив, добавьте новый том в массив.
      • Это name является идентификатором тома.
      • Для storageType используйте AzureFile для SMB или NfsAzureFile для NFS. Это значение должно соответствовать типу хранилища, определенному в среде.
      • Для storageName используйте имя хранилища, определенного в среде.
      • Строка mountOptions - это строка, разделённая запятыми, содержащая параметры монтирования. Дополнительные сведения см. в разделе Параметры mountOptions в Файлы Azure.
      • Этот secrets список представляет собой список секретов для подключения в томе. Дополнительные сведения см. в разделе "Подключение секретов" в томе.
    • Для каждого контейнера в шаблоне, для которых требуется подключить хранилище Файлы Azure, определите монтирование тома в массив volumeMounts определения контейнера.
      • Имя volumeName , определенное в массиве volumes .
      • Это mountPath путь в контейнере для монтирования тома.
      • subPath — это путь в томе для монтирования (необязательно). Если вы не укажете это, корневая файловая система тома монтируется. Для получения дополнительной информации см. раздел Подпуть.

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

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

  1. На портале Azure перейдите в среду "Приложения контейнеров".

  2. В области навигации в разделе "Параметры" выберите "Монтирования томов".

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

  4. Выберите блок сообщений сервера (SMB) или сетевую файловую систему (NFS) в зависимости от протокола, используемого общей папкой.

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

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

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

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

  9. В области навигации в разделе Приложение выберите Редакции и Реплики.

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

  11. На странице "Создание и развертывание новой редакции" выберите вкладку "Тома".

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

  13. В области контекста добавления тома задайте следующие значения.

    • Тип тома: файловый том Azure.
    • Имя: введите имя тома.
    • Имя общей папки: выберите созданную ранее общую папку.
    • Параметры подключения. При необходимости введите строку подключения, разделенную запятыми. Дополнительные сведения см. в разделе Параметры mountOptions в Файлы Azure.
  14. Нажмите кнопку "Добавить ", чтобы выйти из области контекста.

  15. На странице «Создать и развернуть новую версию » выберите вкладку «Контейнер ».

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

  17. В области редактирования контейнера выберите вкладку Точки монтирования.

  18. В разделе "Имя тома" выберите созданный ранее том.

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

  20. В Подпуть (необязательно) введите путь в раздел диска для монтирования. Если это значение не указано, корневая директория тома монтируется. Для получения дополнительной информации см. раздел Подпуть.

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

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

Подпуть

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

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

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

Вложенный путь является относительным путем из корневого каталога тома. Не начинайте подпуть с /. Если указать вложенный путь, начинающийся с /, приложение контейнера может не запускаться. Например, my-volume-folder является допустимым вложенным путем, а /my-volume-folder — нет.

Подпуть может ссылаться на папку или файл в томе.

  • Если вложенный путь ссылается на папку, путь монтирования должен ссылаться на пустую папку в контейнере.

  • Если вложенный путь ссылается на файл, путь подключения должен ссылаться на файл, который еще не существует в контейнере.

    Например, предположим, что вложенный путь имеет значение my-volume-folder/my-volume-file.txt, а путь подключения — /my-container-folder/my-container-file.txt. Папка /my-container-folder уже должна существовать в контейнере, но не должна содержать файл my-container-file.txt.

Система игнорирует любые конечные косые черты в подпути.