Настройка масштабирования

Вы можете управлять производительностью и стоимостью экземпляра управляемых пулов DevOps, настроив параметры масштабирования. Сведения о ценах и производительности см. в статье "Управление затратами и производительностью".

Состояние агента

Вы можете настроить пулы как:

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

Примечание.

Агенты безопасности рекомендуют пользователям использовать бесcостояные пулы для защиты от атак цепочки поставок. Каждый раз используйте настройку состояния свежий агент.

Пулы без отслеживания состояния

При настройке статического агента новый агент приобретается для каждой задачи. Агент удаляется после завершения задания.

Дополнительные сведения о жизненном цикле агентов без состояния и их использовании в Azure Pipelines смотрите в разделе Lifecycle агентов и потенциальных задержек выделения.

Снимок экрана, показывающий агента без состояния.

При установке состояния агента на новый агент каждый раз, новый агент приобретается для каждого задания. Агент удаляется после завершения задания.

Пулы с состоянием

Снимок экрана: агент с отслеживанием состояния.

Если включить параметр Агент может использоваться несколькими сборками (настройка "kind": "stateful" в шаблонах ресурсов или настройка { "stateful": {...} } в Azure CLI), агенты в пуле являются с сохранением состояния. Состоянием отслеживаемых пулов можно управлять с помощью следующих параметров:

  • Максимальное время жизни для резервных агентов (maxAgentLifetime) настраивает максимальную длительность, которую агент в пуле с сохранением состояния может выполняться перед завершением и аннулированием. Формат для максимального времени жизни для резервных агентов - это dd.hh:mm:ss. Значение по умолчанию для Максимального времени жизни для резервных агентов установлено на максимально допустимый срок в семь дней (7.00:00:00).

  • Льготный период (gracePeriodTimeSpan) устанавливает период времени, в течение которого агент в пуле с отслеживанием состояния ожидает новых заданий, прежде чем завершить работу после выполнения всех текущих и запланированных заданий. Формат для льготного периодаdd.hh:mm:ss, а по умолчанию — отсутствие льготного периода.

    Внимание

    Если задание выполняется в момент истечения интервала максимального времени жизни для резервных агентов, агент не завершит работу до завершения задания, если только выполнение задания не займет более двух дней. Отдельные задания в управляемых пулах DevOps могут выполняться не более двух дней, даже если они работают в резервном агенте с более чем двумя днями, настроенными на максимальное время жизни для резервных агентов. (Управляемый пул DevOps поддерживает конвейеры, которые выполняются дольше двух дней, разбив их на несколько коротких заданий, которые выполняются в течение двух дней или меньше.)

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

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

Агенты, запущенные в пуле с состоянием, завершают работу и удаляются, если они продолжают работать непрерывно в течение времени, указанного в параметре максимальное время жизни для резервных (standby) агентов, даже если предыдущие условия выполняются. Например, если для резервных агентов настроено максимальное время жизни на три дня, а режим резервного агента установлен как вручную, схема на всю неделю (компьютеры доступны 24/7), агенты будут перезагружены после трех дней непрерывной работы.

Внимание

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

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

Режим резервного агента

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

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

Внимание

Количество выделения в схеме не может быть больше значения «Максимальное количество агентов», которое вы настраиваете в параметрах пула.

Режим резервного агента можно настроить с помощью следующих параметров:

  • Отключен: режим ожидания агента отключен, а агенты выделяются по запросу, когда задания помещаются в очередь.
  • Руководство: Настройте расписание резервного ожидания вручную.
  • Автоматически. Используйте автоматическое расписание ожидания на основе журнала использования агента. Его можно настроить для оптимизации затрат и производительности.

Снимок экрана: выбор для режима резервного агента.

Руководство

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

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

Резервные агенты вручную можно настроить одним из следующих трех способов:

Каждое из быстрых руководств по предварительной подготовке содержит следующие общие параметры (в дополнение к параметрам, характерным для данного руководства):

  • Предварительное настройка часового пояса: позволяет настроить часовой пояс для периодов времени в вашей схеме предварительного обеспечения. Значением по умолчанию для Pre-provisioning TimeZone является (UTC) всемирное координированное время.
  • Процент резервного агента: настраивает процент резервных агентов, которые требуется для каждого образа. Можно ввести *, чтобы убедиться, что все изображения подготовлены одинаково, или можно указать целое число от 0 до 100 для указания процента. Если указать процент, общее значение для всех изображений должно быть равно 100. Если у вас есть один образ, укажите * или 100. При использовании шаблонов Azure Resource Manager (шаблоны ARM) можно настроить параметр Процент агентаStandby в разделе images. Дополнительные сведения см. в разделе "Настройка образов".

Снимок экрана: режим ожидания вручную.

Начать с нуля

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

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

После создания периода подготовки можно удалить или изменить период из списка схем предварительной подготовки .

В следующем примере показано, как настроить ручную схему с одним агентом, развернутым ранним утром в понедельник с 00:00 до 05:00 по EST.

Снимок экрана: схема масштабирования вручную.

Схема еженедельного дня

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

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

В следующем примере четыре агента назначены для использования в рабочее время, а агенты не назначаются в нерабочие часы и выходные дни в восточном времени (UTC-5).

Снимок экрана: схема дня недели.

Расписание на всю неделю

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

Снимок экрана: схема всей недели.

Автоматически

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

  • Наиболее экономически эффективный (MostCostEffective): 10-й процентиль.
  • Более экономичное (MoreCostEffective): 25-й процентиль.
  • Balanced (default) (Balanced): 50-й процентиль.
  • Больше производительности (MorePerformance): 75-й процентиль.
  • Лучшая производительность (BestPerformance): 90-й процентиль.

Снимок экрана: параметр автоматического масштабирования.

Жизненный цикл агентов и потенциальные задержки в выделении

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

Когда управляемые пулы DevOps подготавливают новых агентов, они пытаются скачать последнюю версию агента Azure Pipelines, чтобы она была уже загружена на резервных агентов перед переходом в состояние готовности. Запуск, подключение и начало задания может занять от 10 секунд до минуты в зависимости от скорости SKU пула, используемого образа и сетевой нагрузки. Кроме того, указание определенных параметров в задании конвейера может привести к повторной загрузке и запуску другого агента. Регрессии и откаты агента также могут вызвать его повторную загрузку.

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

  • Есть ли у вас готовые агенты? Наиболее распространенной проблемой является недоразумение о том, когда агенты должны быть предварительно подготовлены. При выполнении следующих условий машины должны запускаться с нуля:
    • Количество заданий в очереди превышает количество резервных агентов в пуле.
    • Задания ставятся в очередь вне плана предварительного распределения.
    • Число резервных агентов должно быть пустым.
  • Правильно ли вы настраиваете резервные агенты с несколькими изображениями? Если вы не указываете, какой образ следует использовать в конвейере с помощью запроса ImageOverride , задания предназначены для первого образа. В зависимости от настроек масштабирования у вас может быть не так много агентов, как ожидалось, поскольку некоторые из них выделены для других изображений.
  • Вы используете ImageVersionOverride спрос в конвейерных системах? Если вы используете ImageVersionOverride запрос, чтобы указать другую версию образа, отличную от того, что настроено в параметрах пула, каждый агент запускается по запросу с помощью указанной версии образа. Резервные агенты подготавливаются с помощью версий образов, указанных в конфигурации пула. Если вы используете ImageVersionOverride, то ни один из резервных агентов не соответствует этой версии, так что запускается новый агент.
  • Замедляется ли работа вашего пула из-за настроек прокси-сервера, виртуальной сети или брандмауэра? Потенциальная задержка в любом сетевом параметре может привести к тому, что агенты дольше запускаются и подключаются к Azure DevOps.
  • Вы изменяете версию агента? По умолчанию управляемые пулы DevOps выполняются в последней версии агента задач Azure DevOps. Параметры в YAML конвейера (например, Agent.Version требование) и параметры организации Azure DevOps могут принудительно заставить использовать более старые версии агента задач, что требует их повторной загрузки после выделения машины.