Использование настраиваемых политик масштабирования с помощью Azure Масштабируемые наборы виртуальных машин

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

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

  1. Значение по умолчанию
  2. NewestVM
  3. OldestVM

Политика горизонтального уменьшения масштаба Default (по умолчанию)

Гибкая оркестрация

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

Универсальная оркестрация

По умолчанию масштабируемый набор виртуальных машин применяет эту политику, чтобы определить, какие экземпляры будут масштабироваться. При использовании политики Default (по умолчанию) виртуальные машины выбираются для горизонтального уменьшения масштаба в следующем порядке:

  1. Балансировка виртуальных машин в разных зонах доступности (если масштабируемый набор развернут в зональной конфигурации).
  2. Балансировка виртуальных машин в доменах сбоя (наилучшие трудозатраты).
  3. Удаление виртуальной машины с наибольшим идентификатором экземпляра.

Пользователям не нужно указывать политику масштабирования, если они просто хотят выполнить порядок по умолчанию.

Балансировка между зонами доступности или доменами сбоя не перемещает экземпляры между зонами доступности или доменами сбоя. Балансировка обеспечивается за счет удаления виртуальных машин из несбалансированных зон доступности или доменов сбоя до тех пор, пока распределение виртуальных машин не будет сбалансировано.

Политика горизонтального уменьшения масштаба NewestVM

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

Политика горизонтального уменьшения масштаба OldestVM

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

Включение политики горизонтального уменьшения масштаба

Политика масштабирования определяется в модели масштабируемого набора виртуальных машин. Как отмечалось в предыдущих разделах, необходимо определение политики масштабирования при использовании политик NewestVM и "OldestVM". Масштабируемый набор виртуальных машин автоматически будет использовать политику масштабирования по умолчанию, если в модели масштабируемого набора не найдено определение политики масштабирования.

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

Портал Azure

Следующие шаги определяют политику горизонтального уменьшения масштаба при создании нового масштабируемого набора.

  1. Перейдите к Масштабируемые наборы виртуальных машин.
  2. Нажмите кнопку + Добавить, чтобы создать новый масштабируемый набор.
  3. Перейдите на вкладку Масштабирование.
  4. Откройте раздел Политика горизонтального уменьшения масштаба.
  5. Выберите политику горизонтального уменьшения масштаба в раскрывающемся списке.
  6. После создания нового масштабируемого набора нажмите кнопку "Проверить и создать ".

С помощью API

Выполните put в масштабируемом наборе виртуальных машин с помощью API 2019-03-01:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["OldestVM"]  
        } 
    }    
} 

Azure PowerShell

Важно!

Начиная с ноября 2023 года масштабируемые наборы виртуальных машин, созданные с помощью PowerShell и Azure CLI, по умолчанию будут использоваться в режиме гибкой оркестрации, если режим оркестрации не указан. Дополнительные сведения об этом изменении и о действиях, которые необходимо предпринять, см. в руководстве по критическим изменениям для клиентов VmSS PowerShell/CLI — Microsoft Community Hub

Создайте группу ресурсов, а затем создайте новый масштабируемый набор с политикой горизонтального уменьшения масштаба, установленной как OldestVM.

New-AzResourceGroup -ResourceGroupName "myResourceGroup" -Location "<VMSS location>"
New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "<VMSS location>" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -ScaleInPolicy “OldestVM”

Azure CLI

Важно!

Начиная с ноября 2023 года масштабируемые наборы виртуальных машин, созданные с помощью PowerShell и Azure CLI, по умолчанию будут использоваться в режиме гибкой оркестрации, если режим оркестрации не указан. Дополнительные сведения об этом изменении и о действиях, которые необходимо предпринять, см. в руководстве по критическим изменениям для клиентов VmSS PowerShell/CLI — Microsoft Community Hub

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

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --orchestration-mode flexible \
  --image Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --scale-in-policy OldestVM

Использование шаблона

В шаблоне в разделе "Свойства" добавьте scaleInPolicy свойство:

"scaleInPolicy": {  
      "rules": ["OldestVM"]  
}

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

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

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

Тот же процесс применяется при использовании политики масштабирования NewestVM.

Изменение политик горизонтального уменьшения масштаба

Изменение политики горизонтального уменьшения масштаба аналогично применению политики горизонтального уменьшения масштаба. Например, если вы хотите изменить политику с "OldestVM" на "NewestVM", это можно сделать следующим образом:

Портал Azure

Политику горизонтального уменьшения масштаба существующего масштабируемого набора можно изменить на портале Microsoft Azure.

  1. В существующем масштабируемом наборе виртуальных машин выберите "Масштабирование " в меню слева.
  2. Перейдите на вкладку Политика горизонтального уменьшения масштаба.
  3. Выберите политику горизонтального уменьшения масштаба в раскрывающемся списке.
  4. По завершении выберите Сохранить.

С помощью API

Выполните put в масштабируемом наборе виртуальных машин с помощью API 2019-03-01:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01 

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["NewestVM"]  
        } 
    }    
}

Azure PowerShell

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

Update-AzVmss `
 -ResourceGroupName "myResourceGroup" `
 -VMScaleSetName "myScaleSet" `
 -ScaleInPolicy “OldestVM”

Azure CLI

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

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --scale-in-policy OldestVM

Использование шаблона

В шаблоне в разделе "Свойства" измените шаблон, как показано ниже, и выполните повторное развертывание:

"scaleInPolicy": {  
      "rules": ["NewestVM"]  
} 

Тот же процесс применяется, если вы решили изменить "NewestVM" на "Default" или "OldestVM"

Политика защиты экземпляра и горизонтального уменьшения масштаба

Масштабируемые наборы виртуальных машин обеспечить два типа защиты экземпляра:

  1. Защита от уменьшения горизонтального масштаба
  2. Защита от действий масштабируемого набора

Защищенная виртуальная машина не удаляется с помощью действия масштабирования независимо от примененной политики масштабирования. Например, если VM_0 (старая виртуальная машина в масштабируемом наборе) защищена от масштабируемого набора, а масштабируемый набор включен политикой "Старейшая виртуальная машина", VM_0 не будет рассматриваться для масштабирования, даже если она является самой старой виртуальной машиной в масштабируемом наборе.

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

Примеры использования

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

Политика горизонтального уменьшения масштаба OldestVM

Событие Идентификаторы экземпляров в Zone1 Идентификаторы экземпляров в Zone2 Идентификаторы экземпляров в Zone3 Выбор горизонтального уменьшения масштаба
Начальное 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Горизонтальное уменьшение масштаба 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Выбирается зона 1 или 2, несмотря на то что зона 3 имеет самую старую виртуальную машину. Удалите виртуальную машину из зоны 2, так как она является самой старой виртуальной машиной в этой зоне.
Горизонтальное уменьшение масштаба 3, 4, 5, 10 6, 9, 11 1, 7, 8 Выбирается зона 1, несмотря на то что зона 3 имеет самую старую виртуальную машину. Удалите vm3 из зоны 1, так как она является самой старой виртуальной машиной в этой зоне.
Горизонтальное уменьшение масштаба 4, 5, 10 6, 9, 11 1, 7, 8 Зоны сбалансированы. Удалите виртуальную машину 1 в зоне 3, так как она является самой старой виртуальной машиной в масштабируемом наборе.
Горизонтальное уменьшение масштаба 4, 5, 10 6, 9, 11 7, 8 Выбирается зона 1 или зона 2. Удалите vm4 в зоне 1, так как она является самой старой виртуальной машиной в двух зонах.
Горизонтальное уменьшение масштаба 5, 10 6, 9, 11 7, 8 Выбирается зона 2, несмотря на то что зона 1 имеет самую старую виртуальную машину. Удалите vm6 в зоне 1, так как она является самой старой виртуальной машиной в этой зоне.
Горизонтальное уменьшение масштаба 5, 10 9, 11 7, 8 Зоны сбалансированы. Удалите vm5 в зоне 1, так как она является самой старой виртуальной машиной в масштабируемом наборе.

Для незональных Масштабируемые наборы виртуальных машин политика выбирает старую виртуальную машину в масштабируемом наборе для удаления. Любая "защищенная" виртуальная машина пропускается для удаления.

Политика горизонтального уменьшения масштаба NewestVM

Событие Идентификаторы экземпляров в Zone1 Идентификаторы экземпляров в Zone2 Идентификаторы экземпляров в Zone3 Выбор горизонтального уменьшения масштаба
Начальное 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Горизонтальное уменьшение масштаба 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Выбирается зона 1 или зона 2. Удалите виртуальную машину 11 из зоны 2, так как она является самой новой виртуальной машиной в двух зонах.
Горизонтальное уменьшение масштаба 3, 4, 5, 10 2, 6, 9 1, 7, 8 Выбирается зона 1, так как в ней больше виртуальных машин, чем в двух других зонах. Удалите виртуальную машину 10 из зоны 1, так как она является самой новой виртуальной машиной в этой зоне.
Горизонтальное уменьшение масштаба 3, 4, 5 2, 6, 9 1, 7, 8 Зоны сбалансированы. Удалите vm9 в зоне 2, так как она является самой новой виртуальной машиной в масштабируемом наборе.
Горизонтальное уменьшение масштаба 3, 4, 5 2, 6 1, 7, 8 Выбирается зона 1 или зона 3. Удалите vm8 в зоне 3, так как это самая новая виртуальная машина в этой зоне.
Горизонтальное уменьшение масштаба 3, 4, 5 2, 6 1, 7 Выбирается зона 1, несмотря на то что зона 3 имеет самую новую виртуальную машину. Удалите vm5 в зоне 1, так как это самая новая виртуальная машина в этой зоне.
Горизонтальное уменьшение масштаба 3, 4 2, 6 1, 7 Зоны сбалансированы. Удалите vm7 в зоне 3, так как это самая новая виртуальная машина в масштабируемом наборе.

Для незональных Масштабируемые наборы виртуальных машин политика выбирает самую новую виртуальную машину в масштабируемом наборе для удаления. Любая "защищенная" виртуальная машина пропускается для удаления.

Устранить неполадки

  1. Сбой включения scaleInPolicy, если вы получите ошибку BadRequest с сообщением об ошибке с сообщением "Не удалось найти член scaleInPolicy" в объекте типа "properties", а затем проверка версию API, используемую для масштабируемого набора виртуальных машин. Для этой функции требуется API версии 2019-03-01 или более поздней.

  2. Неправильный выбор виртуальных машин для масштабирования см. в примерах в этом документе. Если масштабируемый набор виртуальных машин является зональным развертыванием, политика масштабирования применяется сначала к несбалансированных зонам, а затем через масштабируемый набор после балансировки зоны. Если порядок масштабирования не соответствует приведенным здесь примерам, создайте запрос с командой масштабируемого набора виртуальных машин для устранения неполадок.

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

Узнайте, как развернуть приложение на Масштабируемые наборы виртуальных машин.