在 Azure 容器实例中装载 Azure 文件共享
默认情况下,Azure 容器实例是无状态的。 如果容器崩溃或停止,其所有状态都会丢失。 若要保存状态使其不受容器生存期限制,必须从外部存储装载卷。 如本单元所示,Azure 容器实例可以装载使用 Azure 文件存储创建的 Azure 文件共享。 Azure 文件存储在云端提供完全托管的文件共享,这些共享可通过行业标准的服务器消息块 (SMB) 协议进行访问。 将 Azure 文件共享与 Azure 容器实例配合使用可以提供文件共享功能,类似于将 Azure 文件共享与 Azure 虚拟机配合使用。
限制
- 可以仅将 Azure 文件共享装载到 Linux 容器。
- Azure 文件共享卷装载需要以 root 身份运行的 Linux 容器。
- Azure 文件共享卷装载仅限于 CIFS 支持。
部署容器并装载卷
要使用 Azure CLI 将 Azure 文件共享作为卷装载到容器中,请在使用 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 名称标签错误消息,请更新前一命令中的值。
部署容器并装载卷 - YAML
你还可以使用 Azure CLI 和 YAML 模板部署容器组并在容器中装载卷。 在部署由多个容器组成的容器组时,通过 YAML 模板进行部署是首选方法。
以下 YAML 模板定义了一个容器组,其中包含使用 aci-hellofiles
映像创建的容器。 该容器将之前创建的 Azure 文件共享 acishare 装载为卷。 下面是示例 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
装载多个卷
若要将多个卷装载到容器实例中,必须使用 Azure 资源管理器模板或 YAML 文件进行部署。 若要使用模板或 YAML 文件,请提供共享详细信息并通过填充模板的 volumes
部分中的 properties
数组来定义卷。
例如,如果已在存储帐户 myStorageAccount 中创建两个 Azure 文件存储(名为 share1 和 share2),资源管理器模板中的 volumes
数组将类似于以下内容:
"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/"
}]