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

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

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

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

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

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

  • Применение к виртуальной машине конфигураций требуемого состояния (DSC) PowerShell с помощью расширения DSC для Windows.

  • Настройте мониторинг виртуальной машины с помощью агента Azure Monitor и аналитики виртуальных машин.

  • Настройка виртуальной машины Azure с помощью Chef.

  • Настройка мониторинга инфраструктуры Azure с помощью расширения Datadog.

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

Необходимые компоненты

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

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

Для обработки расширений на виртуальной машине необходимо установить агент виртуальной машины Azure для Windows . Этот агент также называется агентом виртуальной машины Azure или гостевым агентом 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 и 32526.

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

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

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

Существует множество расширений виртуальных машин, которые можно использовать с виртуальными машинами Azure. Чтобы просмотреть полный список, используйте Get-AzVMExtensionImage командлет PowerShell.

Следующая команда содержит список всех доступных расширений виртуальных машин в регионе "Западная часть США".

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

Эта команда предоставляет выходные данные, аналогичные следующему примеру:

Type                Version
----                -------
AcronisBackup       1.0.33
AcronisBackup       1.0.51
AcronisBackupLinux  1.0.33
AlertLogicLM        1.3.0.1
AlertLogicLM        1.3.0.0
AlertLogicLM        1.4.0.1

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

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

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

Примечание.

В некоторых из следующих примеров используются "<placeholder>" значения параметров в командах. Перед выполнением каждой команды обязательно замените все "<placeholder>" значения определенными значениями конфигурации.

PowerShell

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

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 "<myVMregion>"

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

$cred=Get-Credential

Set-AzVMAccessExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myVMAccess" `
    -Location "myVMregion" -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

Вы можете добавить расширения виртуальной машины в шаблон 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 см. в статье "Виртуальные машины" в шаблоне ARM.

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

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

В следующем примере JSON показан экземпляр расширения пользовательского скрипта для 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".

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

Если обновление расширения доступно и включено автоматическое обновление, если модель виртуальной машины изменяется, агент виртуальной машины 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 должен выполняться как локальная система.

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

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

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

  • Чтобы проверить журнал агента виртуальной машины 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. Выберите виртуальную машину, выберите расширения и выберите нужное расширение. Выберите Удалить.

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

В следующей таблице приведены некоторые распространенные ссылки на расширения виртуальной машины.

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

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

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