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

Azure DevOps Services

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

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

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

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

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

Примечание.

  • Невозможно запустить агенты Mac с помощью масштабируемых наборов. Таким образом можно запускать только агенты Windows или Linux.

  • Использование пулов агентов VMSS для Azure DevOps Services поддерживается только для облака общедоступной (глобальной службы) Azure. В настоящее время пулы агентов VMSS не поддерживают другие национальные облачные предложения.

  • Не следует связывать vmSS с несколькими пулами.

Создание масштабируемого набора

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

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

Примечание.

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

  1. Перейдите в Azure Cloud Shell по адресу https://shell.azure.com/.

  2. Выполните следующую команду, чтобы проверить подписку Azure по умолчанию.

    az account list -o table
    

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

    az account set -s <your subscription ID>
    
  3. Создайте группу ресурсов для масштабируемого набора виртуальных машин.

    az group create \
    --location westus \
    --name vmssagents
    
  4. Создайте масштабируемый набор виртуальных машин в группе ресурсов. В этом примере указан образ виртуальной машины Ubuntu2204.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image Ubuntu2204 \
    --vm-sku Standard_D2_v4 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --generate-ssh-keys \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer "" \
    --orchestration-mode Uniform
    

    Примечание.

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

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

    • --disable-overprovision -Обязательно
    • --upgrade-policy-mode manual -Обязательно
    • --load-balancer "" — Azure Pipelines не требует подсистемы балансировки нагрузки для маршрутизации заданий агентам в пуле агентов масштабируемого набора, но настройка подсистемы балансировки нагрузки является одним из способов получения IP-адреса для агентов масштабируемого набора, которые можно использовать для правил брандмауэра. Еще одним вариантом получения IP-адреса для агентов масштабируемого набора является создание масштабируемого набора с помощью --public-ip-address параметров. Дополнительные сведения о настройке масштабируемого набора с помощью подсистемы балансировки нагрузки или общедоступного IP-адреса см. в документации по Масштабируемые наборы виртуальных машин и az vmss create.
    • --instance-count 2 — этот параметр не требуется, но он дает возможность убедиться, что масштабируемый набор полностью работает перед созданием пула агентов. Создание двух виртуальных машин может занять несколько минут. Позже при создании пула агентов Azure Pipelines удаляет эти две виртуальные машины и создает новые.

    Важно!

    Если вы запускаете этот сценарий с помощью Azure CLI в Windows, необходимо заключить "" его --load-balancer "" в одинарные кавычки следующим образом: --load-balancer '""'

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

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    Важно!

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

    Выберите любой образ Linux или Windows из Azure Marketplace или собственного пользовательского образа, чтобы создать масштабируемый набор. Не устанавливайте агент Azure Pipelines на образе. Azure Pipelines автоматически устанавливает агент по мере подготовки новых виртуальных машин. В приведенном выше примере мы использовали простое UbuntuLTS изображение. Инструкции по созданию и использованию пользовательского образа см. в разделе часто задаваемые вопросы.

    Выберите любой номер SKU виртуальной машины и номер SKU хранилища.

    Примечание.

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

  5. После создания масштабируемого набора перейдите к масштабируемой группе в портал Azure и проверьте следующие параметры:

    • Политика обновления — вручную

      Verify upgrade policy.

      Вы также можете проверить этот параметр, выполнив следующую команду Azure CLI.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • Масштабирование — масштабирование вручную

      Verify manual scale policy.

Важно!

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

Режимы оркестрации

Масштабируемые наборы виртуальных машин Azure можно настроить с помощью двух режимов оркестрации: унифицированных и гибких. Поддержка Azure Pipelines для режима универсальной оркестрации общедоступна для всех клиентов.

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

Создание пула агентов масштабируемого набора

  1. Перейдите к параметрам проекта Azure DevOps, выберите пулы агентов в разделе "Конвейеры" и выберите "Добавить пул", чтобы создать новый пул агентов.

    Create agent pool.

    Важно!

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

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

    Важно!

    • Чтобы настроить пул агентов масштабируемого набора, необходимо иметь разрешения владельца или доступа пользователей Администратор istrator в выбранной подписке. Если у вас есть одно из этих разрешений, но при выборе авторизации возникает ошибка, см . сведения об устранении неполадок.

    • Единственное поддерживаемое в настоящее время подключение службы — это подключение службы Azure Resource Manager (ARM) на основе ключа субъекта-службы. Подключения службы ARM на основе учетных данных сертификата или управляемого удостоверения завершаются ошибкой. При попытке перечислить существующие масштабируемые наборы в подписке вы увидите следующую ошибку:

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. Выберите нужный масштабируемый набор виртуальных машин из этой подписки.

  4. Укажите имя пула агентов.

  5. Настройте следующие параметры:

    • Автоматическое разорвать виртуальные машины после каждого использования — для каждого задания используется новый экземпляр виртуальной машины. Виртуальная машина переходит в автономный режим после выполнения задания и переимыкается перед получением другого задания.
    • Сохраните неработоспособный агент для исследования — следует ли сохранять неработоспособные виртуальные машины агента для устранения неполадок, а не удалять их.
    • Максимальное количество виртуальных машин в масштабируемом наборе . Azure Pipelines автоматически масштабирует количество агентов, но не превысит это ограничение.
    • Количество агентов, которые будут оставаться в режиме ожидания . Azure Pipelines автоматически масштабируется в количестве агентов, но гарантирует, что для выполнения новых заданий всегда доступно множество агентов. Если задать количество агентов в режиме ожиданиядо 0, например для экономии затрат на низкий объем заданий, Azure Pipelines запустит виртуальную машину только при наличии задания.
    • Задержка в минутах перед удалением избыточных агентов простоя. Чтобы учитывать дисперсию нагрузки сборки в течение дня, Azure Pipelines будет ожидать указанной длительности перед удалением избыточного агента простоя.
    • Настройка виртуальных машин для выполнения интерактивных тестов (только ос Windows Server) — агенты Windows можно настроить для запуска безответных с помощью автолога и интерактивного пользовательского интерфейса или их можно настроить для запуска с повышенными разрешениями. Установите этот флажок, чтобы запустить неуклюжаемые с интерактивным пользовательским интерфейсом. В любом случае пользователь агента является членом группы Администратор istrators.
  6. После настройки параметров нажмите кнопку "Создать ", чтобы создать пул агентов.

Использование пула агентов масштабируемого набора

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

Важно!

Необходимо соблюдать осторожность при внесении изменений непосредственно в масштабируемый набор в портал Azure.

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

Как Azure Pipelines управляет масштабируемым набором

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

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

  • Число неактивных агентов ниже указанного количества резервных агентов
  • Неактивные агенты для заданий конвейера обслуживания, ожидающих в очереди

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

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

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

  • Так как число агентов бездействия равно 0, а количество агентов простоя ниже резервного количества 2, Azure Pipelines масштабируется и добавляет две виртуальные машины в масштабируемый набор. После того как эти агенты приходят в сеть, будет два бездействия агентов.

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

  • В настоящее время число агентов бездействия равно 1, и это меньше, чем число резервных 2. Таким образом, Azure Pipelines масштабируется и добавляет еще 2 виртуальных машин (размер добавочного размера, используемого в этом примере). В настоящее время пул имеет три бездействия агентов и один агент занят.

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

  • Если другие задания не прибывают в течение 30 минут (можно настроить с помощью задержки в минутах перед удалением избыточных агентов простоя), Azure Pipelines определяет, что существует больше агентов простоя, чем необходимо. Таким образом, он масштабируется в пуле до двух агентов.

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

Примечание.

Для масштабирования или масштабирования в виртуальных машинах azure Pipelines может потребоваться час или больше. Azure Pipelines будет масштабироваться в шагах, отслеживать операции с ошибками и реагировать, удаляя неиспользуемые компьютеры и создавая новые в течение времени. Эта операция исправления может занять более часа.

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

Из-за размера выборки в 5 минут все агенты могут работать конвейеры в течение короткого периода времени, и масштабирование не будет происходить.

Настройка конфигурации агента Pipelines

Вы можете настроить конфигурацию агента Azure Pipelines, определив переменные среды в пользовательском образе операционной системы для масштабируемого набора. Например, рабочий каталог агента масштабируемого набора по умолчанию имеет значение C:\a для Windows и /agent/_work для Linux. Если вы хотите изменить рабочий каталог, задайте переменную среды с именем VSTS_AGENT_INPUT_WORK с нужным рабочим каталогом. Дополнительные сведения см. в документации по автоматической настройке агента Pipelines. Некоторыми примерами могут служить:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Важно!

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

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ... и все, что связано с группами развертывания.

Настройка запуска виртуальной машины с помощью расширения пользовательского скрипта

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

Это расширение будет выполняться на каждой виртуальной машине в масштабируемом наборе сразу после его создания или повторного создания. Расширение пользовательского скрипта будет выполнено до выполнения расширения агента Azure Pipelines.

Ниже приведен пример создания расширения пользовательского скрипта для Linux.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Ниже приведен пример создания расширения пользовательского скрипта для Windows.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

Важно!

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

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

Жизненный цикл агента масштабируемого набора

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

  1. Задание размера пула агентов масштабируемого набора Azure DevOps определяет, что пул имеет слишком мало агентов простоя и должен масштабироваться. Azure Pipelines вызывает масштабируемые наборы Azure для увеличения емкости масштабируемого набора.

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

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

  4. Выполняется расширение агента Azure Pipelines. Это расширение загружает последнюю версию агента Azure Pipelines вместе с последней версией скрипта конфигурации. Скрипты конфигурации можно найти по URL-адресам со следующими форматами:

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.shнапример, версия 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1например, версия 17
  5. Сценарий конфигурации создает локального пользователя с именем AzDevOps , если операционная система — Windows Server или Linux. Для ос клиента Windows 10 агент запускается как LocalSystem. Затем скрипт распакуется, устанавливает и настраивает агент Azure Pipelines. В рамках настройки агент регистрируется в пуле агентов Azure DevOps и отображается в списке пулов агентов в автономном состоянии.

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

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

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

Если вы просто хотите создать масштабируемый набор с диском ОС по умолчанию 128 ГБ с помощью общедоступного образа Azure, перейдите прямо к шагу 10 и используйте имя общедоступного образа (UbuntuLTS, Win2019DataCenter и т. д.), чтобы создать масштабируемый набор. В противном случае выполните следующие действия, чтобы настроить образ виртуальной машины.

  1. Создайте виртуальную машину с нужным образом ОС и при необходимости разверните размер диска ОС с 128 ГБ до <myDiskSizeGb>.

    • Если вы начинаете с доступного образа Azure, например <myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • Если вы начинаете с обобщенного виртуального жесткого диска:

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

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. Завершение работы виртуальной машины

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. Освобождение виртуальной машины

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. Преобразование в управляемый диск

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. Перезапустите виртуальную машину.

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. Удаленный рабочий стол (или SSH) на общедоступный IP-адрес виртуальной машины для настройки образа. Для разблокировки портов RDP (3389) или SSH (22) может потребоваться открыть порты в брандмауэре.

    1. Windows — если <MyDiskSizeGb> больше 128 ГБ, расширьте размер диска ОС, чтобы заполнить указанный вами размер <MyDiskSizeGb>диска.

      Откройте средство DiskPart от имени администратора и выполните следующие команды DiskPart:

      1. list volume (чтобы просмотреть тома)
      2. select volume 2 (зависит от того, какой том является диском ОС)
      3. extend size 72000 (чтобы расширить диск на 72 ГБ, с 128 ГБ до 200 ГБ)
  3. Установите любое требуемое дополнительное программное обеспечение на виртуальной машине.

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

  5. Перезагрузка виртуальной машины после завершения настройки

  6. Подготовьте виртуальную машину к использованию.

    • Windows — в окне консоли администрирования:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Важно!

    Подождите, пока виртуальная машина завершит обобщение и завершение работы. Не продолжайте работу до остановки виртуальной машины. Разрешить 60 минут.

  7. Освобождение виртуальной машины

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. Пометить виртуальную машину как обобщенную

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. Создайте образ виртуальной машины на основе обобщенного образа. При выполнении этих действий для обновления существующего образа масштабируемого набора запишите URL-адрес идентификатора изображения в выходных данных.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. Создание масштабируемого набора на основе пользовательского образа виртуальной машины

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. Убедитесь, что обе виртуальные машины, созданные в масштабируемом наборе, подключены к сети, имеют разные имена и достигают состояния "Успешно выполнено".

Теперь вы готовы создать пул агентов с помощью этого масштабируемого набора.

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

Чтобы обновить образ в существующем масштабируемом наборе, выполните действия, описанные в предыдущем разделе "Создание масштабируемого набора с пользовательским изображением, программным обеспечением или размером диска" на шаге az image create , чтобы создать пользовательский образ ОС. Запишите URL-адрес свойства идентификатора, который выводится из az image create команды. Затем обновите масштабируемый набор с новым изображением, как показано в следующем примере. После обновления образа масштабируемого набора все будущие виртуальные машины в масштабируемом наборе будут созданы с новым образом.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

Поддерживаемые операционные системы

Агенты масштабируемого набора в настоящее время поддерживают Ubuntu Linux, Windows Server/DataCenter 2016/2019 и клиент Windows 10.

Известные проблемы

  • Дистрибутивы Debian или RedHat Linux не поддерживаются. Только Ubuntu.
  • Клиент Windows 10 не поддерживает запуск агента конвейера в качестве локального пользователя, поэтому агент не может взаимодействовать с пользовательским интерфейсом. Вместо этого агент будет работать как локальная служба.

Устранение неполадок

Перейдите к параметрам проекта Azure DevOps, выберите пулы агентов в разделе "Конвейеры" и выберите пул агентов. Выберите вкладку с меткой диагностики.

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

Неработоспособные агенты

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

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

Save unhealthy agent setting.

Теперь, когда в масштабируемом наборе обнаружен неработоспособный агент, Azure DevOps сохраняет этот агент и связанную виртуальную машину. Сохраненный агент будет отображаться на вкладке "Диагностика " пользовательского интерфейса пула агентов. Перейдите к параметрам проекта Azure DevOps, выберите пулы агентов в разделе Конвейеры, выберите пул агентов, выберите диагностику и запишите имя агента.

Saved agents card.

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

Azure portal Virtual Machine Scale Set instances.

Выберите экземпляр, выберите Подключение и выполните исследование.

Connect to virtual machine instance.

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

Saved agents card delete button.

Вопросы и ответы

Где можно найти образы, используемые для агентов, размещенных корпорацией Майкрософт?

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

Разделы справки настроить агенты масштабируемого набора для выполнения тестов пользовательского интерфейса?

Создайте масштабируемый набор с ОС Windows Server и при создании пула агентов выберите параметр "Настройка виртуальных машин для выполнения интерактивных тестов".

Как удалить агенты?

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

Можно ли настроить пул агентов масштабируемого набора для нулевых агентов в режиме ожидания?

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

Сколько стоят агенты масштабируемых наборов?

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

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

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

Каковы некоторые распространенные проблемы и их решения?

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

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

Увеличение масштаба VMSS не происходит в ожидаемом пятиминутном интервале

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

Масштабируемый набор виртуальных машин Linux Azure DevOps часто не запускает конвейер

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

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

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

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

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

Удалить виртуальную машину после каждой сборки можно будет только для Windows Server и поддерживаемых образов Linux. Это не поддерживается для образов клиента Windows.

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

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

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

Вы можете увидеть несколько тегов, таких как _AzureDevOpsElasticPoolTimeStamp для VMSS в управлении затратами

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

Невозможно создать пул агентов масштабируемого набора и получить сообщение об ошибке, что пул с тем же именем уже существует.

Вы можете получить сообщение об ошибке, например This virtual machine scale set is already in use by pool <pool name> , так как тег по-прежнему существует в масштабируемом наборе даже после удаления. При удалении пула агентов вы пытаетесь удалить тег из масштабируемого набора, но это лучшая попытка, и вы откажете после трех повторных попыток. Кроме того, может быть не более двухчасового интервала, в котором масштабируемый набор виртуальных машин, который не используется любым пулом агентов, не может быть назначен новому. Исправление заключается в том, чтобы дождаться завершения этого периода или вручную удалить тег масштабируемого набора на портале Azure. При просмотре масштабируемого набора на портале Azure щелкните ссылку Теги слева и удалите тег с меткой _AzureDevOpsElasticPool.

Задание обслуживания VMSS не выполняется в агентах или получении журналов

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

Если вы указываете AzDevOps в качестве основного администратора в скрипте для VMSS, могут возникнуть проблемы с конфигурациями агента в экземплярах масштабируемого набора.

Если вы указываете AzDevOps в качестве основного администратора в скрипте для масштабируемого набора виртуальных машин, могут возникнуть проблемы с конфигурациями агента в экземплярах масштабируемого набора (пароль пользователя изменяется, если он уже существует).

Эта проблема возникает из-за того, что скрипты расширения агента пытаются создать пользователя AzDevOps и изменить пароль.

Примечание.

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

Установка расширения агента завершается сбоем в экземплярах масштабируемого набора из-за конфигураций сетевой безопасности и брандмауэра

Расширению требуется возможность скачивать файлы агента сборки из https://vstsagentpackage.azureedge.net/agent, а агент сборки должен иметь возможность регистрироваться в Azure DevOps Services. Убедитесь, что этот URL-адрес и IP-адреса, связанные с Azure DevOps Services, открыты в экземпляре. Сведения об IP-адресах и URL-адресах, которые необходимо разблокировать в брандмауэре, см. в статье Допустимые IP-адреса и URL-адреса домена.

Почему скрипт конфигурации агента масштабирования вызывает Add-MpPreference и настраивает Защитник Windows на агенте?

Чтобы повысить производительность и надежность, скрипты конфигурации вызывают Add-MpPreferenceExclusionPath с содержащим C:\D:\и отключает запланированное и реальное время сканирование файлов в этих папках в агенте в Защитнике Windows. Чтобы изменить поведение по умолчанию, задайте переменную среды с именем ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSIONtrue.

Я хочу увеличить размер пула. Что следует учитывать?

Прежде чем увеличить размер пула, убедитесь, что виртуальная сеть Azure, настроенный для пула Масштабируемые наборы виртуальных машин, имеет достаточно большой диапазон адресного пространства для размещения всех новых агентов. В противном случае может возникнуть ошибка, аналогичная сбою увеличения емкости. Подсеть azure-devops-agent-pool-fabrikam-fibre с префиксом адреса 12.123.45.224/28 не хватает емкости для 5 IP-адресов.