Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложение-контейнер имеет доступ к различным типам хранилища. При необходимости одно приложение может воспользоваться несколькими типами хранилища.
Примечание.
Чтобы предотвратить сбои развертывания, избегайте использования специальных символов в именах томов. Например, том с именем 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 для создания или обновления контейнерного приложения.
Чтобы обновить существующее приложение-контейнер для использования хранилища на уровне реплики, экспортируйте спецификацию приложения в файл YAML с именем app.yaml.
az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yamlВнесите следующие изменения в спецификацию приложения контейнера.
-
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-
Обновите приложение-контейнер с помощью 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.
На портале Azure перейдите к приложению контейнера.
Выберите управление редакцией в меню слева.
Выберите "Создать новую версию".
Выберите контейнер, в который вы хотите подключить том.
В области редактирования контейнера выберите вкладку Точки монтирования.
В разделе " Эфемерное хранилище" создайте новый том со следующими сведениями:
- Имя тома: имя для эфемерного тома.
- Путь подключения: абсолютный путь в контейнере для подключения тома.
Нажмите кнопку "Сохранить", чтобы сохранить изменения и выйти из области контекста.
Нажмите кнопку "Создать", чтобы создать новую редакцию.
том Файлы 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.
В области навигации слева в разделе "Параметры" выберите "Подключения хранилища".
Здесь можно добавить новую точку монтирования:
- Выберите общий файловый ресурс Azure в качестве типа хранения.
- Укажите необходимую конфигурацию (учетную запись хранения, имя общего ресурса, режим доступа).
- Сохраните подключение.
- Создайте и разверните новую редакцию приложения-контейнера, чтобы применить изменения.
- Создайте определение хранилища в среде "Приложения контейнеров".
- Если вы используете NFS, среда должна быть настроена с помощью пользовательской виртуальной сети, а учетная запись хранения должна быть настроена, чтобы разрешить доступ из виртуальной сети. Дополнительные сведения см. в разделе файловых ресурсов NFS в Файлы Azure .
- Если среда настроена с помощью настраиваемой виртуальной сети, необходимо разрешить порты 445 и 2049 в группе безопасности сети (NSG), связанной с подсетью.
- Определите том типа
AzureFile(SMB) илиNfsAzureFile(NFS) в ревизии. - Определите монтирование тома в одном или нескольких контейнерах в ревизии.
- Используемая Файлы Azure учетная запись хранения должна быть доступна из виртуальной сети приложения контейнера. Дополнительные сведения см. в разделе Предоставление доступа из виртуальной сети.
Предварительные условия
| Требование | Инструкции |
|---|---|
| учетная запись Azure | Если у вас нет учетной записи, создайте бесплатную учетную запись. |
| учетная запись служба хранилища Azure | Создайте учетную запись хранения с классическим общим файловым ресурсом Azure. |
| среда Контейнеры приложений Azure | Создайте среду приложений-контейнеров. |
Настройка
При настройке приложения-контейнера для подключения тома Файлы Azure с помощью Azure CLI необходимо использовать определение YAML для создания или обновления приложения контейнера.
Пошаговое руководство по подключению общей папки SMB см. в статье Создание подключения хранилища Файлы Azure в приложениях Контейнеры приложений Azure.
Добавьте определение хранилища в среду "Приложения контейнеров".
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.Чтобы обновить существующее приложение-контейнер для подключения файлового хранилища, экспортируйте спецификацию приложения в файл YAML с именем app.yaml.
az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yamlВнесите следующие изменения в спецификацию приложения контейнера.
-
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-
Обновите приложение-контейнер с помощью YAML-файла.
az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \ --yaml app.yaml
Полный пример см. в спецификации YAML.
В следующих фрагментах шаблона ARM показано, как добавить долю Файлы Azure в среду приложений для контейнеров и использовать её в контейнерном приложении.
Добавьте дочерний
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" } } } ] }Обновите ресурс приложения контейнера, чтобы добавить том и точку монтирования.
{ "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, добавьте общую папку в среду "Приложения контейнеров", а затем добавьте подключение тома к приложению контейнера, создав новую редакцию.
На портале Azure перейдите в среду "Приложения контейнеров".
В области навигации в разделе "Параметры" выберите "Монтирования томов".
Выберите Добавить.
Выберите блок сообщений сервера (SMB) или сетевую файловую систему (NFS) в зависимости от протокола, используемого общей папкой.
В области контекста "Добавить общую папку" введите следующие сведения:
- Имя: имя для общего доступа к файлам.
- Имя учетной записи хранения: имя учетной записи хранения, содержащей файловый ресурс.
- Ключ учетной записи хранения: ключ доступа для учетной записи хранения.
- Общая папка: имя общей папки.
- Режим доступа: режим доступа для общей папки. Допустимые значения: Чтение и запись и Только для чтения.
Нажмите кнопку "Добавить ", чтобы выйти из области контекста.
Нажмите кнопку "Сохранить", чтобы зафиксировать изменения.
Перейдите к приложению-контейнеру.
В области навигации в разделе Приложение выберите Редакции и Реплики.
Выберите "Создать новую версию".
На странице "Создание и развертывание новой редакции" выберите вкладку "Тома".
Выберите Добавить.
В области контекста добавления тома задайте следующие значения.
- Тип тома: файловый том Azure.
- Имя: введите имя тома.
- Имя общей папки: выберите созданную ранее общую папку.
- Параметры подключения. При необходимости введите строку подключения, разделенную запятыми. Дополнительные сведения см. в разделе Параметры mountOptions в Файлы Azure.
Нажмите кнопку "Добавить ", чтобы выйти из области контекста.
На странице «Создать и развернуть новую версию » выберите вкладку «Контейнер ».
Выберите контейнер, в который нужно подключить этот том.
В области редактирования контейнера выберите вкладку Точки монтирования.
В разделе "Имя тома" выберите созданный ранее том.
В пути подключения введите абсолютный путь в контейнере для подключения тома.
В Подпуть (необязательно) введите путь в раздел диска для монтирования. Если это значение не указано, корневая директория тома монтируется. Для получения дополнительной информации см. раздел Подпуть.
Нажмите кнопку "Сохранить", чтобы сохранить изменения и выйти из области контекста.
Нажмите кнопку "Создать", чтобы создать новую редакцию.
Подпуть
При подключении общей папки из Файлы 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.
Система игнорирует любые конечные косые черты в подпути.