Использование подключений хранилища в приложениях контейнеров 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 для создания или обновления приложения контейнера.
Чтобы обновить существующее приложение-контейнер для использования хранилища с областью реплики, экспортируйте спецификацию приложения в ФАЙЛ 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 с помощью любого протокола. Общую папку, определяемую в среде, необходимо настроить с тем же протоколом, который используется общей папкой в учетной записи хранения.
Примечание.
Поддержка подключения общих папок 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".
Добавьте определение хранилища в среду "Приложения контейнеров".
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
.Чтобы обновить существующее приложение-контейнер для подключения общей папки, экспортируйте спецификацию приложения в файл 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
этого используйте имя хранилища, определенного в среде.
- Это
- Для каждого контейнера в шаблоне, который требуется подключить Файлы 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
Обновите приложение-контейнер с помощью ФАЙЛА 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" } ] } ], "scale": { "minReplicas": 1, "maxReplicas": 3 }, "volumes": [ { "name": "azure-files-volume", "storageType": "AzureFile", "storageName": "myazurefiles" } ] } } }
volumes
Добавьте массив вtemplate
раздел определения приложения контейнера и определите том. Если у вас уже естьvolumes
массив, добавьте новый том в массив.- Это
name
идентификатор тома. - Используется
storageType
AzureFile
для SMB илиNfsAzureFile
для NFS. Это значение должно соответствовать типу хранилища, определенному в среде. - Для
storageName
этого используйте имя хранилища, определенного в среде.
- Это
- Для каждого контейнера в шаблоне, который требуется подключить Файлы Azure хранилище, определите подключение тома в
volumeMounts
массиве определения контейнера.- Имя
volumeName
, определенное в массивеvolumes
. - Это
mountPath
путь в контейнере для подключения тома.
- Имя
Полный пример см. в спецификации API шаблона ARM.
Чтобы настроить подключение тома для хранилища Файлы Azure в портал Azure, добавьте общую папку в среду приложений контейнеров, а затем добавьте подключение тома к приложению контейнера, создав новую редакцию.
В портал Azure перейдите в среду приложений контейнеров.
Выберите Файлы Azure в меню слева.
Выберите Добавить.
В контекстном меню "Добавить общую папку " введите следующие сведения:
- Имя: имя общей папки.
- Имя учетной записи хранения: имя учетной записи хранения, содержащей общую папку.
- Ключ учетной записи хранения: ключ доступа для учетной записи хранения.
- Общая папка: имя общей папки.
- Режим доступа: режим доступа для общей папки. Допустимые значения: "Чтение и запись" и "Только чтение".
Нажмите кнопку "Добавить ", чтобы выйти из области контекста.
Нажмите кнопку "Сохранить", чтобы зафиксировать изменения.
Перейдите к приложению-контейнеру.
Выберите управление редакцией в меню слева.
Выберите "Создать новую версию".
Выберите контейнер, в который нужно подключить том.
В области контекста контейнера выберите вкладку "Подключение тома".
В разделе "Общие папки" создайте новый том со следующими сведениями.
- Имя общей папки: добавленная общая папка.
- Путь подключения: абсолютный путь в контейнере для подключения тома.
Нажмите кнопку "Сохранить", чтобы сохранить изменения и выйти из области контекста.
Нажмите кнопку "Создать", чтобы создать новую редакцию.