你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
了解如何使用 Azure 文件存储装载写入容器应用中的永久存储。 有关存储装载的详细信息,请参阅 在 Azure 容器应用中使用存储装载。
本教程中,您将学习如何:
- 创建容器应用环境
- 创建 Azure 存储帐户
- 在存储帐户中定义文件共享
- 将环境链接到存储文件共享
- 在单个容器中装载存储共享
- 通过查看网站访问日志来验证存储装载
注释
Azure 容器应用支持使用 SMB 和 NFS 协议装载文件共享。 本教程演示如何使用 SMB 协议装载 Azure 文件共享。 若要详细了解如何装载 NFS 共享,请参阅 在 Azure 容器应用中使用存储装载。
先决条件
- 安装最新版本的 Azure CLI。
设置环境
以下命令定义环境变量,并确保容器应用扩展是最新的。
登录 Azure CLI。
az login
设置用于后续各种命令的环境变量。
RESOURCE_GROUP="my-container-apps-group" ENVIRONMENT_NAME="my-storage-environment" LOCATION="canadacentral"
确保拥有最新版本的容器应用 Azure CLI 扩展。
az extension add -n containerapp --upgrade
注册
Microsoft.App
命名空间。az provider register --namespace Microsoft.App
注册 Azure Monitor Log Analytics 工作区的
Microsoft.OperationalInsights
提供程序(如果以前尚未使用它)。az provider register --namespace Microsoft.OperationalInsights
创建环境
以下步骤创建资源组和容器应用环境。
创建资源组。
az group create \ --name $RESOURCE_GROUP \ --___location $LOCATION \ --query "properties.provisioningState"
创建后,命令会返回“已成功”消息。
在本教程结束时,可以删除资源组以删除本文中创建的所有服务。
创建容器应用环境。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --___location "$LOCATION" \ --query "properties.provisioningState"
创建后,命令会返回“已成功”消息。
存储装载与容器应用环境相关联,并在单个容器应用中进行配置。
设置存储帐户
接下来,创建存储帐户并建立要装载到容器应用的文件共享。
定义存储帐户名称。
此命令将生成存储帐户名称的随机后缀,以确保唯一性。
STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
创建 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
创建后,命令会返回“已成功”消息。
定义文件共享名称。
STORAGE_SHARE_NAME="myfileshare"
创建 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
获取存储帐户密钥。
STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
在容器应用环境中创建存储链接需要存储帐户密钥。 容器应用不支持对 Azure 文件共享的基于标识的访问。
定义存储挂载点名称。
STORAGE_MOUNT_NAME="mystoragemount"
此值是用于定义从容器应用环境到 Azure 存储帐户的存储装载链接的名称。
创建存储装载
现在可以更新容器应用配置以支持存储装载。
在环境中创建存储链接。
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
命令创建的文件共享之间创建链接。现在存储帐户和环境已链接,可以创建使用存储装载的容器应用。
定义容器应用名称。
CONTAINER_APP_NAME="my-container-app"
创建容器应用。
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。
复制 URL 并将其粘贴到 Web 浏览器中以导航到网站。
页面加载后,你将看到“欢迎使用 nginx!” 消息。 将此浏览器选项卡保持打开状态。 在存储装载验证步骤中,你将返回到网站。
确认容器应用已配置后,可以使用存储装载定义来更新应用程序。
导出容器应用的配置。
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --output yaml > app.yaml
注释
虽然此应用程序没有机密,但许多应用都具有功能机密。 默认情况下,导出应用配置时,生成的 YAML 中不包含机密的值。
如果不需要更改机密值,则可以删除该
secrets
节,并且机密保持不变。 或者,如果需要更改机密的值,请确保在尝试更新应用之前同时为文件中的每一个机密提供name
和value
。 省略secrets
节中的机密会删除机密。在代码编辑器中打开 app.yaml 。
将
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
节引用这些存储卷。将
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
此值定义容器中装载存储的路径。 使用新的存储装载配置更新容器应用。
az containerapp update \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --yaml app.yaml \ --output table
验证存储装载
建立存储装载后,可以从容器中操作 Azure 存储中的文件。 使用以下命令观察工作中的存储装载。
在容器应用中打开交互式 shell,以在正在运行的容器内执行命令。
az containerapp exec \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP
此命令可能需要一些时间才能打开远程 shell。 shell 准备就绪后,可以通过文件系统命令与存储装载进行交互。 有关详细信息,请参阅 “连接到 Azure 容器应用中的容器控制台”。
更改为 nginx /var/log/nginx 文件夹。
cd /var/log/nginx
返回到浏览器并导航到网站并刷新页面几次。
向网站发出的请求将创建一系列日志流条目。
返回到终端并列出
/var/log/nginx
文件夹的值。ls
请注意 access.log 和 error.log 文件在此文件夹中的显示方式。 这些文件将被写入到在前面步骤中创建的 Azure 存储共享中的 Azure Files 挂载点。
查看 access.log 文件的内容。
cat access.log
退出容器的交互式 shell 以返回到本地终端会话。
exit
现在,可以查看 Azure 门户中的文件,以验证它们是否存在于 Azure 存储帐户中。 打印随机生成的存储帐户的名称。
echo $STORAGE_ACCOUNT_NAME
导航到 Azure 门户并打开在此过程中创建的存储帐户。
在 “数据存储 ”下,选择 “文件共享”。
选择 myshare 以查看 access.log 和 error.log 文件。
清理资源
如果不打算继续使用此应用程序,请运行以下命令以删除资源组以及本文中创建的所有资源。
az group delete \
--name $RESOURCE_GROUP