Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширения виртуальной машины Azure — это небольшие приложения, которые предоставляют задачи конфигурации и автоматизации после развертывания на виртуальных машинах Azure. Например, если для виртуальной машины требуется установка программного обеспечения, антивирусная защита или возможность запуска скрипта внутри нее, можно использовать расширение виртуальной машины.
Расширения виртуальных машин Azure можно запускать с помощью Azure CLI, PowerShell, шаблонов Azure Resource Manager (шаблонов ARM) и портала Azure. Расширения можно упаковать с помощью нового развертывания виртуальной машины или запустить их в любой существующей системе.
В этой статье представлен обзор расширений виртуальных машин Azure, необходимых компонентов для их использования, а также инструкции по обнаружению, управлению и удалению их. В этой статье содержатся общие сведения, так как доступно множество расширений виртуальных машин. Каждая из них имеет потенциально уникальную конфигурацию и собственную документацию.
Примечание.
Новое! Попробуйте использовать поддержку виртуальной машины для ускорения диагностикиРекомендуется запустить VM Assist для Windows или VM Assist для Linux. Эти средства диагностики на основе скриптов помогают выявить распространенные проблемы, влияющие на гостевой агент виртуальной машины Azure и общую работоспособность виртуальных машин.
Варианты использования и примеры
У каждого расширения виртуальной машины Azure есть конкретный вариант использования. Вот некоторые примеры.
- Настройте мониторинг виртуальной машины с помощью расширения виртуальной машины Microsoft Monitoring Agent.
- Настройте мониторинг инфраструктуры Azure с помощью расширения Chef или Datadog .
Помимо расширений, относящихся к процессу, расширение пользовательского скрипта доступно как для виртуальных машин Windows, так и для Linux. Расширение пользовательского скрипта для Linux позволяет запускать любой скрипт Bash на виртуальной машине. Пользовательские скрипты полезны для разработки развертываний Azure, требующих настройки за пределами того, что может предоставить собственные средства Azure.
Предпосылки
Примечание.
Расширения поддерживаются только в утвержденных дистрибутивах Linux в Azure.
Агент Azure Linux
Для обработки расширения на виртуальной машине необходимо установить агент Linux Azure . Некоторые отдельные расширения имеют необходимые условия, например доступ к ресурсам или зависимостям.
Агент Azure Linux управляет взаимодействием между виртуальной машиной Azure и контроллером структуры Azure. Агент отвечает за множество функциональных аспектов развертывания виртуальных машин Azure и управления ими, включая запуск расширений виртуальных машин.
Агент Linux Azure предварительно установлен на образах Azure Marketplace. Его также можно установить вручную в поддерживаемых операционных системах.
Агент выполняется в нескольких операционных системах. Однако платформа расширений имеет ограничение для операционных систем, которые используют расширения. Некоторые расширения не поддерживаются во всех операционных системах и могут выдавать код ошибки 51 ("Неподдерживаемая ОС"). Проверьте отдельную документацию по расширению для обеспечения поддержки.
Доступ к сети
Пакеты расширений скачиваются из репозитория расширений службы хранилища Azure. Отправки состояния расширения отправляются в службу хранилища Azure.
Если вы используете поддерживаемую версию агента Linux Azure, вам не нужно разрешать доступ к службе хранилища Azure в регионе виртуальной машины. Агент можно использовать для перенаправления обмена данными с контроллером структуры Azure для обмена данными агента. Если вы находитесь в неподдерживаемой версии агента, необходимо разрешить исходящий доступ к службе хранилища Azure в этом регионе с виртуальной машины.
Это важно
Если вы заблокировали доступ к частному IP-адресу 168.63.129.16 с помощью гостевого брандмауэра, расширения завершаются ошибкой, даже если вы используете поддерживаемую версию агента или вы настроили исходящий доступ. Кроме того, если у виртуальной машины нет исходящего доступа к *.blob.windows.net и *.blob.storage.azure.net, инициализация агента Linux Azure и установка расширений приведет к дополнительным задержкам. Чтобы избежать этих задержек, убедитесь, что доступ к этим конечным точкам разрешен.
Агенты можно использовать только для скачивания пакетов расширений и состояния отчетов. Например, если установка расширения должна скачать скрипт из GitHub (расширение пользовательского скрипта) или требуется доступ к службе хранилища Azure (Azure Backup), необходимо открыть дополнительные порты брандмауэра или группы безопасности сети (NSG). Разные расширения имеют разные требования, так как они имеют собственные права. Для расширений, требующих доступа к службе хранилища Azure, можно разрешить доступ с помощью тегов службы NSG Azure.
Для перенаправления запросов на трафик агента Azure Linux поддерживает прокси-сервер. Однако эта поддержка прокси-сервера не применяет расширения. Необходимо настроить каждое отдельное расширение для работы с прокси-сервером.
Обнаружение расширений виртуальных машин
Многие расширения виртуальных машин доступны для использования с виртуальными машинами Azure. Чтобы просмотреть полный список, используйте az vm extension image list. В следующем примере перечислены все доступные расширения в расположении westus :
az vm extension image list --location westus --output table
Запуск расширений виртуальной машины
Расширения виртуальных машин Azure выполняются на существующих виртуальных машинах. Это полезно, если необходимо внести изменения конфигурации или восстановить подключение на уже развернутой виртуальной машине. Расширения виртуальных машин также можно объединить с развертываниями шаблонов ARM. С помощью расширений с шаблонами ARM можно развертывать и настраивать виртуальные машины Azure без вмешательства после развертывания.
Для запуска расширения на существующей виртуальной машине можно использовать следующие методы.
Azure CLI (интерфейс командной строки Azure)
Расширения виртуальных машин Azure можно запускать для существующей виртуальной машины с помощью команды az vm extension set . В следующем примере выполняется расширение пользовательского скрипта для виртуальной машины с именем myVM в группе ресурсов с именем myResourceGroup. Замените пример имени группы ресурсов, имени виртуальной машины и скрипта для выполнения (https://raw.githubusercontent.com/me/project/hello.sh) с собственными сведениями.
az vm extension set \
--resource-group myResourceGroup \
--vm-name myVM \
--name customScript \
--publisher Microsoft.Azure.Extensions \
--settings '{"fileUris": ["https://raw.githubusercontent.com/me/project/hello.sh"],"commandToExecute": "./hello.sh"}'
При правильном выполнении расширения выходные данные аналогичны следующему примеру:
info: Executing command vm extension set
+ Looking up the VM "myVM"
+ Installing extension "CustomScript", VM: "mvVM"
info: vm extension set command OK
Azure PowerShell
Расширения виртуальных машин Azure можно запустить для существующей виртуальной машины с помощью команды Set-AzVMExtension . В следующем примере выполняется расширение пользовательского скрипта для виртуальной машины с именем myVM в группе ресурсов с именем myResourceGroup. Замените пример имени группы ресурсов, имени виртуальной машины и скрипта для выполнения (https://raw.githubusercontent.com/me/project/hello.sh) с собственными сведениями.
$Params = @{
ResourceGroupName = 'myResourceGroup'
VMName = 'myVM'
Name = 'CustomScript'
Publisher = 'Microsoft.Azure.Extensions'
ExtensionType = 'CustomScript'
TypeHandlerVersion = '2.1'
Settings = @{fileUris = @('https://raw.githubusercontent.com/me/project/hello.sh'); commandToExecute = './hello.sh'}
}
Set-AzVMExtension @Params
При правильном выполнении расширения выходные данные аналогичны следующему примеру:
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
Портал Azure
Расширения виртуальных машин можно применить к существующей виртуальной машине с помощью портала Azure. Выберите виртуальную машину на портале, выберите "Расширения" и нажмите кнопку "Добавить". Выберите расширение, которое требуется в списке доступных расширений, и следуйте инструкциям мастера.
На следующем рисунке показана установка расширения пользовательского скрипта для Linux на портале Azure:
Шаблоны диспетчера ресурсов 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/', concat(variables('vmName'),copyindex()))]"
],
"tags": {
"displayName": "config-app"
},
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
]
},
"protectedSettings": {
"commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
}
}
}
Дополнительные сведения о создании шаблонов ARM см. в статье "Виртуальные машины" в шаблоне Azure Resource Manager.
Защита данных расширения виртуальной машины
При запуске расширения виртуальной машины может потребоваться включить конфиденциальную информацию, например учетные данные, имена учетных записей хранения и ключи доступа. Многие расширения виртуальных машин включают защищенную конфигурацию, которая шифрует данные и расшифровывает ее только на целевой виртуальной машине. Каждое расширение имеет определенную защищенную схему конфигурации, и каждая из них подробно описана в документации по расширению.
В следующем примере показан экземпляр расширения пользовательского скрипта для Linux. Команда для выполнения включает набор учетных данных. В этом примере команда, выполняемая, не шифруется.
{
"apiVersion": "2015-06-15",
"type": "extensions",
"name": "config-app",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
],
"tags": {
"displayName": "config-app"
},
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
],
"commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
}
}
}
Перемещение свойства commandToExecute в protected конфигурацию помогает защитить строку выполнения, как показано в следующем примере:
{
"apiVersion": "2015-06-15",
"type": "extensions",
"name": "config-app",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
],
"tags": {
"displayName": "config-app"
},
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
]
},
"protectedSettings": {
"commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
}
}
}
Обновление агентов и расширений
Агенты и расширения используют один и тот же механизм автоматического обновления.
Если обновление доступно и включено автоматическое обновление, обновление устанавливается на виртуальной машине только после изменения расширения или после изменения другой модели виртуальной машины, например:
- Диски данных
- Расширения
- Теги расширений
- Контейнер диагностики загрузки
- Секреты гостевой ОС
- Размер виртуальной машины
- сетевой профиль.
Издатели делают обновления доступными для регионов в разное время, поэтому вы можете использовать виртуальные машины в разных регионах в разных версиях.
Примечание.
Для некоторых обновлений могут потребоваться дополнительные правила брандмауэра. См. сведения о доступе к сети.
Обновления агента
Агент виртуальной машины Linux содержит код агента подготовки и код обработки расширений в одном пакете. Они не могут быть разделены.
Агент подготовки можно отключить при подготовке в Azure с помощью cloud-init.
Поддерживаемые версии агентов могут использовать автоматические обновления. Единственный код, который можно обновить, — это код обработки расширений, а не код агента подготовки. Код агента подготовки выполняется один раз.
Код обработки расширений отвечает за:
- Взаимодействие с структурой Azure.
- Обработка операций расширения виртуальной машины, таких как установки, состояние отчетов, обновление отдельных расширений и удаление расширений. Обновления содержат исправления безопасности, исправления ошибок и улучшения кода обработки расширений.
При установке агента создается родительская управляющая программа. Затем этот родительский элемент создает дочерний процесс, который используется для обработки расширений. Если обновление доступно для агента, он скачан. Родительский элемент останавливает дочерний процесс, обновляет его, а затем перезапускает его. Если возникла проблема с обновлением, родительский процесс откатится к предыдущей дочерней версии.
Родительский процесс не может быть автоматически обновлен. Родитель может обновляться только обновлением пакета распространения.
Чтобы проверить, какая версия запущена, проверьте waagent следующее:
waagent --version
Результат аналогичен следующему примеру:
WALinuxAgent-2.2.45 running on <Linux Distro>
Python: 3.6.9
Goal state agent: 2.7.1.0
В предыдущем примере выходных данных родительский (или развернутый пакет) имеет значение WALinuxAgent-2.2.45. Значением Goal state agent является версия автоматического обновления.
Настоятельно рекомендуется всегда включить автоматическое обновление агента: AutoUpdate.Enabled=y. Если вы не включите автоматическое обновление, вам потребуется вручную обновить агент, и вы не получите исправления ошибок и безопасности.
Обновления расширений
Если обновление расширения доступно и автоматические обновления включены, после изменения модели виртуальной машины агент Azure Linux скачивает и обновляет расширение.
Автоматические обновления расширений являются дополнительными или исправлением. При подготовке расширения вы можете отказаться от дополнительных обновлений или отказаться от него. В следующем примере показано, как автоматически обновлять дополнительные версии в шаблоне ARM с помощью "autoUpgradeMinorVersion": true,:
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"fileUris": [
"https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
]
},
Чтобы получить последние исправления ошибок с дополнительными выпусками, настоятельно рекомендуется всегда выбирать автоматическое обновление в развертываниях расширений. Вы не можете отказаться от обновлений исправлений, которые несут исправления безопасности или ключевых ошибок.
Если отключить автоматическое обновление или обновить основную версию, используйте az vm extension set или Set-AzVMExtension и укажите целевую версию.
Определение обновлений расширений
Определение того, задано ли расширение с помощью autoUpgradeMinorVersion на виртуальной машине
Модель виртуальной машины отображается в том случае, если расширение подготовлено.autoUpgradeMinorVersion Чтобы проверить, используйте az vm show и укажите имя группы ресурсов и виртуальной машины следующим образом:
az vm show --resource-group myResourceGroup --name myVM
В следующем примере выходных данных показано, что autoUpgradeMinorVersion задано значение true:
"resources": [
{
"autoUpgradeMinorVersion": true,
"forceUpdateTag": null,
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/extensions/customScript",
Определите, когда произошло событие autoUpgradeMinorVersion
Чтобы узнать, когда произошло обновление расширения, просмотрите журналы агента на виртуальной машине по адресу /var/log/waagent.log.
В следующем примере виртуальная машина Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025 установлена. Исправление доступно Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Expected handler state: enabled
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Decide which version to use
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Use version: 2.3.9027
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Current handler state is: NotInstalled
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Download extension package
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Unpack extension package
INFO Event: name=Microsoft.OSTCExtensions.LinuxDiagnostic, op=Download, message=Download succeeded
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Initialize extension directory
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Update settings file: 0.settings
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025] Disable extension.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025] Launch command:diagnostic.py -disable
...
INFO Event: name=Microsoft.OSTCExtensions.LinuxDiagnostic, op=Disable, message=Launch command succeeded: diagnostic.py -disable
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Update extension.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Launch command:diagnostic.py -update
2017/08/14 20:21:57 LinuxAzureDiagnostic started to handle.
Разрешения агента
Для выполнения задач агенту необходимо запустить в качестве корневого каталога.
Устранение неполадок расширений виртуальных машин
Каждое расширение виртуальной машины может иметь определенные действия по устранению неполадок. Например, при использовании расширения пользовательского скрипта можно найти сведения о выполнении скрипта локально на виртуальной машине, где было запущено расширение.
Следующие действия по устранению неполадок применяются ко всем расширениям виртуальных машин:
Чтобы проверить журнал агента Linux Azure, просмотрите действие, когда расширение подготовлено в /var/log/waagent.log.
Дополнительные сведения см. в журналах расширений в файле /var/log/azure/<extensionName>.
Ознакомьтесь с разделами по устранению неполадок в документации по расширению для кодов ошибок, известных проблем и других сведений о расширении.
Просмотрите системные журналы. Проверьте наличие других операций, которые могли повлиять на расширение, например длительную установку другого приложения, требующего монопольного доступа к диспетчеру пакетов.
Распространенные причины сбоев расширения
Для выполнения расширений требуется 20 минут. (Исключения — это настраиваемый скрипт и шеф-повар, которые имеют 90 минут.) Если развертывание превышает это время, оно помечается как время ожидания. Причиной этого могут быть виртуальные машины с низким уровнем ресурсов, а также другие конфигурации виртуальных машин или задачи запуска используют большие объемы ресурсов во время подготовки расширения.
Минимальные предварительные требования не выполнены. Некоторые расширения имеют зависимости от номеров SKU виртуальных машин, таких как образы HPC. Расширения могут иметь определенные требования к сетевому доступу, например обмен данными с службой хранилища Azure или общедоступными службами. Другие примеры могут быть доступом к репозиториям пакетов, из-за свободного места на диске или ограничений безопасности.
Доступ диспетчера пакетов является эксклюзивным. В некоторых случаях длительная конфигурация виртуальной машины и установка расширения могут конфликтовать, так как им требуется эксклюзивный доступ к диспетчеру пакетов.
Просмотр состояния расширения
После запуска расширения виртуальной машины с виртуальной машиной используйте az vm get-instance-view , чтобы вернуть состояние расширения следующим образом:
az vm get-instance-view \
--resource-group myResourceGroup \
--name myVM \
--query "instanceView.extensions"
Результат аналогичен следующему примеру:
{
"name": "customScript",
"statuses": [
{
"code": "ProvisioningState/failed/0",
"displayStatus": "Provisioning failed",
"level": "Error",
"message": "Enable failed: failed to execute command: command terminated with exit status=127\n[stdout]\n\n[stderr]\n/bin/sh: 1: ech: not found\n",
"time": null
}
],
"substatuses": null,
"type": "Microsoft.Azure.Extensions.CustomScript",
"typeHandlerVersion": "2.1.6"
}
Вы также можете найти состояние выполнения расширения на портале Azure. Выберите виртуальную машину, выберите расширения и выберите нужное расширение.
Повторное запуск расширения виртуальной машины
В некоторых случаях необходимо повторно запустить расширение виртуальной машины. Вы можете повторно запустить расширение, удалив его, а затем повторно запустить расширение с помощью выбранного метода выполнения.
Чтобы удалить расширение, используйте az vm extension delete следующим образом:
az vm extension delete \
--resource-group myResourceGroup \
--vm-name myVM \
--name customScript
Вы также можете удалить расширение на портале Azure:
- Выберите виртуальную машину.
- Выберите Расширения.
- Выберите расширение.
- Выберите Удалить.
Общие справочники по расширению виртуальной машины
| Имя расширения | Описание |
|---|---|
| Расширение пользовательского скрипта для Linux | Выполнение скриптов на виртуальной машине Azure. |
| Расширение VMAccess | Восстановление доступа к виртуальной машине Azure. Вы также можете использовать его для управления пользователями и учетными данными. |
Дальнейшие действия
Дополнительные сведения о расширениях виртуальных машин см. в статье о расширениях и функциях виртуальных машин Azure.