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

教程:缩放容器应用

Azure 容器应用通过一组声明性缩放规则管理自动水平缩放。 当容器应用横向扩展时,将按需创建容器应用的新实例。 这些实例称为副本。

在本教程中,你会将 HTTP 缩放规则添加到容器应用,并观察应用程序的缩放方式。

先决条件

要求 说明
Azure 帐户 如果没有 Azure 帐户,可以免费创建一个

需要拥有 Azure 订阅的“参与者”权限才能继续操作。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色
GitHub 帐户 免费获得一个。
Azure CLI 安装 Azure CLI

设置

若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。

az login

为了确保运行最新版本的 CLI,请运行升级命令。

az upgrade

接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。

az extension add --name containerapp --upgrade

现在已安装当前扩展或模块,接下来请注册 Microsoft.AppMicrosoft.OperationalInsights 命名空间。

注意

Azure 容器应用资源已从 Microsoft.Web 命名空间迁移到 Microsoft.App 命名空间。 有关详细信息,请参阅 2022 年 3 月从 Microsoft.Web 到 Microsoft.App 的命名空间迁移

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

创建和部署容器应用

使用containerapp up命令创建和部署容器应用。 此命令创建:

  • 资源组
  • 容器应用环境
  • Log Analytics 工作区

如果其中任何资源已存在,该命令会使用现有资源,而不是新建资源。

最后,该命令使用公共容器映像创建和部署容器应用。

az containerapp up \
  --name my-container-app \
  --resource-group my-container-apps \
  --location centralus \
  --environment 'my-container-apps' \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --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 \
    --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://[::]:8080"
}
{
	"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--9uj51l6",
	"ReplicaName":"my-container-app--9uj51l6-5f96557ffb-f795d",
	"Msg":"Replica 'my-container-app--9uj51l6-5f96557ffb-f795d' has been scheduled to run on a node.",
	"Reason":"AssigningReplica",
	"EventSource":"ContainerAppController",
	"Count":0
}

在 Azure 门户中查看缩放(可选)

  1. 登录 Azure 门户
  2. 在顶部的“搜索”栏中,输入“my-container-app”。
  3. 在搜索结果的“资源”下,选择“my-container-app”。
  4. 在左侧导航栏中,展开“应用程序”,然后选择“缩放和副本”。
  5. 在“缩放和副本”页面,选择“副本”。
  6. 容器应用现在正在运行多个副本。

容器应用副本的屏幕截图。

可能需要选择“刷新”以查看新副本。

  1. 在左侧导航栏中,展开“监视”,然后选择“指标”。

  2. 在“指标”页面,将“指标”设置为“请求”。

  3. 选择“应用拆分”。

  4. 展开“”下拉列表并检查“副本”。

  5. 选择蓝色复选标记图标以完成拆分的编辑。

  6. 此图显示了容器应用收到的请求(按副本拆分)。

    容器应用指标图,显示了按副本拆分的请求。

  7. 默认情况下,图形比例设置为过去 24 小时,时间粒度为 15 分钟。 选择比例并将其更改为过去 30 分钟,时间粒度为 1 分钟。 选择 Apply 按钮。

  8. 在图上选择并拖动以突出显示容器应用收到的请求的最近增加情况。

容器应用指标图的屏幕截图,显示了按副本拆分的请求,比例为 30 分钟,时间粒度为一分钟。

以下屏幕截图显示了容器应用收到的请求如何在副本之间划分的放大视图。

容器应用指标图的屏幕截图,显示了按副本拆分的请求(放大视图)。

清理资源

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

注意

以下命令删除指定的资源组及其包含的所有资源。 如果指定的资源组中存在本教程范围外的资源,这些资源也会被删除。

az group delete --name my-container-apps

提示

遇到问题? 在 Azure 容器应用存储库中提交问题,告知我们有关 GitHub 的信息。

后续步骤