Mount an Azure file share in Azure Container Instances (Подключение файлового ресурса Azure с помощью службы "Экземпляры контейнеров Azure")
Состояние в экземплярах контейнеров Azure не отслеживается по умолчанию. Если происходит сбой в контейнере, он перезапускается или завершает работу, все сведения о состоянии будут утеряны. Чтобы сохранить состояние после истечения времени существования контейнера, необходимо подключить том из внешнего хранилища. Как показано в этой статье, служба "Экземпляры контейнеров Azure" может подключать общий файловый ресурс Azure, созданный с помощью службы Файлы Azure. Служба "Файлы Azure" предоставляет полностью управляемые общие файловые ресурсы в службе хранилища Azure, доступ к которым можно получить с помощью стандартного отраслевого протокола SMB. Использование файлового ресурса Azure с Экземплярами контейнеров Azure предоставляет функции обмена файлами, похожие на использование файлового ресурса Azure совместно с виртуальными машинами Azure.
Ограничения
- служба хранилища Azure не поддерживает подключение общей папки SMB с помощью управляемого удостоверения
- Общие файловые ресурсы Файлов Azure можно размещать только в контейнерах Linux. Ознакомьтесь с дополнительными сведениями о различиях в поддержке функций для групп контейнеров Linux и Windows в обзоре.
- Для подключения общей папки Azure требуется, чтобы контейнер Linux выполнялся от имени привилегированного пользователя.
- Подключения к томам общего файлового ресурса Файлов Azure ограничены поддержкой CIFS.
Примечание.
Подключение файлового ресурса Файлов Azure к экземпляру контейнера аналогично подключение привязки Docker. Если вы подключаете файловый ресурс к каталогу контейнера, в котором находятся файлы или каталоги, то присоединение скрывает файлы или каталоги, делая их недоступными во время выполнения контейнера.
Внимание
Если исходящее подключение к Интернету заблокировано в делегированной подсети, необходимо добавить конечную точку службы в Azure Strorage в делегированную подсеть.
Создание общей папки Azure
Перед использованием файлового ресурса Azure с Экземплярами контейнеров Azure необходимо создать его. Выполните приведенный ниже скрипт, чтобы создать учетную запись хранения для размещения файлового ресурса и общего ресурса. Имя учетной записи хранения должно быть глобально уникальным, поэтому скрипт добавляет случайное значение к базовой строке.
# Change these four parameters as needed
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare
# Create the storage account with the parameters
az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS
# Create the file share
az storage share create \
--name $ACI_PERS_SHARE_NAME \
--account-name $ACI_PERS_STORAGE_ACCOUNT_NAME
Получение учетных данных хранилища
Для подключения файлового ресурса Azure в качестве тома в Экземплярах контейнеров Azure требуется три значения: имя учетной записи хранения, имя общего ресурса и ключ доступа к хранилищу.
Имя учетной записи хранения: если вы использовали сценарий выше, имя учетной записи хранения было сохранено в переменной
$ACI_PERS_STORAGE_ACCOUNT_NAME
. Для отображения имени учетной записи введите:echo $ACI_PERS_STORAGE_ACCOUNT_NAME
Имя общего ресурса — это значение уже известно (определено как
acishare
в предыдущем сценарии).Ключ учетной записи хранения — это значение можно найти с помощью следующей команды:
STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv) echo $STORAGE_KEY
Развертывание контейнера и подключение тома — CLI
Чтобы подключить файловый ресурс Azure в качестве тома в контейнере с помощью Azure CLI, укажите точку подключения для общего ресурса и тома при создании контейнера с помощью команды az container create. Если вы выполнили предыдущие инструкции, можно подключить созданный ранее общий ресурс с помощью следующей команды для создания контейнера:
az container create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles \
--image mcr.microsoft.com/azuredocs/aci-hellofiles \
--dns-name-label aci-demo \
--ports 80 \
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $STORAGE_KEY \
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path /aci/logs/
Значение --dns-name-label
должно быть уникальным в пределах региона Azure, в котором создается экземпляр контейнера. Если при выполнении команды появится сообщение об ошибке Метка DNS-имени, обновите значение в предыдущей команде.
Управление файлами в подключенном томе
После запуска контейнера можно использовать веб-приложение, развернутое с помощью образа Microsoft aci-hellofiles, чтобы создать небольшие текстовые файлы в общей папке Azure по указанному пути подключения. Получите полное доменное имя (FQDN) веб-приложения с помощью команды az container show.
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
С помощью портала Azure или такого средства, как Обозреватель службы хранилища Microsoft Azure, можно извлечь и проверить файл(ы), записанный в файловый ресурс после сохранения текста с использованием приложения.
Развертывание контейнера и подключение тома — YAML
Вы также можете развернуть группу контейнеров и подключить том в контейнере с помощью Azure CLI и шаблона YAML. При развертывании группы контейнеров, состоящей из нескольких контейнеров, рекомендуется использовать шаблон YAML.
Следующий шаблон YAML определяет группу контейнеров с одним контейнером, созданным с помощью образа aci-hellofiles
. Контейнер подключает файловый ресурс Azure acishare, созданный ранее в качестве тома. Где указано, введите имя и ключ хранилища для учетной записи хранения, в которой размещен общий файловый ресурс.
Как и в примере CLI, значение dnsNameLabel
должно быть уникальным в пределах региона Azure, в котором создается экземпляр контейнера. При необходимости обновите значение в файле YAML.
apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
containers:
- name: hellofiles
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-hellofiles
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /aci/logs/
name: filesharevolume
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- port: 80
dnsNameLabel: aci-demo
volumes:
- name: filesharevolume
azureFile:
sharename: acishare
storageAccountName: <Storage account name>
storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups
Для развертывания с помощью шаблона YAML сохраните предыдущий YAML в файл с именем deploy-aci.yaml
, а затем выполните команду az container create с параметром --file
:
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Развертывание контейнера и подключение тома — диспетчер ресурсов
Помимо развертывания с помощью CLI и шаблона YAML также можно развернуть группу контейнеров и подключить том в контейнере с помощью шаблона Azure Resource Manager.
Сначала заполните массив volumes
в разделе properties
группы контейнеров шаблона.
Затем для каждого контейнера, в котором нужно подключить том, нужно заполнить массив volumeMounts
в разделе properties
определения контейнера.
Следующий шаблон Resource Manager определяет группу контейнеров с одним контейнером, созданным с помощью образа aci-hellofiles
. Контейнер подключает файловый ресурс Azure acishare, созданный ранее в качестве тома. Где указано, введите имя и ключ хранилища для учетной записи хранения, в которой размещен общий файловый ресурс.
Как и в предыдущих примерах, значение dnsNameLabel
должно быть уникальным в пределах региона Azure, в котором создается экземпляр контейнера. При необходимости обновите значение в шаблоне.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "hellofiles",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
},
"resources": [
{
"name": "file-share-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/aci/logs"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Storage account name>",
"storageAccountKey": "<Storage account key>"
}
}
]
}
}
]
}
Для развертывания с помощью шаблона Resource Manager сохраните предыдущий JSON в файл с именем deploy-aci.json
, а затем выполните команду az deployment group create с параметром --template-file
:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
Подключение нескольких томов
Чтобы подключить несколько томов в экземпляре контейнера, необходимо выполнить развертывание с помощью шаблона Azure Resource Manager, YAML-файла или иного программного метода. Чтобы использовать шаблон или YAML-файл, укажите сведения о файловом ресурсе и определите тома, заполнив массив volumes
в разделе properties
файла.
Например, если вы создали два Файлы Azure общих папок с именем share1 и share2 в учетной записи хранения myStorageAccount, volumes
массив в шаблоне Resource Manager будет выглядеть примерно так:
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
Затем для каждого контейнера в группе контейнеров, в которой нужно подключить тома, заполните массив volumeMounts
в разделе properties
определения контейнера. В результате этого, подключатся, например, тома myvolume1 и myvolume2, определенные ранее.
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]
Следующие шаги
Сведения о подключении других типов томов в службе "Экземпляры контейнеров Azure" см. в следующих статьях:
- Mount an emptyDir volume in Azure Container Instances (Подключение тома emptyDir в службе "Экземпляры контейнеров Azure")
- Подключение тома gitRepo в службе "Экземпляры контейнеров Azure"
- Подключение тома secret в службе "Экземпляры контейнеров Azure"