练习 - 在 CLI 中创建 Azure Batch 作业以运行并行任务

已完成

借助 Azure CLI,可以从命令行创建和部署 Azure Batch 资源。

作为非营利组织的解决方案架构师,你希望开始为 Azure 上的 OCR 方案创建 Batch 解决方案。 首先,将使用 Azure CLI 测试创建批处理帐户、工作器节点池、作业和任务。

Azure CLI 是用于创建和管理 Azure 资源的跨平台命令行。 它使用的一致的 az noun verb --properties 语法。 用于管理 Azure Batch 的 CLI 命令遵循此约定,因此所有命令都采用 az batch verb --properties 形式。

重要

本模块中的练习是可选的。 要完成练习,你需要使用自己的 Azure 订阅。

创建 Azure Batch 资源

首先,将为测试场景创建 Azure Batch 帐户和工作器节点池。 然后,将创建要在池中运行的 Batch 作业和任务。

创建新的资源组

  1. 登录到 Azure 门户

  2. 在左侧菜单中,选择“资源组”

  3. 选择“+ 新建”。

  4. 填写表单,为练习创建新资源组并记下名称。

创建 Azure Batch 帐户

  1. 在门户中,选择顶部菜单中的 Cloud Shell 图标 (>_),打开 Cloud Shell。 使用终端窗口顶部的下拉菜单来确保你位于 Bash

  2. 为资源组和批处理资源创建环境变量。

    RESOURCE_GROUP=<your resource group>
    BATCH_ACCOUNT=batchaccount$RANDOM
    
  3. 在 Cloud Shell 中运行以下命令以创建 Azure Batch 帐户。 选择以下某个位置:

    westeurope,eastus,eastus2,westus,northcentralus,brazilsouth,northeurope,centralus,eastasia,japaneast,australiasoutheast,japanwest,koreasouth,koreacentral,southeastasia,southcentralus,australiaeast,southindia,centralindia,westindia,canadacentral,canadaeast,uksouth,ukwest,westcentralus,westus2,francecentral,southafricanorth
    
    az batch account create \
     --name $BATCH_ACCOUNT \
     --resource-group $RESOURCE_GROUP \
     --location <choose a location from the preceding list>
    
  4. 运行以下命令以登录 Azure Batch 帐户:

    az batch account login \
     --name $BATCH_ACCOUNT \
     --resource-group $RESOURCE_GROUP \
     --shared-key-auth
    
  5. 创建运行 Ubuntu 18.04 的三个标准 A1 v2 VM 的池:

    az batch pool create \
     --id mypool --vm-size Standard_A1_v2 \
     --target-dedicated-nodes 3 \
     --image canonical:ubuntuserver:18.04-LTS \
     --node-agent-sku-id "batch.node.ubuntu 18.04"  
    
  6. 运行以下命令以定期确定节点是否准备就绪:

    az batch pool show --pool-id mypool \
     --query "allocationState"
    

    此查询显示节点“稳定”时,表明节点可以正常运行。 如果它们显示为“正在重设大小”,则表明它们正在被预配。 如果要多次查询节点的状态,可以使用向上键在 Cloud Shell 中重复最近的命令。

  7. 运行以下命令以创建“Batch 作业”,这是在节点上运行的所有任务的逻辑分组:

    az batch job create \
     --id myjob \
     --pool-id mypool
    
  8. 运行以下命令以创建 Batch 任务:

    for i in {1..10}
    do
       az batch task create \
        --task-id mytask$i \
        --job-id myjob \
        --command-line "/bin/bash -c 'echo \$(printenv | grep \AZ_BATCH_TASK_ID) processed by; echo \$(printenv | grep \AZ_BATCH_NODE_ID)'"
    done
    

    此循环创建一系列已编号的 Batch 任务,其中每个任务都输出有关所涉及的任务 ID 和节点 ID 的信息。 通过仔细检查此处发生的情况,可以了解 Azure Batch 工作方式的一些特征。 任务会自动安排到具有可用容量的节点上。 但是,我们在使用的用于显示有关在哪个节点上运行哪个任务的信息的环境变量(AZ_BATCH_TASK_IDAZ_BATCH_NODE_ID)仅在“任务用户”(这是在每个节点上创建的用于运行任务的默认帐户)的上下文中可用。 此外,--command-line 参数不直接在 shell 下运行,因此必须使用 /bin/bash -c 明确调用 shell 才能使用 printenvgrep 等命令。

    此循环完成 Azure Batch 作业实现。 我们将保留 Azure Batch 帐户和工作器节点池以供在下一个模块中使用,但我们将删除 Batch 作业。 由于 Batch 作业充当其 Batch 任务的容器,因此也会删除任务。

  9. 在 Cloud Shell 中运行以下命令,以删除 Batch 作业:

    az batch job delete --job-id myjob -y