Partilhar via


Utilize extensões com pools do Batch

As extensões são pequenas aplicações que facilitam a configuração e o ajuste pós-provisionamento em nós de computação de processamento em lote. Podes selecionar qualquer uma das extensões permitidas e instalá-las nos nós de computação à medida que forem provisionadas. Depois disso, a extensão pode realizar a operação pretendida.

Você pode verificar o status em tempo real das extensões que você usa e recuperar as informações que elas retornam para buscar quaisquer recursos de deteção, correção ou diagnóstico.

Pré-requisitos

  • Os pools com extensões devem usar a Configuração da Máquina Virtual.
  • O tipo de extensão CustomScript está reservado para o serviço Batch do Azure e não pode ser substituído.
  • Algumas extensões podem precisar que a Identidade Gerenciada a nível do pool esteja acessível no contexto de um nó de computação para funcionar corretamente. Veja configurar identidades geridas em pools do Batch, se aplicável às extensões.

Tip

Extensões não podem ser adicionadas a uma piscina existente. As piscinas devem ser recriadas para adicionar, remover ou atualizar extensões.

Extensões suportadas

Atualmente, as seguintes extensões podem ser instaladas ao criar um pool de lotes:

Você pode solicitar suporte para outros editores e/ou tipos de extensão abrindo uma solicitação de suporte.

Criar um pool com extensões

O exemplo seguinte cria um pool de Batch com nós Linux/Windows que usa a extensão Azure Key Vault.

URI da API REST

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

Request Body para o nó 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://testkvwestus2.vault.azure.net/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": {}
    }
  }
}

Corpo de Pedido para nó 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://testkvwestus2.vault.azure.net/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": {}
        }
    }
}

Obtenha dados de extensão de um pool

O exemplo a seguir recupera dados da extensão Azure Key Vault.

URI da API REST

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

Organismo de resposta

{
  "odata.metadata": "https://testwestus2batch.westus2.batch.azure.com/$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://testkvwestus2.vault.azure.net/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}"
  }
}

Solução de problemas da extensão Key Vault

Se a extensão Key Vault estiver configurada incorretamente, o nó de computação pode estar num estado utilizável. Para resolver falhas na extensão do Key Vault, pode temporariamente definir requireInitialSync para false e, em seguida, voltar a implementar o seu pool. Quando o nó de computação está em estado inativo, pode iniciar sessão no nó de computação para verificar os registos de extensão do KeyVault à procura de erros e corrigir os problemas de configuração. Visite os seguintes links da documentação da extensão Key Vault para mais informações.

Considerações para a extensão da Saúde da Aplicação

O Agente de Nodo em Batch em execução no nodo inicia sempre um servidor HTTP que retorna o estado de saúde do agente. Este servidor HTTP escuta o endereço IP local 127.0.0.1 e a porta 29879. Devolve sempre um estado de 200, mas com o corpo de resposta a ser saudável ou pouco saudável. Qualquer outra resposta (ou falta dela) é considerada um status "desconhecido". Esta configuração está em linha com as diretrizes que executam um servidor HTTP que fornece um "Estado de Saúde Rico" conforme a documentação oficial da "extensão de Saúde da Aplicação".

Se configurares o teu próprio servidor de saúde, certifica-te de que o servidor HTTP ouve numa porta única. O seu servidor de saúde deve consultar o servidor Batch Node Agent e combiná-lo com o seu sinal de saúde para gerar um resultado de saúde composto. Caso contrário, pode acabar com um nó "saudável" que não tenha um Agente Batch a funcionar corretamente.

Próximos passos