在 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 文件存储(名为 share1share2),资源管理器模板中的 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/"
}]