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

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

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

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

注释

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

先决条件

设置环境

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

  1. 登录 Azure CLI。

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    
  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 节,并且机密保持不变。 或者,如果需要更改机密的值,请确保在尝试更新应用之前同时为文件中的每一个机密提供name和value。 省略 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.log 和 error.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.log 和 error.log 文件。

清理资源

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

az group delete \
  --name $RESOURCE_GROUP

后续步骤