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


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

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

  • Автоматическая установка приложений для масштабируемого набора
  • Используйте расширение пользовательского скрипта Azure
  • Обновление работающего приложения в масштабируемом наборе

Если у вас нет подписки на Azure, создайте бесплатную учетную запись перед началом.

Azure Cloud Shell

Azure размещает Azure Cloud Shell, интерактивную среду оболочки, которую можно использовать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для выполнения кода в этой статье можно использовать предустановленные команды Cloud Shell, не устанавливая ничего в локальной среде.

Чтобы запустить Azure Cloud Shell, выполните приведенные действия.

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Снимок экрана, на котором показан пример функции
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Кнопка запуска Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Снимок экрана: кнопка

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите Enter, чтобы запустить код или команду.

Что такое расширение пользовательского скрипта Azure?

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

Расширение пользовательского скрипта интегрируется с шаблонами Azure Resource Manager. Его также можно использовать с Azure CLI, Azure PowerShell, порталом Azure или REST API. Дополнительные сведения см. в обзоре настраиваемого скриптового расширения.

Чтобы увидеть расширение пользовательского скрипта в действии, создайте масштабируемую группу виртуальных машин, которая устанавливает веб-сервер IIS и выводит имя узла экземпляра виртуальной машины этой группы. Определение расширения пользовательского скрипта загружает образец скрипта из GitHub, устанавливает необходимые пакеты, а затем записывает имя хоста экземпляра виртуальной машины на простую HTML-страницу.

Создать набор для масштабирования

Создайте группу ресурсов с помощью New-AzResourceGroup. В следующем примере создается группа ресурсов с именем myResourceGroup в расположении "Восточная часть США ".

New-AzResourceGroup -Name myResourceGroup -Location "East US"

Теперь создайте масштабируемый набор виртуальных машин с использованием команды New-AzVmss. Для распределения трафика между отдельными экземплярами виртуальных машин также создается подсистема балансировки нагрузки. Подсистема балансировки нагрузки включает правила для распределения трафика через TCP-порт 80. Он также позволяет трафику удаленного рабочего стола использовать TCP-порт 3389 и удаленное управление через PowerShell через TCP-порт 5985. При появлении запроса можно задать собственные административные учетные данные для экземпляров виртуальных машин в масштабируемом наборе:

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -Location "EastUS" `
  -UpgradePolicyMode "Manual" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" 

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

Создание определения расширения пользовательского скрипта

Azure PowerShell использует хэш-таблицы для хранения файла для скачивания и выполнения команды. В следующем примере используется пример скрипта из GitHub. Сначала создайте этот объект конфигурации следующим образом:

$customConfig = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

Теперь примените расширение пользовательского скрипта с командой Add-AzVmssExtension. Ранее определенный объект конфигурации передается в расширение. Обновите расширение в экземплярах профиля масштабируемого набора с помощью Update-AzVmss.

# Get information about the scale set
$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"

# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzVmssExtension `
  -VirtualMachineScaleSet $vmss `
  -Name "customScript" `
  -Publisher "Microsoft.Compute" `
  -Type "CustomScriptExtension" `
  -TypeHandlerVersion 1.9 `
  -Setting $customConfig

# Update the scale set
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

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

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

Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId "*"

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

Разрешить доступ трафика к приложению

Чтобы разрешить доступ к базовому веб-приложению, создайте группу безопасности сети с New-AzNetworkSecurityRuleConfig и New-AzNetworkSecurityGroup. Дополнительные сведения см. в статье Сеть для масштабируемых наборов виртуальных машин Azure.

#Create a rule to allow traffic over port 80
$nsgFrontendRule = New-AzNetworkSecurityRuleConfig `
  -Name myFrontendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

#Create a network security group and associate it with the rule
$nsgFrontend = New-AzNetworkSecurityGroup `
  -ResourceGroupName  "myResourceGroup" `
  -Location EastUS `
  -Name myFrontendNSG `
  -SecurityRules $nsgFrontendRule

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName  "myResourceGroup" `
  -Name myVnet

$frontendSubnet = $vnet.Subnets[0]

$frontendSubnetConfig = Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name mySubnet `
  -AddressPrefix $frontendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgFrontend

Set-AzVirtualNetwork -VirtualNetwork $vnet

Протестируйте масштабируемый набор

Чтобы просмотреть веб-сервер в действии, получите общедоступный IP-адрес подсистемы балансировки нагрузки с помощью команды Get-AzPublicIpAddress. В следующем примере отображается IP-адрес, созданный в группе ресурсов myResourceGroup :

Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress

Введите общедоступный IP-адрес подсистемы балансировки нагрузки в веб-браузере. Подсистема балансировки нагрузки распределяет трафик в один из экземпляров виртуальной машины, как показано в следующем примере:

Базовая веб-страница в IIS

Оставьте веб-браузер открытым, чтобы увидеть обновленную версию на следующем шаге.

Изменение политики обновления

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

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Update-Azvmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet" `
    -UpgradePolicyMode "Automatic" `
    -VirtualMachineScaleSet $vmss

Обновление развертывания приложения

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

Создайте новое определение конфигурации с именем customConfigv2. Это определение запускает обновленную версию версии 2 скрипта установки приложения:

$customConfigv2 = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis-v2.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis-v2.ps1"
}

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

$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"
 
$vmss.VirtualMachineProfile.ExtensionProfile[0].Extensions[0].Settings = $customConfigv2
 
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Так как масштабируемый набор теперь использует политику автоматического обновления, обновленное приложение будет автоматически применено к существующим экземплярам масштабируемого набора. Обновите веб-браузер, чтобы увидеть обновленное приложение. Чтобы просмотреть обновленную версию, обновите веб-сайт в браузере:

Обновленная веб-страница в IIS

Очистите ресурсы

Чтобы удалить набор масштабов и дополнительные ресурсы, удалите группу ресурсов и все ее ресурсы командой Remove-AzResourceGroup. Параметр -Force подтверждает, что вы хотите удалить ресурсы без дополнительного запроса. При использовании параметра -AsJob управление возвращается в командную строку без ожидания завершения операции.

Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob

Дальнейшие шаги

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

  • Автоматическая установка приложений для масштабируемого набора
  • Используйте расширение пользовательского скрипта Azure
  • Обновление работающего приложения в масштабируемом наборе

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