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

在专用的代理池上运行 ACR 任务

设置 Azure 管理的 VM 池(代理池),以便能够在专用的计算环境中运行 Azure 容器注册表任务。 在注册表中配置了一个或多个池之后,可以选择某个池替代服务的默认计算环境来运行任务。

代理池提供以下功能:

  • 虚拟网络支持 - 将代理池分配到 Azure VNet,提供对该 VNet 中资源(例如容器注册表、密钥保管库或存储)的访问。
  • 根据需要进行缩放 - 为计算密集型任务增加代理池中的实例数,或缩放到零。 计费是基于池分配的。 有关详细信息,请参阅定价
  • 灵活的选项 - 选择不同的池层和缩放选项,以满足任务工作负载需求。
  • Azure 管理 - 任务池由 Azure 进行修补和维护,提供了保留的分配,无需维护单个的 VM。

此功能在“高级”容器注册表服务层级中可用。 有关注册表服务层级和限制的信息,请参阅 Azure 容器注册表 SKU

重要

此功能目前以预览版提供,存在一些限制。 需同意补充使用条款才可使用预览版。 在正式版 (GA) 推出之前,此功能的某些方面可能会有所更改。

预览版限制

  • 任务代理池目前支持 Linux 节点。 目前不支持 Windows 节点。
  • 任务代理池以预览版形式在以下区域中提供:美国西部 2、美国中南部、美国东部 2、美国东部、美国中部、欧洲西部、欧洲北部、加拿大中部、东亚、瑞士北部、USGov 亚利桑那州、USGov 德克萨斯州和 USGov 弗吉尼亚州。
  • 对于每个注册表,所有标准代理池的默认 vCPU(核心)总配额为 16,独立代理池的此总配额则为 0。 如需更多分配,请提出支持请求
  • 目前无法取消代理池上的任务运行。

先决条件

  • 若要使用本文中所述的 Azure CLI 步骤,需要安装 Azure CLI 版本 2.3.1 或更高版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 或是在 Azure Cloud Shell 中运行。
  • 如果还没有容器注册表,请在某个预览版区域中创建一个(需要“高级”层)。

池层

代理池层在池中按实例提供以下资源。

类型 CPU 内存 (GB)
S1 standard 2 3
S2 standard 4 8
S3 standard 8 16
I6 已隔离 64 216

创建和管理任务代理池

设置默认注册表(可选)

若要简化后面的 Azure CLI 命令,请通过运行 az config 命令来设置默认注册表:

az config set defaults.acr=<registryName>

以下示例假定已经设置了默认注册表。 如果尚未设置,请在每个 az acr 命令中传递 --registry <registryName> 参数。

创建代理池

通过使用 az acr agentpool create 命令来创建代理池。 以下示例创建层 S2 池(4 CPU/实例)。 在默认情况下,该池包含 1 个实例。

az acr agentpool create \
    --registry MyRegistry \
    --name myagentpool \
    --tier S2

注意

创建代理池和其他池管理操作需要几分钟才能完成。

缩放池

使用 az acr agentpool update 命令来纵向扩展或纵向缩减池大小。 下面的示例将池缩放到 2 个实例。 可以缩放到 0 个实例。

az acr agentpool update \
    --registry MyRegistry \
    --name myagentpool \
    --count 2

在虚拟网络中创建池

添加防火墙规则

任务代理池需要访问以下 Azure 服务。 必须将以下防火墙规则添加到任何现有的网络安全组或用户定义的路由。

方向 协议 Source Port 目标 Dest Port 已使用
出站 TCP VirtualNetwork 任意 AzureKeyVault 443 默认
出站 TCP VirtualNetwork 任意 存储 443 默认
出站 TCP VirtualNetwork 任意 EventHub 443 默认
出站 TCP VirtualNetwork 任意 AzureActiveDirectory 443 默认
出站 TCP VirtualNetwork 任意 AzureMonitor 443 默认

注意

如果任务需要来自公共 Internet 的其他资源,请添加相应的规则。 例如,需要其他规则来运行从 Docker Hub 拉取基础映像的 docker 生成任务,或者来还原某个 NuGet 包。

以 MCR 为部署基础的客户可参考 MCR/MAR 防火墙规则。

在 VNet 中创建池

以下示例在 myvnet 网络的 mysubnet 子网中创建代理池 :

# Get the subnet ID
subnetId=$(az network vnet subnet show \
        --resource-group myresourcegroup \
        --vnet-name myvnet \
        --name mysubnetname \
        --query id --output tsv)

az acr agentpool create \
    --registry MyRegistry \
    --name myagentpool \
    --tier S2 \
    --subnet-id $subnetId

在代理池上运行任务

下面的示例演示如何在对任务排队时指定代理池。

注意

若要在 ACR 任务中使用代理池,请确保该池至少包含 1 个实例。

快速任务

通过使用 az acr build 命令在代理池上将快速任务排队,并传递 --agent-pool 参数:

az acr build \
    --registry MyRegistry \
    --agent-pool myagentpool \
    --image myimage:mytag \
    --file Dockerfile \
    https://github.com/Azure-Samples/acr-build-helloworld-node.git#main

自动触发的任务

例如,使用 az acr task create 在代理池是创建计划的任务,传递 --agent-pool 参数。

az acr task create \
    --registry MyRegistry \
    --name mytask \
    --agent-pool myagentpool \
    --image myimage:mytag \
    --schedule "0 21 * * *" \
    --file Dockerfile \
    --context https://github.com/Azure-Samples/acr-build-helloworld-node.git#main \
    --commit-trigger-enabled false

若要验证任务设置,请运行 az acr task run

az acr task run \
    --registry MyRegistry \
    --name mytask

查询池状态

若要查找代理池上目前计划的运行的数量,请运行 az acr agentpool show

az acr agentpool show \
    --registry MyRegistry \
    --name myagentpool \
    --queue-count

后续步骤

如需更多关于云中容器映像生成和维护的示例,请查看 ACR 任务教程系列