Поделиться через


Использование расширений с Batch пулами

Расширения — это небольшие приложения, которые упрощают конфигурирование и настройку после развертывания на вычислительных узлах службы Batch. Вы можете выбрать любое из разрешённых расширений и установить их на вычислительных узлах в процессе их развертывания. После этого расширение может выполнять предполагаемую операцию.

Вы можете проверить текущее состояние используемых расширений и получить информацию, которую они возвращают, чтобы воспользоваться любыми возможностями обнаружения, исправления или диагностики.

Предварительные условия

Совет

Расширения нельзя добавить в существующий пул. Для добавления, удаления или обновления расширений необходимо заново создать пулы.

Поддерживаемые расширения

В настоящее время при создании пула пакетной службы могут быть установлены следующие расширения:

Вы можете запросить поддержку других издателей и (или) типов расширений, открыв запрос на поддержку.

Создание пула с расширениями

В следующем примере создается пакетный пул узлов на базе Linux/Windows, использующий расширение Azure Key Vault.

Универсальный код ресурса (URI) REST API

 PUT https://management.azure.com/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://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": {}
    }
  }
}

Текст запроса для узла 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": {}
        }
    }
}

Получение данных расширения из пула

В следующем примере извлекаются данные из расширения Azure Key Vault.

Универсальный код ресурса (URI) REST API

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

Текст ответа

{
  "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}"
  }
}

Устранение неполадок с расширением Key Vault

Если расширение Key Vault настроено неправильно, вычислительный узел может находиться в состоянии, доступном для использования. Чтобы устранить сбой расширения Key Vault, можно временно установить requireInitialSync на false и повторно развернуть пул. После того как вычислительный узел находится в состоянии простоя, вы можете войти в вычислительный узел, чтобы проверить журналы расширений KeyVault для ошибок и устранить проблемы с конфигурацией. Посетите следующие ссылки для получения большей информации о расширении Key Vault.

Вопросы по расширению контроля работоспособности приложений

Агент пакетного узла, работающий на узле, всегда запускает HTTP-сервер, который возвращает состояние работоспособности агента. Этот HTTP-сервер прослушивает локальный IP-адрес 127.0.0.1 и порт 29879. Он всегда возвращает состояние 200, но при этом тело ответа является здоровым или неработоспособным. Любой другой ответ (или его отсутствие) считается "неизвестным" состоянием. Эта настройка соответствует руководствам по управлению HTTP-сервером, который предоставляет "Подробное состояние работоспособности" в соответствии с официальной документацией по расширению работоспособности приложений.

Если вы настроили собственный сервер мониторинга состояния, убедитесь, что HTTP-сервер прослушивает уникальный порт. Сервер работоспособности должен запрашивать сервер Batch Node Agent и объединять ваш сигнал работоспособности для создания составного результата работоспособности. В противном случае может получиться "исправный" узел, у которого нет правильно функционирующего агента пакетной обработки.

Следующие шаги