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

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

Расширения виртуальной машины Azure можно запускать с помощью Azure CLI, PowerShell, шаблонов Resource Manager (шаблонов ARM) или портала Azure. Их можно включить в пакет для развертывания виртуальной машины или запускать в уже существующей системе.

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

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

Каждое расширение виртуальной машины Azure имеет конкретный вариант использования. Примеры приведены ниже:

Помимо расширений, созданных для конкретных процессов, существует расширение пользовательских сценариев для виртуальных машин под управлением Windows и Linux. Расширение пользовательских скриптов для Windows позволяет запустить на виртуальной машине любой скрипт PowerShell. Пользовательские сценарии могут пригодиться при проектировании развертывания Azure, для которого требуется дополнительная настройка, ее невозможно выполнить собственными средствами Azure.

Предварительные требования

Агент виртуальной машины Azure

Для обработки расширения на виртуальной машине требуется агент виртуальной машины Azure для Windows (также называемый гостевым агентом Windows). Некоторые расширения имеют дополнительные требования, например доступ к определенным ресурсам или зависимости.

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

Агент виртуальной машины Azure предварительно установлен в образах Azure Marketplace. Его также можно установить вручную в поддерживаемых операционных системах.

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

Доступ к сети

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

Если используется поддерживаемая версия агента виртуальной машины Azure, нет необходимости предоставлять доступ к службе хранилища Azure в регионе виртуальной машины. Вы можете использовать агент, чтобы перенаправить подключение к контроллеру структуры Azure для взаимодействия (компонент HostGAPlugin через привилегированный канал на частном IP-адресе 168.63.129.16). Если используется неподдерживаемая версия агента, необходимо предоставить исходящий доступ от виртуальной машины к службе хранилища Azure в том же регионе.

Важно!

Если вы заблокировали доступ к IP-адресу 168.63.129.16 с помощью гостевого брандмауэра или прокси-сервера, расширения будут завершаться сбоем, даже если вы используете поддерживаемую версию агента или настроили исходящий доступ. Требуются порты 80, 443 и 32526.

Агенты можно использовать только для скачивания пакетов расширений и отправки отчетов о состоянии. Например, если для установки расширения требуется скачать сценарий из GitHub (расширение пользовательских скриптов) или требуется доступ к службе хранилища Azure (Azure Backup), откройте дополнительные порты в брандмауэре или в группе безопасности сети (NSG). Разные расширения имеют разные требования, потому что они по сути являются самостоятельными приложениями. Для расширений, которым требуется доступ к службе хранилища Azure или к Azure Active Directory, можно разрешить такой доступ с помощью тегов службы Azure NSG.

Агент виртуальной машины Azure не поддерживает перенаправление запросов через прокси-сервер. Это означает, что агент виртуальной машины Azure будет зависеть от пользовательского прокси-сервера (если он есть) для доступа к ресурсам в Интернете или на узле по IP-адресу 168.63.129.16.

Поиск расширений ВМ

Существует множество расширений виртуальных машин, которые можно использовать с виртуальными машинами Azure. Их полный список можно получить с помощью командлета Get-AzVMExtensionImage. В следующем примере перечислены все расширения, доступные в расположении WestUS:

Get-AzVmImagePublisher -Location "WestUS" |
Get-AzVMExtensionImageType |
Get-AzVMExtensionImage | Select Type, Version

Запуск расширений ВМ

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

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

PowerShell

Есть несколько команд PowerShell, позволяющих выполнять отдельные модули. Чтобы просмотреть список, используйте Get-Command с фильтрацией по значению Extension:

Get-Command Set-Az*Extension* -Module Az.Compute

Выходные данные этой команды выглядят примерно следующим образом:

CommandType     Name                                          Version    Source
-----------     ----                                          -------    ------
Cmdlet          Set-AzVMAccessExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMADDomainExtension                     4.5.0      Az.Compute
Cmdlet          Set-AzVMAEMExtension                          4.5.0      Az.Compute
Cmdlet          Set-AzVMBackupExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMBginfoExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMChefExtension                         4.5.0      Az.Compute
Cmdlet          Set-AzVMCustomScriptExtension                 4.5.0      Az.Compute
Cmdlet          Set-AzVMDiagnosticsExtension                  4.5.0      Az.Compute
Cmdlet          Set-AzVMDiskEncryptionExtension               4.5.0      Az.Compute
Cmdlet          Set-AzVMDscExtension                          4.5.0      Az.Compute
Cmdlet          Set-AzVMExtension                             4.5.0      Az.Compute
Cmdlet          Set-AzVMSqlServerExtension                    4.5.0      Az.Compute
Cmdlet          Set-AzVmssDiskEncryptionExtension             4.5.0      Az.Compute

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

Set-AzVMCustomScriptExtension -ResourceGroupName "myResourceGroup" `
    -VMName "myVM" -Name "myCustomScript" `
    -FileUri "https://raw.githubusercontent.com/neilpeterson/nepeters-azure-templates/master/windows-custom-script-simple/support-scripts/Create-File.ps1" `
    -Run "Create-File.ps1" -Location "West US"

В следующем примере расширение доступа к виртуальной машине сбрасывает текущий и устанавливает новый временный пароль администратора на виртуальной машине Windows. После запуска этого кода следует сбросить пароль при первом входе в систему.

$cred=Get-Credential

Set-AzVMAccessExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myVMAccess" `
    -Location WestUS -UserName $cred.GetNetworkCredential().Username `
    -Password $cred.GetNetworkCredential().Password -typeHandlerVersion "2.0"

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

Портал Azure

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

В следующем примере показана установка расширения Microsoft Antimalware с помощью портала Azure.

Screenshot of the dialog for installing the Microsoft Antimalware extension.

Шаблоны Azure Resource Manager

Вы можете добавить расширения виртуальной машины в шаблон ARM и запустить их с развертыванием соответствующего шаблона. Развертывая расширение вместе с шаблоном, можно создать полностью настроенное развертывание Azure.

Например, следующий код JSON из полного шаблона ARM развертывает набор виртуальных машин с балансировкой нагрузки и базу данных SQL Azure, а затем устанавливает на каждой виртуальной машине приложение .NET Core. Расширение ВМ отвечает за установку программного обеспечения.

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

Дополнительные сведения о создании шаблонов ARM см. в статье Виртуальные машины в шаблоне Azure Resource Manager.

Защита данных расширения виртуальной машины

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

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

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ],
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

Переместив свойство commandToExecute в конфигурацию protected, вы защитите данные из строки выполнения, как показано в следующем примере:

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

На виртуальной машине Azure типа "инфраструктура как услуга" (IaaS), которая использует расширения, в консоли сертификатов могут отображаться сертификаты с субъектом Генератор сертификатов Windows Azure CRP. На классической виртуальной машине типа "RedDog Front End" (RDFE) эти сертификаты имеют имя субъекта Управление службами Windows Azure для расширений.

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

Как обновляются агенты и расширения

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

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

  • Диски данных
  • Модули
  • Теги расширения
  • контейнер диагностики загрузки;
  • секреты гостевой ОС;
  • Размер виртуальной машины
  • сетевой профиль.

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

Примечание

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

Получение списка расширений, развернутых на виртуальной машине

$vm = Get-AzVM -ResourceGroupName "myResourceGroup" -VMName "myVM"
$vm.Extensions | select Publisher, VirtualMachineExtensionType, TypeHandlerVersion
Publisher             VirtualMachineExtensionType          TypeHandlerVersion
---------             ---------------------------          ------------------
Microsoft.Compute     CustomScriptExtension                1.9

Обновления агентов

Агент виртуальной машины Azure содержит только код обработки расширений. Код подготовки Windows является отдельным кодом. Вы можете удалить агент виртуальной машины Azure. Невозможно отключить автоматическое обновление агента виртуальной машины Azure.

Код обработки расширений отвечает за следующее:

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

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

Обновление расширений

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

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

    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },

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

Если вы отключите автоматические обновления или вам необходимо обновить основной номер версии, используйте команду Set-AzVMExtension и укажите целевую версию.

Как определить параметры обновления расширений

Определение значения параметра "autoUpgradeMinorVersion" для расширения на виртуальной машине

Модель виртуальной машины позволяет узнать, был ли установлен параметр autoUpgradeMinorVersion при подготовке расширения. Для этого запустите командлет Get-AzVm, указав группу ресурсов и имя виртуальной машины следующим образом:

 $vm = Get-AzVm -ResourceGroupName "myResourceGroup" -VMName "myVM"
 $vm.Extensions

В следующем примере вывода показано, что для autoUpgradeMinorVersion задано значение true:

ForceUpdateTag              :
Publisher                   : Microsoft.Compute
VirtualMachineExtensionType : CustomScriptExtension
TypeHandlerVersion          : 1.9
AutoUpgradeMinorVersion     : True

Определение времени для события "autoUpgradeMinorVersion"

Чтобы узнать, когда становится доступно обновление для расширения, изучите журналы агента на виртуальной машине, расположенные по адресу C:\WindowsAzure\Logs\WaAppAgent.log.

В следующем примере мы видим, что на виртуальной машине установлена Microsoft.Compute.CustomScriptExtension версии 1.8. И для этого расширения доступно обновление категории "Исправление" до версии 1.9.

[INFO]  Getting plugin locations for plugin 'Microsoft.Compute.CustomScriptExtension'. Current Version: '1.8', Requested Version: '1.9'
[INFO]  Auto-Upgrade mode. Highest public version for plugin 'Microsoft.Compute.CustomScriptExtension' with requested version: '1.9', is: '1.9'

Разрешения для агента

Чтобы агент работал должным образом, он должен запускаться от имени учетной записи локальной системы.

Устранение неполадок с расширениями ВМ

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

Следующие действия по устранению неполадок применимы ко всем расширениям виртуальной машины:

  • Чтобы проверить журнал агента виртуальной машины Azure, найдите в файле C:\WindowsAzure\Logs\WaAppAgent.log действия, которые выполнялись при подготовке расширения.

  • Подробные сведения вы можете найти в журналах расширения в каталоге C:\WindowsAzure\Logs\Plugins<имя_расширения>.

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

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

  • Если в виртуальной машине имеется расширение с неудачным состоянием подготовки, то будет невозможно установить какие-либо другие новые расширения.

Распространенные причины сбоев расширений

  • Для запуска расширений требуется 20 минут. (Исключения — это пользовательские скрипты, Chef и DSC, для которых требуется 90 минут.) Если в вашем развертывании требуется больше времени, для расширения фиксируется превышение времени ожидания. Причиной этого могут быть виртуальные машины с нехваткой ресурсов или выполнением на той же виртуальной машине во время подготовки к работе расширения других задач конфигурации или запуска, которые потребляют большие объемы ресурсов.

  • Не выполнены минимальные требования. Некоторые расширения имеют зависимость от номера SKU виртуальной машины, например от образа HPC. Расширения могут иметь определенные требования к сетевому доступу, такие как наличие связи со службой хранилища Azure или другими общедоступными службами. Работе также могут помешать отсутствие доступа к репозиторию пакетов, нехватка места на диске или ограничения безопасности.

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

Просмотр состояния расширения

Запустив расширение виртуальной машины на виртуальной машине, выполните командлет Get-AzVM, чтобы узнать состояние этого расширения. Substatuses[0] указывает, что подготовка расширения прошла успешно, а значит оно правильно развернуто на виртуальной машине. Но Substatuses[1] указывает, что выполнение расширения на виртуальной машине завершилось сбоем.

Get-AzVM -ResourceGroupName "myResourceGroup" -VMName "myVM" -Status

Вы должны увидеть результат, аналогичный приведенному ниже.

Extensions[0]           :
  Name                  : CustomScriptExtension
  Type                  : Microsoft.Compute.CustomScriptExtension
  TypeHandlerVersion    : 1.9
  Substatuses[0]        :
    Code                : ComponentStatus/StdOut/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : Windows PowerShell \nCopyright (C) Microsoft Corporation. All rights reserved.\n
  Substatuses[1]        :
    Code                : ComponentStatus/StdErr/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : The argument 'cseTest%20Scriptparam1.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the

-File parameter.
  Statuses[0]           :
    Code                : ProvisioningState/failed/-196608
    Level               : Error
    DisplayStatus       : Provisioning failed
    Message             : Finished executing command

Кроме того, состояние выполнения расширения можно найти на портале Azure. Выберите виртуальную машину, щелкните Расширения, а затем — нужное расширение.

Повторный запуск расширения ВМ

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

Remove-AzVMExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myExtensionName"

Кроме того, вы можете удалить расширение через портал Azure:

  1. Выберите виртуальную машину.
  2. Выберите Расширения.
  3. Выберите расширение.
  4. Выберите Удалить.

Справочные материалы для всех расширений ВМ

Имя расширения Описание
Расширение пользовательских скриптов для Windows Выполняет скрипты на виртуальных машинах Azure.
Расширение Desired State Configuration для Windows Применение к виртуальной машине конфигурации требуемого состояния PowerShell.
Расширение службы "Диагностика Azure" Управление диагностикой Azure.
Расширение VMAccess Управление пользователями и учетными данными.

Дальнейшие действия

Дополнительные сведения о расширениях виртуальной машины см. в статье Расширения и компоненты виртуальной машины Azure.