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


Использование точек монтирования хранилища в Контейнеры приложений 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 в виде тома в контейнере.

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

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

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

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

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

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

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

Полный пример можно найти в спецификации 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. В Подпуть (необязательно) введите путь в раздел диска для монтирования. Если это значение не указано, корневая директория тома монтируется. Дополнительные сведения см. в разделе (#sub-path).

  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.

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