Руководство по изменению масштабируемого набора виртуальных машин с помощью Azure CLI

На протяжении всего жизненного цикла приложений может потребоваться изменить или обновить масштабируемый набор виртуальных машин. Это может быть обновление конфигурации масштабируемого набора или изменение конфигурации приложения. В этой статье описывается изменение существующего масштабируемого набора с помощью Azure CLI.

Обновление модели масштабируемого набора

Масштабируемый набор содержит модель, которая фиксирует требуемое состояние набора в целом. Чтобы запросить модель для масштабируемого набора, можно использовать az vmss show:

az vmss show --resource-group myResourceGroup --name myScaleSet

Точное представление выходных данных зависит от параметров, введенных в команде. Ниже показан сокращенный пример выходных данных Azure CLI.

{
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
  "location": "eastus",
  "name": "myScaleSet",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": 2,
    "name": "Standard_DS1_v2",
    "tier": "Standard"
  },
  "timeCreated": "2022-11-29T22:16:43.250912+00:00",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
    "networkProfile": {
      "networkApiVersion": "2020-11-01",
      "networkInterfaceConfigurations": [
        {
          "deleteOption": "Delete",
          "disableTcpStateTracking": false,
          "dnsSettings": {
            "dnsServers": []
          },
          "enableIpForwarding": false,
          "ipConfigurations": [
            {
              "applicationGatewayBackendAddressPools": [],
              "applicationSecurityGroups": [],
              "loadBalancerBackendAddressPools": [
                {
                  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                  "resourceGroup": "myResourceGroup"
                }
              ],
              "name": "mysca2215IPConfig",
              "privateIpAddressVersion": "IPv4",
              "subnet": {
                "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
                "resourceGroup": "myResourceGroup"
              }
            }
          ],
          "name": "mysca2215Nic",
          "networkSecurityGroup": {
            "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
            "resourceGroup": "myResourceGroup"
          },
          "primary": true
        }
      ]
    },
    "osProfile": {
      "allowExtensionOperations": true,
      "computerNamePrefix": "myScaleS",
      "linuxConfiguration": {
        "disablePasswordAuthentication": true,
        "enableVmAgentPlatformUpdates": false,
        "patchSettings": {
          "assessmentMode": "ImageDefault",
          "patchMode": "ImageDefault"
        },
        "provisionVmAgent": true,
      },
    },
    "storageProfile": {
      "imageReference": {
        "offer": "0001-com-ubuntu-server-jammy",
        "publisher": "Canonical",
        "sku": "22_04-lts",
        "version": "latest"
      },
      "osDisk": {
        "caching": "ReadWrite",
        "createOption": "FromImage",
        "deleteOption": "Delete",
        "diskSizeGb": 30,
        "managedDisk": {
          "storageAccountType": "Premium_LRS"
        },
        "osType": "Linux",
      }
    },
  },
}

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

az vmss update --name MyScaleSet --resource-group MyResourceGroup --license-type windows_server
az vmss update --name MyScaleSet --resource-group MyResourceGroup --instance-id 4 --protect-from-scale-set-actions False --protect-from-scale-in

Кроме того, если вы ранее развернули масштабируемый набор с az vmss create помощью команды, можно снова запустить az vmss create команду, чтобы обновить масштабируемый набор. Проверьте, совпадают ли все свойства в команде az vmss create с предыдущими, за исключением тех, которые вы хотите изменить. Например, ниже мы увеличиваем число экземпляров до пяти.

Важно!

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

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5

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

Как и масштабируемый набор, каждый экземпляр виртуальной машины в наборе имеет свое представление модели. Чтобы запросить представление модели для конкретного экземпляра виртуальной машины в масштабируемом наборе, можно использовать az vm show.

az vm show --resource-group myResourceGroup --name myScaleSet_Instanace1

Точное представление выходных данных зависит от параметров, введенных в команде. Ниже показан сокращенный пример выходных данных Azure CLI.

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2",
  },
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "eastus",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
    },
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "22.04.202204200",
      "offer": "0001-com-ubuntu-server-jammy",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
      "osType": "Linux",
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

Эти свойства описывают конфигурацию экземпляра виртуальной машины в масштабируемом наборе, а не конфигурацию масштабируемого набора в целом.

Вы можете выполнять обновления отдельных экземпляров виртуальных машин в масштабируемом наборе так же, как и автономная виртуальная машина. Например, присоединение нового диска данных к экземпляру 1:

az vm disk attach --resource-group myResourceGroup --vm-name myScaleSet_Instance1 --name disk_name1 --new

При запуске az vm show еще раз мы увидим, что экземпляр виртуальной машины подключен к новому диску.

  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/49d84582-7207-4a4f-824e-044e83c71887/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroup",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false,
      }
    ],

Добавление экземпляра в масштабируемый набор

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

az vm create --name myNewInstance --resource-group myResourceGroup --vmss myScaleSet --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance",
  "location": "eastus",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroup",
  "zones": ""

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

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location
-------------------  ---------------  ----------
myNewInstance         myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus

Актуальность виртуальных машин с помощью последней модели масштабируемого набора

Примечание.

Режимы обновления в настоящее время не поддерживаются в Масштабируемые наборы виртуальных машин с помощью гибкого режима оркестрации.

Масштабируемые наборы имеют политику обновления, которая определяет, как виртуальные машины обновляются в соответствии с последней моделью масштабируемого набора. Доступны три режима политики обновления:

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

Если масштабируемый набор имеет значение вручную, можно активировать обновление вручную с помощью az vmss update.

az vmss update --resource-group myResourceGroup --name myScaleSet

Примечание.

В кластерах Service Fabric можно использовать только автоматический режим, но обновление обрабатывается по-разному. Дополнительные сведения см. в разделе Обновление приложения Service Fabric.

Повторное создание масштабируемого набора

Масштабируемые наборы виртуальных машин создаст уникальное имя для каждой виртуальной машины в масштабируемом наборе. Соглашение об именовании отличается режимом оркестрации:

  • Режим гибкой оркестрации: {scale-set-name}_{8-char-guid}
  • Единый режим оркестрации: {scale-set-name}_{instance-id}

В случаях, когда необходимо повторно создать образ конкретного экземпляра, используйте az vmss reimage и укажите имена экземпляров.

az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id myScaleSet_Instance1

Обновление образа ОС масштабируемого набора

У вас может быть масштабируемый набор, который запускает старую версию Ubuntu. Вы хотите обновить до более новой версии Ubuntu, например версии 22.04.202204200. Свойство эталонной версии образа не является частью списка, поэтому вы можете напрямую изменить эти свойства с помощью az vmss update.

az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=22.04.202204200

Также может потребоваться изменить образ, используемый масштабируемым набором. Например, может потребоваться обновить или изменить пользовательский образ, используемый масштабируемым набором. Чтобы изменить образ, используемый масштабируемым набором, измените свойство идентификатора эталонного изображения. Свойство идентификатора ссылки на образ не является частью списка, поэтому вы можете напрямую изменить это свойство с помощью az vmss update.

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage

При использовании образов платформы Azure их можно обновить, изменив imageReference (дополнительные сведения см. в документации по REST API).

Примечание.

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

При использовании пользовательских образов их можно обновить, изменив идентификатор imageReference (дополнительные сведения см. в документации по REST API).

Обновление подсистемы балансировки нагрузки масштабируемого набора

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

# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0

# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0

# Add the application gateway backend pool to the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

Примечание.

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

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

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

  • Обновление модели масштабируемого набора
  • Обновление отдельного экземпляра виртуальной машины в масштабируемом наборе
  • Добавление экземпляра в масштабируемый набор
  • Актуальность виртуальных машин с помощью последней модели масштабируемого набора
  • Повторное создание масштабируемого набора
  • Обновление образа ОС масштабируемого набора
  • Обновление подсистемы балансировки нагрузки масштабируемого набора