Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложение-контейнер имеет доступ к различным типам хранилища. При необходимости одно приложение может воспользоваться несколькими типами хранилища.
Примечание.
Чтобы предотвратить сбои развертывания, избегайте использования специальных символов в именах томов. Например, том с именем 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 в виде тома в контейнере.
Файлы Azure хранилище имеет следующие характеристики:
- Файлы, записанные в точке монтирования, сохраняются в общей файловой системе.
- Файлы в общем ресурсе доступны через точку монтирования.
- Несколько контейнеров могут подключать один и тот же общий доступ к файлу, включая те, которые находятся в другой реплике, версии или приложении контейнеров.
- Все контейнеры, подключающие общую папку, могут получать доступ к файлам, написанным любым другим контейнером или методом.
- В одном контейнере может быть подключено несколько томов Файлы Azure.
Файлы Azure поддерживает протоколы SMB (блок сообщений сервера) и NFS (сетевая файловая система). Вы можете подключить разделяемый ресурс Файлы Azure с помощью любого из двух протоколов. Общую папку, определяемую в среде, необходимо настроить с тем же протоколом, который используется общей папкой в учетной записи хранения.
Чтобы включить хранилище Файлы Azure в контейнере, необходимо настроить среду и приложение контейнера следующим образом:
На портале Azure откройте Container App.
В области навигации слева в разделе "Параметры" выберите "Подключения хранилища".
Здесь можно добавить новую точку монтирования:
- Выберите тип хранилища (Azure общую папку или Azure BLOB-объект).
- Укажите необходимую конфигурацию (учетную запись хранения, имя общего ресурса, режим доступа).
- Сохраните подключение.
- Создайте и разверните новую редакцию приложения-контейнера, чтобы применить изменения.
- Создайте определение хранилища в среде "Приложения контейнеров".
- Если вы используете NFS, среда должна быть настроена с помощью пользовательской виртуальной сети, а учетная запись хранения должна быть настроена, чтобы разрешить доступ из виртуальной сети. Дополнительные сведения см. в разделе файловых ресурсов NFS в Файлы Azure .
- Если среда настроена с помощью настраиваемой виртуальной сети, необходимо разрешить порты 445 и 2049 в группе безопасности сети (NSG), связанной с подсетью.
- Определите том типа
AzureFile(SMB) илиNfsAzureFile(NFS) в ревизии. - Определите монтирование тома в одном или нескольких контейнерах в ревизии.
- Используемая Файлы 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путь в томе для монтирования. Если это значение не указано, корневая директория тома монтируется. Дополнительные сведения см. в разделе (#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-
Обновите приложение-контейнер с помощью 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— это путь в томе для монтирования (необязательно). Если вы не укажете это, корневая файловая система тома монтируется. Дополнительные сведения см. в разделе (#sub-path).
- Имя
-
Полный пример можно найти в спецификации API для шаблона ARM.
Чтобы настроить подключение тома для хранилища Файлы Azure на портале Azure, добавьте общую папку в среду "Приложения контейнеров", а затем добавьте подключение тома к приложению контейнера, создав новую редакцию.
На портале Azure перейдите в среду "Приложения контейнеров".
В области навигации в разделе "Параметры" выберите "Монтирования томов".
Выберите Добавить.
Выберите блок сообщений сервера (SMB) или сетевую файловую систему (NFS) в зависимости от протокола, используемого общей папкой.
В области контекста "Добавить общую папку" введите следующие сведения:
- Имя: имя для общего доступа к файлам.
- Имя учетной записи хранения: имя учетной записи хранения, содержащей файловый ресурс.
- Ключ учетной записи хранения: ключ доступа для учетной записи хранения.
- Общая папка: имя общей папки.
- Режим доступа: режим доступа для общей папки. Допустимые значения: Чтение и запись и Только для чтения.
Нажмите кнопку "Добавить ", чтобы выйти из области контекста.
Нажмите кнопку "Сохранить", чтобы зафиксировать изменения.
Перейдите к приложению-контейнеру.
В области навигации в разделе Приложение выберите Редакции и Реплики.
Выберите "Создать новую версию".
На странице "Создание и развертывание новой редакции" выберите вкладку "Тома".
Выберите Добавить.
В области контекста добавления тома задайте следующие значения.
- Тип тома: файловый том Azure.
- Имя: введите имя тома.
- Имя общей папки: выберите созданную ранее общую папку.
- Параметры подключения. При необходимости введите строку подключения, разделенную запятыми. Дополнительные сведения см. в разделе Параметры использования mountOptions в Файлы Azure.
Нажмите кнопку "Добавить ", чтобы выйти из области контекста.
На странице создания и повтора новой редакции выберите вкладку "Контейнер".
Выберите контейнер, в который нужно подключить этот том.
В области редактирования контейнера выберите вкладку Точки монтирования.
В разделе "Имя тома" выберите созданный ранее том.
В пути подключения введите абсолютный путь в контейнере для подключения тома.
В Подпуть (необязательно) введите путь в раздел диска для монтирования. Если это значение не указано, корневая директория тома монтируется. Дополнительные сведения см. в разделе (#sub-path).
Нажмите кнопку "Сохранить", чтобы сохранить изменения и выйти из области контекста.
Нажмите кнопку "Создать", чтобы создать новую редакцию.
Подпуть
При подключении общей папки из Файлы 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.
Система игнорирует любые конечные косые черты в подпути.