教程:在 Azure 容器应用中创建 Azure 文件存储卷装载
了解如何使用 Azure 文件存储写入容器应用中的永久存储。 有关存储装载的详细信息,请参阅在 Azure 容器应用中使用存储装载。
在本教程中,你将了解如何执行以下操作:
- 创建容器应用环境
- 创建 Azure 存储帐户
- 在存储帐户中定义文件共享
- 将环境链接到存储文件共享
- 在单独的容器中装载存储共享
- 通过查看网站访问日志验证存储装载
注意
Azure 容器应用支持使用 SMB 和 NFS 协议装载文件共享。 本教程演示如何使用 SMB 协议装载 Azure 文件共享。 若要详细了解如何装载 NFS 共享,请参阅在 Azure 容器应用中使用存储装载。
先决条件
- 安装最新版本的 Azure CLI。
设置环境
以下命令可帮助定义变量并确保容器应用扩展保持最新。
登录 Azure CLI。
az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
设置要在接下来的各种命令中使用的环境变量。
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`
在容器应用环境中创建存储链接需要存储帐户密钥。
定义存储装载名称。
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。
将
template
部分中的volumes: null
定义替换为引用存储卷的volumes:
定义。 模板部分应如下所示:template: volumes: - name: my-azure-file-volume storageName: mystoragemount storageType: AzureFile containers: - image: nginx name: my-container-app volumeMounts: - volumeName: my-azure-file-volume mountPath: /var/log/nginx resources: cpu: 0.5 ephemeralStorage: 3Gi memory: 1Gi initContainers: null revisionSuffix: '' scale: maxReplicas: 1 minReplicas: 1 rules: null
新的
template.volumes
部分包含以下属性。属性 说明 name
此值通过调用 az containerapp env storage set
命令与创建的卷匹配。storageName
此值定义环境中的容器访问存储卷时使用的名称。 storageType
此值确定为环境定义的存储卷的类型。 在本例中,它会声明一个 Azure 文件存储装载。 volumes
部分从应用级别定义卷,应用程序容器或 sidecar 容器可以通过与容器关联的volumeMounts
部分引用这些卷。将
volumeMounts
部分添加到containers
部分中的nginx
容器。containers: - image: nginx name: my-container-app volumeMounts: - volumeName: my-azure-file-volume mountPath: /var/log/nginx
新的
volumeMounts
部分包含以下属性:属性 说明 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 准备就绪后,可以通过文件系统命令与存储装载交互。
转为进入 nginx /var/log/nginx 文件夹。
cd /var/log/nginx
返回浏览器,导航到网站并刷新页面几次。
对网站发出的请求创建了一系列日志流条目。
返回终端并列出
/var/log/nginx
文件夹的值。ls
注意 access.log 和 error.log 文件在此文件夹中的显示方式。 这些文件已写入之前的步骤中创建的 Azure 存储共享的 Azure 文件存储装载中。
查看 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