你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 容器应用通过一组声明性缩放规则管理自动水平缩放。 当容器应用横向扩展时,将按需创建容器应用的新实例。 这些实例称为副本。
在本教程中,你会将 HTTP 缩放规则添加到容器应用,并观察应用程序的缩放方式。
Prerequisites
| 要求 | Instructions |
|---|---|
| Azure 帐户 | 如果没有 Azure 帐户,可以免费创建一个。 需要对 Azure 订阅拥有“参与者”权限才能继续操作。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色。 |
| GitHub 帐户 | 免费获得一个。 |
| Azure CLI | 安装 Azure CLI。 |
设置
若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
az login
为了确保运行最新版本的 CLI,请运行 upgrade 命令。
az upgrade
接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。
如果在 Azure CLI 中运行 az containerapp 命令,或在 PowerShell 中运行 Az.App 模块中的 cmdlet 时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。
az extension add --name containerapp --upgrade
注意
从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true 安装容器应用扩展。
az extension add --name containerapp --upgrade --allow-preview true
安装当前扩展或模块后,请注册 Microsoft.App 和 Microsoft.OperationalInsights 命名空间。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
创建和部署容器应用
使用 containerapp up 命令创建和部署容器应用。 此命令将创建:
- 资源组
- 容器应用环境
- Log Analytics 工作区
如果其中任何资源已存在,该命令会使用现有资源,而不是新建资源。
最后,该命令使用公共容器映像 mcr.microsoft.com/dotnet/samples:aspnetapp创建和部署容器应用。 此映像用于触发在本文中创建的缩放规则。 无需知道或使用 .NET 来完成此过程。
az containerapp up \
--name my-container-app \
--resource-group my-container-apps \
--location centralus \
--environment 'my-container-apps' \
--image mcr.microsoft.com/dotnet/samples:aspnetapp \
--target-port 8080 \
--ingress external \
--query properties.configuration.ingress.fqdn \
注意
请确保 --image 参数的值小写。
将 --ingress 设置为 external,使容器应用可供公共请求使用。
up 命令返回容器应用的完全限定域名 (FQDN)。 将此 FQDN 复制到文本文件。 可在 “发送请求 ”部分中使用它。 FQDN 如以下示例所示:
https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io
添加缩放规则
运行 az containerapp update 命令以将 HTTP 缩放规则添加到容器应用。
az containerapp update \
--name my-container-app \
--resource-group my-container-apps \
--min-replicas 1 \
--max-replicas 10 \
--scale-rule-name my-http-scale-rule \
--scale-rule-http-concurrency 1
此命令将 HTTP 缩放规则添加到容器应用,其名称为 my-http-scale-rule,并发设置为 1。 如果应用收到多个并发 HTTP 请求,运行时会创建应用副本以处理请求。
update 命令以 JSON 响应的形式返回新配置,以验证请求是否成功。
启动日志输出
可以查看容器应用运行时生成的日志以观察应用程序缩放的影响。 使用 az containerapp logs show 命令开始侦听日志条目。
az containerapp logs show \
--name my-container-app \
--resource-group my-container-apps \
--type=system \
--follow=true
show 命令实时返回容器应用的系统日志中的条目。 可以期待类似以下示例的响应:
{
"TimeStamp":"2023-08-01T16:49:03.02752",
"Log":"Connecting to the container 'my-container-app'..."
}
{
"TimeStamp":"2023-08-01T16:49:03.04437",
"Log":"Successfully Connected to container:
'my-container-app' [Revision: 'my-container-app--9uj51l6',
Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
"TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
"Log":"Microsoft.Hosting.Lifetime[14]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
"Log":"Now listening on: http://[::]:80"
}
{
"TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
"Log":"Application started. Press Ctrl+C to shut down."
}
{
"TimeStamp":"2023-08-01T16:47:31.949723+00:00",
"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
"Log":"Hosting environment: Production"
}
{
"TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
"Log":"Content root path: /app/"
}
有关详细信息,请参阅 az containerapp logs。
发送请求
打开新的 bash shell。 运行以下命令,将 <YOUR_CONTAINER_APP_FQDN> 替换为从创建和部署容器应用部分保存的容器应用的完全限定的域名。
seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"
这些命令以并发批次的方式向容器应用发送 50 个请求,每批 10 个请求。
| 命令或自变量 | 说明 |
|---|---|
seq 1 50 |
生成从 1 到 50 的数字序列。 |
| |
管道运算符将序列发送到 xargs 命令。 |
xargs |
使用指定的 URL 运行 curl |
-Iname |
充当 seq 的输出的占位符。 此自变量可阻止将返回值发送到 curl 命令。 |
curl |
调用给定的 URL。 |
-P10 |
指示 xargs 一次最多运行 10 个进程。 |
有关详细信息,请参阅以下内容的文档:
在运行 az containerapp logs show 命令的第一个 shell 中,输出现在包含一个或多个日志条目,如下所示。
{
"TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
"Type":"Normal",
"ContainerAppName":"my-container-app",
"RevisionName":"my-container-app--00001111",
"ReplicaName":"my-container-app--00001111-aaaaa22222-bbbb",
"Msg":"Replica 'my-container-app--00001111-aaaaa22222-bbbb' has been scheduled to run on a node.",
"Reason":"AssigningReplica",
"EventSource":"ContainerAppController",
"Count":0
}
在 Azure 门户中查看缩放(可选)
登录 Azure 门户。
在顶部的“搜索”栏中,输入“my-container-app”。
在搜索结果的“资源”下,选择“my-container-app”。
在左侧导航栏中,展开“应用程序”,然后选择“缩放和副本”。
在“缩放和副本”页面中,选择“副本”。
容器应用现在正在运行多个副本。
可能需要选择“ 刷新 ”以查看新副本。
在左侧导航栏中,展开“监视”,然后选择“指标”。
在“指标”页面中,将“指标”设置为“请求”。
选择“应用拆分”。
展开“值”下拉列表并检查“副本”。
选择蓝色复选标记图标以完成拆分的编辑。
此图显示了容器应用收到的请求(按副本拆分)。
默认情况下,图表刻度设置为过去 24 小时,时间粒度为 15 分钟。 选择刻度,并将其更改为过去 30 分钟,时间粒度为一分钟。 选择“应用”按钮。
在图上选择并拖动以突出显示容器应用收到的请求的最近增加情况。
以下屏幕截图显示了容器应用收到的请求在副本之间的划分情况的放大视图。
CPU 和内存扩展
应尽可能选择 HTTP 缩放规则 而不是 CPU 或内存缩放规则。 CPU 和内存缩放不允许容器应用缩放为零。
添加 CPU 或内存缩放规则后,可以通过 向容器应用发送请求 并在 Azure 门户中查看缩放来测试它。
向缩放应用发送请求后,可能需要一分钟才能触发缩放规则并创建新的副本。
CPU 频率调整
CPU 缩放允许应用根据 CPU 利用率进行缩减或扩展。
例如,如果创建利用率值为的 50CPU 缩放规则,则当所有副本的平均 CPU 使用率达到 50%时,Azure 容器应用会创建容器应用的更多副本。
CPU 缩放不允许容器应用缩放为零。 有关此触发器的详细信息,请参阅 KEDA CPU 缩放触发器。
通过运行 az containerapp update 命令将 CPU 缩放规则添加到容器应用。
注意
使用 Azure CLI 将缩放规则添加到已有缩放规则的容器应用中时,新的缩放规则将替换旧的缩放规则。 若要查看如何添加多个缩放规则,请参阅 “多个缩放规则”。
在运行以下命令之前,请将占位符 <PLACEHOLDERS> 替换为您的值。 对于本教程,请将<UTILIZATION>替换为1。 这会导致容器应用在所有副本的平均 CPU 使用率达到 1%时进行缩放。 此值仅用于演示。 副本数量由您在运行az containerapp update时指定的--max-replicas 10限制为10。
az containerapp update \
--name my-container-app \
--resource-group my-container-apps \
--min-replicas 1 \
--max-replicas 10 \
--scale-rule-name my-cpu-scale-rule \
--scale-rule-type cpu \
--scale-rule-metadata type=Utilization value=<UTILIZATION>
内存缩放
内存缩放允许您的应用根据使用的内存量进行缩小或扩展。
例如,如果创建利用率值为的 50内存缩放规则,则当所有副本的平均内存利用率达到 50%时,Azure 容器应用会创建容器应用的更多副本。
内存缩放不允许容器应用缩放为零。 有关此触发器的详细信息,请参阅 KEDA 内存缩放触发器。
通过运行 az containerapp update 命令将内存缩放规则添加到容器应用。
注意
使用 Azure CLI 将缩放规则添加到已有缩放规则的容器应用中时,新的缩放规则将替换旧的缩放规则。 若要查看如何添加多个缩放规则,请参阅 “多个缩放规则”。
在运行以下命令之前,请将 <PLACEHOLDERS> 替换为你的值。 在本教程中,请将 <UTILIZATION> 替换为 1。 这会导致容器应用在所有副本的平均内存利用率达到 1%时进行缩放。 此值仅用于演示。 运行 az containerapp update 时指定的 --max-replicas 10 将副本数限制为 10。
az containerapp update \
--name my-container-app \
--resource-group my-container-apps \
--min-replicas 1 \
--max-replicas 10 \
--scale-rule-name my-memory-scale-rule \
--scale-rule-type memory \
--scale-rule-metadata type=Utilization value=<UTILIZATION>
多个缩放规则
若要使用 Azure CLI 将多个缩放规则添加到容器应用,必须使用 YAML。
使用
az containerapp show命令将容器应用配置导出到 YAML。az containerapp show \ --name my-container-app \ --resource-group my-container-apps \ --output yaml > app.yaml在
app.yaml的properties>template>scale>rules部分中,添加以下属性。 将<PLACEHOLDERS>替换为你的值。... properties: ... template: ... scale: ... rules: - name: cpu-scaling-rule custom: type: cpu metadata: type: "Utilization" value: "<CPU_UTILIZATION>" - name: memory-scaling-rule custom: type: memory metadata: type: "Utilization" value: "<MEMORY_UTILIZATION>" ...使用
az containerapp update命令从app.yaml导入容器应用配置。az containerapp update \ --name my-container-app \ --resource-group my-container-apps \ --yaml app.yaml
清理资源
如果不打算继续使用此应用程序,请运行以下命令,删除资源组以及本教程中创建的所有资源。
警告
以下命令删除指定的资源组及其包含的所有资源。 如果本教程范围之外的资源存在于指定的资源组中,则它们也会被删除。
az group delete --name my-container-apps
提示
遇到问题? 在 Azure 容器应用存储库中提交问题,告知我们有关 GitHub 的信息。