Compartilhar via


Usar extensões com pools do Lote

Extensões são aplicativos pequenos que facilitam a definição e a configuração pós-provisionamento em nós de computação do Lote. Você pode selecionar qualquer uma das extensões permitidos e instalá-las nos nós de computação conforme elas são provisionadas. Depois disso, a extensão pode executar a operação pretendida.

Você pode verificar o status ao vivo das extensões utilizadas e recuperar as informações retornadas para buscar recursos de detecção, correção ou diagnóstico.

Pré-requisitos

Dica

As extensões não podem ser adicionadas a um pool existente. Os pools devem ser recriados para adicionar, remover ou atualizar extensões.

Extensões com suporte

As extensões a seguir no momento podem ser instaladas ao criar um pool do Lote:

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 a seguir cria um pool de nós do Linux/Windows do Lote que usa a extensão do 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

Corpo da solicitação de nó do 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 da solicitação de nó do 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": {}
        }
    }
}

Obter dados de extensão de um pool

O exemplo a seguir recupera dados da extensão do 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

Corpo da 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 do Key Vault

Se a extensão do Key Vault estiver configurada incorretamente, o nó de computação poderá estar em um estado utilizável. Para solucionar problemas de falha de extensão do Key Vault, você pode definir temporariamente requireInitialSync para false e reimplantar o pool. Depois que o nó de computação estiver em estado ocioso, você poderá fazer login no nó de computação para verificar os erros nos logs de extensão do KeyVault e corrigir os problemas de configuração. Visite os links do documento de extensão do Key Vault a seguir para obter mais informações.

Considerações sobre a extensão de Integridade do Aplicativo

O Agente de Nó do Lote sendo executado no nó sempre inicia um servidor HTTP que retorna o status de integridade do agente. Esse servidor HTTP escuta o endereço IP local 127.0.0.1 e a porta 29879. Ele sempre retorna um status 200, mas com o corpo da resposta sendo íntegro ou não íntegro. Qualquer outra resposta (ou falta dela) é considerada um status "desconhecido". Essa configuração está em linha com as diretrizes para a execução de um servidor HTTP que fornece um "Estado de Saúde Completo" de acordo com a documentação oficial da "extensão Application Health".

Se você configurar seu próprio servidor de saúde, assegure-se de que o servidor HTTP escute em uma porta exclusiva. Seu servidor de saúde deve consultar o servidor do Agente de Nó de Lote e combinar com seu sinal de saúde para gerar um resultado de saúde composto. Caso contrário, você poderá acabar com um nó "íntegro" que não tenha um Agente do Lote funcionando corretamente.

Próximas etapas