У кого-нибудь есть советы о том, как заново отобразить узлы 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
}
}
}