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

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

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

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

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

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

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

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

Агент Linux для Azure

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

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

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

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

Доступ к сети

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

Если используется поддерживаемая версия агента Linux для Azure, нет необходимости предоставлять доступ к службе хранилища Azure в регионе виртуальной машины. Можно использовать агент для перенаправления запросов к контроллеру структуры Azure для взаимодействия с агентом. Если используется неподдерживаемая версия агента, необходимо предоставить исходящий доступ от виртуальной машины к службе хранилища Azure в том же регионе.

Важно!

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

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

Агент Linux для Azure поддерживает перенаправление запросов через прокси-сервер. Однако при такой поддержке прокси-сервера не применяются расширения. Чтобы работать с прокси-сервером, необходимо настроить каждое отдельное расширение.

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

Существует множество расширений виртуальных машин, которые можно использовать с виртуальными машинами Azure. Чтобы просмотреть полный список, выполните команду az vm extension image list. В следующем примере перечислены все расширения, доступные в расположении westus:

az vm extension image list --location westus --output table

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

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

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

Azure CLI

Расширения виртуальных машин 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:

Screenshot of the dialog for installing the Custom Script extension for Linux.

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

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

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

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

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

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

Имя расширения Description
Расширение пользовательских сценариев для Linux Выполняет сценарии на виртуальных машинах Azure.
Расширение VMAccess Восстанавливает доступ к виртуальной машине Azure. Можно использовать для управления пользователями и учетными данными.
Расширение системы диагностики Azure Управление диагностикой Azure.

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

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