对 Batch 池使用扩展

扩展是一种小型应用程序,用于帮助在 Batch 计算节点上进行预配后配置和设置。 可以选择任一允许的扩展,并在预配后将其安装在计算节点上。 之后,扩展就可执行其预期操作。

可查看所用扩展的实时状态,并检索它们返回的信息,以实现任何检测、更正或诊断功能。

先决条件

  • 使用扩展的池必须采用虚拟机配置
  • CustomScript 扩展类型是为 Azure Batch 服务保留的,不能被替代。
  • 某些扩展可能需要可在计算节点的上下文中访问的池级托管标识才能正常运行。 请参阅在 Batch 池中配置托管标识(如果适用于扩展)。

提示

无法将扩展添加到现有池。 必须重新创建池才能添加、删除或更新扩展。

支持的扩展

目前可在创建 Batch 池时安装以下扩展:

可通过创建支持请求来请求对其他发布服务器和/或扩展类型的支持。

创建使用扩展的池

下面的示例会创建使用 Azure Key Vault 扩展的 Linux/Windows 节点 Batch 池。

REST API URI

 PUT https://management.chinacloudapi.cn/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Batch/batchAccounts/<batchaccountName>/pools/<batchpoolName>?api-version=2021-01-01

Linux 节点的请求正文

{
  "name": "test1",
  "type": "Microsoft.Batch/batchAccounts/pools",
  "properties": {
    "vmSize": "STANDARD_D2S_V5",
    "taskSchedulingPolicy": {
      "nodeFillType": "Pack"
    },
    "deploymentConfiguration": {
      "virtualMachineConfiguration": {
        "imageReference": {
          "publisher": "Canonical",
          "offer": "ubuntu-24_04-lts",
          "sku": "server",
          "version": "latest"
        },
        "nodeAgentSkuId": "batch.node.ubuntu 24.04",
        "extensions": [
          {
            "name": "secretext",
            "type": "KeyVaultForLinux",
            "publisher": "Microsoft.Azure.KeyVault",
            "typeHandlerVersion": "3.0",
            "autoUpgradeMinorVersion": true,
            "settings": {
              "secretsManagementSettings": {
                "pollingIntervalInS": "300",
                "certificateStoreLocation": "/var/lib/waagent/Microsoft.Azure.KeyVault",
                "requireInitialSync": true,
                "observedCertificates": [
                  "https://testkvchinanorth2.vault.azure.cn/secrets/authsecreat"
                ]
              },
              "authenticationSettings": {
                "msiEndpoint": "http://169.254.169.254/metadata/identity",
                "msiClientId": "885b1a3d-f13c-4030-afcf-9f05044d78dc"
              }
            },
            "protectedSettings": {}
          }
        ]
      }
    },
    "scaleSettings": {
      "fixedScale": {
        "targetDedicatedNodes": 1,
        "targetLowPriorityNodes": 0,
        "resizeTimeout": "PT15M"
      }
    }
  },
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ACR/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testumaforpools": {}
    }
  }
}

Windows 节点的请求正文

{
    "name": "test1",
    "type": "Microsoft.Batch/batchAccounts/pools",
    "properties": {
        "vmSize": "STANDARD_D4S_V5",
        "taskSchedulingPolicy": {
            "nodeFillType": "Pack"
        },
        "deploymentConfiguration": {
            "virtualMachineConfiguration": {
                "imageReference": {
                    "publisher": "microsoftwindowsserver",
                    "offer": "windowsserver",
                    "sku": "2025-datacenter",
                    "version": "latest"
                },
                "nodeAgentSkuId": "batch.node.windows amd64",
                "extensions": [
                    {
                        "name": "secretext",
                        "type": "KeyVaultForWindows",
                        "publisher": "Microsoft.Azure.KeyVault",
                        "typeHandlerVersion": "3.0",
                        "autoUpgradeMinorVersion": true,
                        "settings": {
                            "secretsManagementSettings": {
                                "pollingIntervalInS": "300",
                                "requireInitialSync": true,
                                "observedCertificates": [
                                    {
                                        "https://testkvchinanorth2.vault.azure.cn/secrets/authsecreat"
                                        "certificateStoreLocation": "LocalMachine",
                                        "keyExportable": true
                                    }
                                ]
                            },
                            "authenticationSettings": {
                                "msiEndpoint": "http://169.254.169.254/metadata/identity",
                                "msiClientId": "885b1a3d-f13c-4030-afcf-9f05044d78dc"
                            }
                        },
                        "protectedSettings":{}
                    }
                ]
            }
        },
        "scaleSettings": {
            "fixedScale": {
                "targetDedicatedNodes": 1,
                "targetLowPriorityNodes": 0,
                "resizeTimeout": "PT15M"
            }
        }
    },
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ACR/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testumaforpools": {}
        }
    }
}

从池中获取扩展数据

下面的示例从 Azure Key Vault 扩展检索数据。

REST API URI

 GET https://<accountName>.<region>.batch.chinacloudapi.cn/pools/<poolName>/nodes/<tvmNodeName>/extensions/secretext?api-version=2010-01-01

响应正文

{
  "odata.metadata": "https://testchinanorth2batch.chinanorth2.batch.chinacloudapi.cn/$metadata#extensions/@Element",
  "instanceView": {
    "name": "secretext",
    "statuses": [
      {
        "code": "ProvisioningState/succeeded",
        "level": 0,
        "displayStatus": "Provisioning succeeded",
        "message": "Successfully started Key Vault extension service. 2021-02-08T19:49:39Z"
      }
    ]
  },
  "vmExtension": {
    "name": "KVExtensions",
    "publisher": "Microsoft.Azure.KeyVault",
    "type": "KeyVaultForLinux",
    "typeHandlerVersion": "1.0",
    "autoUpgradeMinorVersion": true,
    "settings": "{\r\n  \"secretsManagementSettings\": {\r\n    \"pollingIntervalInS\": \"300\",\r\n    \"certificateStoreLocation\": \"/var/lib/waagent/Microsoft.Azure.KeyVault\",\r\n    \"requireInitialSync\": true,\r\n    \"observedCertificates\": [\r\n      \"https://testkvchinanorth2.vault.azure.cn/secrets/testumi\"\r\n    ]\r\n  },\r\n  \"authenticationSettings\": {\r\n    \"msiEndpoint\": \"http://169.254.169.254/metadata/identity\",\r\n    \"msiClientId\": \"885b1a3d-f13c-4030-afcf-922f05044d78dc\"\r\n  }\r\n}"
  }
}

排查 Key Vault 扩展问题

如果 Key Vault 扩展配置错误,则计算节点可能处于可用状态。 若要排查 Key Vault 扩展失败问题,可以暂时将 requireInitialSync 设置为 false,然后重新部署池。 计算节点处于空闲状态后,可以登录到计算节点,检查 KeyVault 扩展日志是否存在错误并修复配置问题。 有关详细信息,请访问以下 Key Vault 扩展文档链接。

应用程序健康扩展的考虑因素

在节点上运行的 Batch 节点代理始终启动返回代理运行状况的 HTTP 服务器。 此 HTTP 服务器侦听本地 IP 地址 127.0.0.1 和端口 29879。 它始终返回 200 状态,但响应正文处于正常或不正常状态。 任何其他响应(或缺少)都被视为“未知”状态。 此设置符合运行 HTTP 服务器的准则,该服务器根据官方的“应用程序健康扩展”文档提供“丰富的运行状况状态”。

如果设置自己的健康服务器,确保 HTTP 服务器侦听唯一端口。 您的健康服务器应查询 Batch Node 代理服务器,并结合您的健康信号生成综合健康结果。 否则,最终可能会有一个“健康的”节点,该节点没有正常运行的 Batch 代理。

后续步骤