Нужна помощь в повторной настройке существующего узла Azure в пуле пакетных операций Azure с настройкой виртуальной машины - PullRequest
1 голос
/ 28 марта 2019

У кого-нибудь есть советы о том, как заново отобразить узлы Linux в моей учетной записи пакетного пула Azure, не изменяя размер до 0, затем возвращаясь к N, или удаляя пул и создавая его заново?

Или это рекомендуемая лучшая практика

Подробнее:

У меня проблемы с переизображением лазурного узла. Когда я обновляю образ докера и повторно развертываю, используя шаблон ARM, узел не извлекает последний образ докера. Я думаю, что это может быть потому, что имя изображения то же самое (я всегда хочу последнее изображение)

Я пытался использовать:

Reset-AzureBatchComputeNode, но это дает мне следующую ошибку на fiddler: «Повторное изображение операции может быть вызвано только для пулов, созданных с помощью cloudServiceConfiguration». Я не могу использовать конфигурацию облачного сервиса, потому что машина должна быть машиной Linux.

Restart-AzureBatchComputeNode, но это только перезапускает узел, а не перерисовывает его

Возможно, мне придется просто обнулить узлы (изменить размер до 0, затем снова увеличить столько, сколько мне нужно), или просто удалить пул и затем снова настроить его. Но эти варианты кажутся «ядерными», и пакетная служба будет недоступна, пока узлы не будут снова запущены.

шаблон руки, который я использую для развертывания / обновления пула пакетов

{
      "name": "[concat(parameters('batchAccountName'), '/<pool-name>')]",
      "type": "Microsoft.Batch/batchAccounts/pools",
      "apiVersion": "2018-12-01",
      "properties": {
        "vmSize": "[parameters('vmSize')]",
        "deploymentConfiguration": {
          "virtualMachineConfiguration": {
            "nodeAgentSkuId": "batch.node.ubuntu 16.04",
            "imageReference": {
              "publisher": "microsoft-azure-batch",
              "offer": "ubuntu-server-container",
              "sku": "16-04-lts",
              "version": "latest"
            },
            "containerConfiguration": {
              "type": "DockerCompatible",
              "containerImageNames": [
                "[concat(parameters('containerRegistryServer'), '/<container-name>')]"
              ],
              "containerRegistries": [
                <credentials>
              ]
            }
          }
        },
        "scaleSettings": {
          "fixedScale": {
            "targetDedicatedNodes": "[parameters('targetDedicatedNodes')]"
          }
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Batch/batchAccounts', parameters('batchAccountName'))]"
      ]
    },

-

UPDATE:

Спасибо @fpark, с вашим советом я разработал следующий скрипт powershell на случай, если кто-нибудь еще

Write-Output "Building docker image"
$imageHashBeforeBuild = docker images $DockerImageName --format "{{.ID}}" --no-trunc
docker build -t $DockerImageName $pathToEnergyModel
if (!$?) {
    throw "Docker image $DockerImageName failed to build"
}
$imageHashAfterBuild = docker images $DockerImageName --format "{{.ID}}" --no-trunc

...

$batchContext = Get-AzureRmBatchAccount -Name $batchAccountName

...

# The nodes should only be reimaged if the model has an update and this is NOT a new deployment
$ShouldReimageNodes = $IsUpdate -and $imageHashBeforeBuild -and ($imageHashBeforeBuild -ne $imageHashAfterBuild)
# The batchAccountDeployment step will create/update batch accounts/pools, 
# However, the deployment does not update the VM image to the latest present in the docker container registry
# This is likely due to the ARM template having the same settings, so it doesn't know to try pull the image down again
# As a work around:
#   1) Grab all current nodes
#   2) For each node:
#       a) Bring it down (this has a side effect of reducing TargetDedicatedComputeNodes by 1)
#       b) Resize the number of TargetDedicatedComputeNodes to correct value (i.e. spin up a node to replace the one downed in 2a)
# When the VM's come back up, they indeed pull the latest docker image
if ($ShouldReimageNodes) {
    # Wait for nodes to stabilize
    Write-Host "Difference in docker images detected. Restarting each node one at a time to ensure latest docker image is being used."
    while ((Get-AzureBatchPool -BatchContext $batchContext -Id $PoolName).AllocationState -ne "Steady") {
        Write-Host "Waiting for nodes in $PoolName to stabilize. Checking status again in $SleepTime seconds."
        Start-Sleep -Seconds $SleepTime
    }
    $nodes = Get-AzureBatchComputeNode -PoolId $PoolName -BatchContext $batchContext
    $currentNodeCount = $nodes.Length
    foreach ($node in $nodes) {
        $nodeId = $node.Id
        Write-Host "Removing node $nodeId"
        Remove-AzureBatchComputeNode -ComputeNode $node -BatchContext $batchContext -Force
        while ((Get-AzureBatchPool -BatchContext $batchContext -Id $PoolName).AllocationState -ne "Steady") {
            Write-Host "Waiting for nodes in $PoolName to stabilize. Checking status again in $SleepTime seconds."
            Start-Sleep -Seconds $SleepTime
        }
        Write-Host "Resizing back to $currentNodeCount"
        Start-AzureBatchPoolResize -Id $PoolName -BatchContext $batchContext -TargetDedicatedComputeNodes $currentNodeCount
        while ((Get-AzureBatchPool -BatchContext $batchContext -Id $PoolName).AllocationState -ne "Steady") {
            Write-Host "Waiting for nodes in $PoolName to stabilize. Checking status again in $SleepTime seconds."
            Start-Sleep -Seconds $SleepTime
        }
    }
}

1 Ответ

1 голос
/ 28 марта 2019

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

Вы можете эмулировать повторное отображение набора узлов, вызвав Remove-AzureBatchComputeNode командлетов, затем изменив размер до желаемого размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...