你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure 容器应用中创建 Azure 文件存储卷装载

了解如何使用 Azure 文件存储装载写入容器应用中的永久存储。 有关存储装载的详细信息,请参阅 在 Azure 容器应用中使用存储装载

本教程中,您将学习如何:

  • 创建容器应用环境
  • 创建 Azure 存储帐户
  • 在存储帐户中定义文件共享
  • 将环境链接到存储文件共享
  • 在单个容器中装载存储共享
  • 通过查看网站访问日志来验证存储装载

注释

Azure 容器应用支持使用 SMB 和 NFS 协议装载文件共享。 本教程演示如何使用 SMB 协议装载 Azure 文件共享。 若要详细了解如何装载 NFS 共享,请参阅 在 Azure 容器应用中使用存储装载

先决条件

设置环境

以下命令定义环境变量,并确保容器应用扩展是最新的。

  1. 登录 Azure CLI。

    az login
    
  2. 设置用于后续各种命令的环境变量。

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. 确保拥有最新版本的容器应用 Azure CLI 扩展。

    az extension add -n containerapp --upgrade
    
  4. 注册 Microsoft.App 命名空间。

    az provider register --namespace Microsoft.App
    
  5. 注册 Azure Monitor Log Analytics 工作区的 Microsoft.OperationalInsights 提供程序(如果以前尚未使用它)。

    az provider register --namespace Microsoft.OperationalInsights
    

创建环境

以下步骤创建资源组和容器应用环境。

  1. 创建资源组。

    az group create \
      --name $RESOURCE_GROUP \
      --___location $LOCATION \
      --query "properties.provisioningState"
    

    创建后,命令会返回“已成功”消息。

    在本教程结束时,可以删除资源组以删除本文中创建的所有服务。

  2. 创建容器应用环境。

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --___location "$LOCATION" \
      --query "properties.provisioningState"
    

    创建后,命令会返回“已成功”消息。

    存储装载与容器应用环境相关联,并在单个容器应用中进行配置。

设置存储帐户

接下来,创建存储帐户并建立要装载到容器应用的文件共享。

  1. 定义存储帐户名称。

    此命令将生成存储帐户名称的随机后缀,以确保唯一性。

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. 创建 Azure 存储帐户。

    az storage account create \
      --resource-group $RESOURCE_GROUP \
      --name $STORAGE_ACCOUNT_NAME \
      --___location "$LOCATION" \
      --kind StorageV2 \
      --sku Standard_LRS \
      --enable-large-file-share \
      --query provisioningState
    

    创建后,命令会返回“已成功”消息。

  3. 定义文件共享名称。

    STORAGE_SHARE_NAME="myfileshare"
    
  4. 创建 Azure 存储文件共享。

    az storage share-rm create \
      --resource-group $RESOURCE_GROUP \
      --storage-account $STORAGE_ACCOUNT_NAME \
      --name $STORAGE_SHARE_NAME \
      --quota 1024 \
      --enabled-protocols SMB \
      --output table
    
  5. 获取存储帐户密钥。

    STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
    

    在容器应用环境中创建存储链接需要存储帐户密钥。 容器应用不支持对 Azure 文件共享的基于标识的访问。

  6. 定义存储挂载点名称。

    STORAGE_MOUNT_NAME="mystoragemount"
    

    此值是用于定义从容器应用环境到 Azure 存储帐户的存储装载链接的名称。

创建存储装载

现在可以更新容器应用配置以支持存储装载。

  1. 在环境中创建存储链接。

    az containerapp env storage set \
      --access-mode ReadWrite \
      --azure-file-account-name $STORAGE_ACCOUNT_NAME \
      --azure-file-account-key $STORAGE_ACCOUNT_KEY \
      --azure-file-share-name $STORAGE_SHARE_NAME \
      --storage-name $STORAGE_MOUNT_NAME \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --output table
    

    此命令在容器应用环境和使用 az storage share-rm 命令创建的文件共享之间创建链接。

    现在存储帐户和环境已链接,可以创建使用存储装载的容器应用。

  2. 定义容器应用名称。

    CONTAINER_APP_NAME="my-container-app"
    
  3. 创建容器应用。

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT_NAME \
      --image nginx \
      --min-replicas 1 \
      --max-replicas 1 \
      --target-port 80 \
      --ingress external \
      --query properties.configuration.ingress.fqdn
    

    此命令显示新容器应用的 URL。

  4. 复制 URL 并将其粘贴到 Web 浏览器中以导航到网站。

    页面加载后,你将看到“欢迎使用 nginx!” 消息。 将此浏览器选项卡保持打开状态。 在存储装载验证步骤中,你将返回到网站。

    确认容器应用已配置后,可以使用存储装载定义来更新应用程序。

  5. 导出容器应用的配置。

    az containerapp show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --output yaml > app.yaml
    

    注释

    虽然此应用程序没有机密,但许多应用都具有功能机密。 默认情况下,导出应用配置时,生成的 YAML 中不包含机密的值。

    如果不需要更改机密值,则可以删除该 secrets 节,并且机密保持不变。 或者,如果需要更改机密的值,请确保在尝试更新应用之前同时为文件中的每一个机密提供namevalue。 省略 secrets 节中的机密会删除机密。

  6. 在代码编辑器中打开 app.yaml

  7. volumes: null 节中的 template 定义替换为引用存储卷的 volumes: 定义。 模板部分应如下所示:

    template:
      containers:
      - image: nginx
        imageType: ContainerImage
        name: my-container-app
        resources:
          cpu: 0.5
          ephemeralStorage: 2Gi
          memory: 1Gi
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
      initContainers: null
      revisionSuffix: ''
      scale:
        cooldownPeriod: 300
        maxReplicas: 1
        minReplicas: 1
        pollingInterval: 30
        rules: null
      serviceBinds: null
      terminationGracePeriodSeconds: null
      volumes:
      - name: my-azure-file-volume
        storageName: mystoragemount
        storageType: AzureFile
    

    template.volumes 部分包含以下属性。

    资产 DESCRIPTION
    name 此值与通过调用 az containerapp env storage set 命令创建的卷匹配。
    storageName 该值定义了容器在环境中访问存储卷时使用的名称。
    storageType 此值决定了环境中定义的存储卷类型。 在这种情况下,声明了 Azure 文件存储装载。

    volumes 节用于在应用层级定义存储卷,应用容器或挎斗容器可通过关联容器的 volumeMounts 节引用这些存储卷。

  8. volumeMounts 节添加到 nginx 节中的 containers 容器中。

    containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
    

    volumeMounts 部分包含以下属性:

    资产 DESCRIPTION
    volumeName 此值必须与定义中 volumes 定义的名称匹配。
    mountPath 此值定义容器中装载存储的路径。
  9. 使用新的存储装载配置更新容器应用。

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --yaml app.yaml \
      --output table
    

验证存储装载

建立存储装载后,可以从容器中操作 Azure 存储中的文件。 使用以下命令观察工作中的存储装载。

  1. 在容器应用中打开交互式 shell,以在正在运行的容器内执行命令。

    az containerapp exec \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP
    

    此命令可能需要一些时间才能打开远程 shell。 shell 准备就绪后,可以通过文件系统命令与存储装载进行交互。 有关详细信息,请参阅 “连接到 Azure 容器应用中的容器控制台”。

  2. 更改为 nginx /var/log/nginx 文件夹。

    cd /var/log/nginx
    
  3. 返回到浏览器并导航到网站并刷新页面几次。

    向网站发出的请求将创建一系列日志流条目。

  4. 返回到终端并列出 /var/log/nginx 文件夹的值。

    ls
    

    请注意 access.logerror.log 文件在此文件夹中的显示方式。 这些文件将被写入到在前面步骤中创建的 Azure 存储共享中的 Azure Files 挂载点。

  5. 查看 access.log 文件的内容。

    cat access.log
    
  6. 退出容器的交互式 shell 以返回到本地终端会话。

    exit
    
  7. 现在,可以查看 Azure 门户中的文件,以验证它们是否存在于 Azure 存储帐户中。 打印随机生成的存储帐户的名称。

    echo $STORAGE_ACCOUNT_NAME
    
  8. 导航到 Azure 门户并打开在此过程中创建的存储帐户。

  9. “数据存储 ”下,选择 “文件共享”。

  10. 选择 myshare 以查看 access.logerror.log 文件。

清理资源

如果不打算继续使用此应用程序,请运行以下命令以删除资源组以及本文中创建的所有资源。

az group delete \
  --name $RESOURCE_GROUP

后续步骤