Configure as configurações de dimensionamento para gerenciar o desempenho e o custo do seu pool de DevOps gerenciado. Para obter informações sobre preços e desempenho, consulte Gerenciar custo e desempenho.
Estado do agente
Os pools de DevOps gerenciados podem ser configurados como stateless ou stateful.
Piscinas sem estado - Forneça um novo agente para cada trabalho.
Pools com estado - Permite o compartilhamento de agentes entre vários trabalhos.
A configuração padrão para um pool de DevOps Gerenciado é stateless (Fresh agent toda vez), mas em alguns casos as equipes podem querer reutilizar agentes para reutilizar os pacotes ou arquivos criados durante a execução de pipeline anterior. A carga de trabalho de compilação é um cenário comum em que as equipes desejam preservar o estado e reutilizar os agentes. Você pode obter pools com monitoração de estado por meio de Pools de DevOps Gerenciados, equilibrando-os com as práticas recomendadas de segurança. Por padrão, um agente pode ser reutilizado por no máximo 7 dias, mas você pode configurá-lo para ser reciclado mais cedo.
Nota
Pools sem estado ou uso da configuração de estado do agente Agente novo sempre são recomendados por especialistas em segurança como defesa contra ataques à cadeia de suprimentos.
Piscinas sem estado
Quando um agente sem estado é configurado, um novo agente é adquirido para cada trabalho e é descartado após a conclusão do trabalho.
Os agentes são configurados usando a agentProfile propriedade no recurso Managed DevOps Pools. No exemplo a seguir, um agente sem estado é especificado.
Os agentes são configurados usando o agent-profile parâmetro ao criar ou atualizar um pool.
No exemplo a seguir, um agente sem estado é especificado sem agentes em espera.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
O exemplo a seguir mostra o conteúdo do arquivo agent-profile.json.
{
"Stateless": {}
}
Quando o estado do agente é definido como Agente novo toda vez, um novo agente é adquirido para cada trabalho e é descartado após a conclusão do trabalho.
Quando o mesmo agente pode ser usado por várias compilações ("kind": "stateful" em modelos de recursos ou { "stateful": {...} } na CLI do Azure) está habilitado, os agentes no pool são considerados com monitoração de estado. Os pools com estado são configurados usando as seguintes configurações.
Max time to live for standby agents (maxAgentLifetime) configura a duração máxima que um agente em um pool com monitoração de estado pode executar antes de ser desligado e descartado. O formato do Max time to live para agentes em espera é dd.hh:mm:ss. O valor padrão de Max time to live para agentes em espera é definido como a duração máxima permitida de sete dias (7.00:00:00).
O Período de Carência (gracePeriodTimeSpan) configura a quantidade de tempo que um agente em um pool com estado aguarda por novos trabalhos antes de encerrar depois que todos os trabalhos atuais e enfileirados forem concluídos. O formato do Período de Carência é dd.hh:mm:ss e o padrão é nenhum período de carência.
Enquanto os agentes em pools sem estado são desligados e descartados após cada trabalho, os agentes em pools com monitoração de estado continuam em execução se qualquer uma das seguintes condições for atendida.
Se houver outro trabalho na fila quando o primeiro trabalho for concluído, os Pools de DevOps Gerenciados enviarão esse trabalho para o agente que executou o primeiro trabalho em vez de encerrá-lo.
Se houver um período de carência configurado para o pool, os agentes aguardarão novos trabalhos pela duração especificada pelo período de carência antes de encerrar.
Se os agentes em espera estiverem habilitados e a imagem do agente atender aos critérios do período de provisionamento ativo, o agente continuará a executar e aguardar os trabalhos.
Os agentes em execução em pools com monitoração de estado são desligados e descartados se forem executados continuamente durante o período especificado pelo tempo máximo de vida útil para agentes em espera, mesmo que as condições anteriores sejam verdadeiras. Por exemplo, se o tempo máximo de vida para agentes em espera estiver configurado para três dias e o modo de agente em espera estiver definido como Manual, All Week Scheme (Máquinas disponíveis 24 horas por dia, 7 dias por semana), os agentes serão reiniciados após três dias contínuos de tempo de atividade.
Importante
Os agentes em pools com monitoração de estado ainda podem ser desligados e descartados após a conclusão de um trabalho se não houver período de carência, nenhum período de provisionamento ativo para agentes em espera e nenhum trabalho em fila correspondente ao agente. Uma vez que um agente é descartado, qualquer estado é perdido.
O período de carência permite a maneira mais econômica de executar pools com estado para pipelines com carga consistente e não requer o uso do modo de agente em espera para manter os agentes on-line e prontos para aceitar trabalhos.
Modo de agente em espera
Quando você cria um pool, o modo de agente em espera está desativado por padrão, e não há agentes em espera para atribuir imediatamente aos seus pipelines, que podem ter que esperar alguns momentos, até 15 minutos, para que um agente seja provisionado sob demanda. Para um melhor desempenho, habilite o modo de agente em espera e configure uma agenda de agente em espera que forneça capacidade para sua carga de trabalho.
Desativado - O modo de agente em espera está desativado e os agentes são provisionados sob demanda quando os trabalhos são enfileirados.
Manual - Configure um agendamento manual de espera.
Automático - Use uma programação de espera automática com base no histórico de uso do agente e configurável para custo e desempenho.
Os agentes em espera são configurados usando a resourcePredictionsProfileagentProfile seção da propriedade. Defina "kind": "Manual" para configurar um esquema de início do zero, esquema de dia da semana ou esquema de toda a resourcePredictions semana e especifique os detalhes do esquema na seção. Definido "kind": "Automatic" para configurar agentes de espera automáticos. Omita a seção para desativar os ResourcePredictionsProfile agentes em espera. Consulte as seções a seguir para obter detalhes sobre como configurar cada tipo de dimensionamento.
Os agentes são configurados usando o agent-profile parâmetro ao criar ou atualizar um pool.
Os agentes em espera são configurados usando a resourcePredictionsProfileagent-profile seção do parâmetro. Defina "kind": "Manual" para configurar um esquema de início do zero, esquema de dia da semana ou esquema de toda a resourcePredictions semana e especifique os detalhes do esquema na seção. Definido "kind": "Automatic" para configurar agentes de espera automáticos. Consulte as seções a seguir para obter detalhes sobre como configurar cada tipo de dimensionamento.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
O exemplo a seguir mostra o conteúdo do arquivo agent-profile.json.
O modo manual é mais adequado para equipes que têm conhecimento de seus padrões de uso de pipelines de CI/CD. Se você selecionar a opção manual, precisará definir seu esquema de pré-provisionamento com base em seu entendimento de quando os agentes no pool têm maior probabilidade de serem usados e quantos agentes provavelmente serão usados, e especificar uma contagem de provisionamento de agentes que atendam à demanda projetada.
Você pode criar sua própria agenda de provisionamento ou escolher uma das agendas predefinidas e pode configurar o fuso horário a ser usado para especificar as agendas. O valor padrão para Pre-provisioning TimeZone é (UTC) Tempo Universal Coordenado.
Gorjeta
A contagem de provisionamento em um esquema não pode ser maior do que os agentes máximos configurados nas configurações do pool.
A cada poucos minutos, os Pools de DevOps Gerenciados verificam a contagem de agentes ativos executando trabalhos e agentes em espera aguardando trabalhos, para garantir que a contagem de provisionamento de agentes especificados pelo esquema de provisionamento atual esteja disponível. Se a contagem de provisionamento atual for 10 e houver cinco agentes executando trabalhos e dois agentes em espera, os Pools de DevOps Gerenciados iniciarão três agentes em espera adicionais para aumentar a contagem total de agentes para 10.
A configuração manual do agente em espera pode ser configurada de uma das três maneiras a seguir.
Começar do zero - Configurar um conjunto de períodos de provisionamento para agentes em espera
Cada um dos inícios rápidos de pré-provisionamento tem as seguintes configurações comuns, além das configurações específicas para esse início rápido.
O fuso horário de pré-provisionamento permite que você configure o fuso horário para os horários em seu esquema de pré-provisionamento. O valor padrão para Pre-provisioning TimeZone é (UTC) Tempo Universal Coordenado.
A porcentagem do agente em espera configura a porcentagem de agentes em espera que você deseja para cada imagem. Você pode inserir * para garantir que todas as imagens sejam provisionadas igualmente ou pode especificar um inteiro de 0 a 100 para representar uma porcentagem. Se você especificar uma porcentagem, o total de todas as imagens deverá ser igual a 100. Se você tiver uma única imagem, especifique * ou 100. A porcentagem do agente em espera é configurada images na seção ao usar modelos ARM. Para obter mais informações, consulte Configurar imagens.
O provisionamento manual do agente em espera é especificado na resourcePredictionsProfile seção do , e os detalhes são configurados agentProfilena resourcePredictions seção .
Especifique o fuso horário desejado para seu esquema usando a timeZone propriedade. A predefinição é UTC. Para recuperar uma lista de nomes de fuso horário para essa propriedade, consulte Método TimeZoneInfo.GetSystemTimeZones.
O cronograma para os agentes em espera é definido pela daysData lista. A daysData lista pode ter um item ou sete itens.
Uma daysData lista com sete itens mapeia os dias da semana, começando pelo domingo. Cada um desses sete itens pode ter zero ou mais "time": count entradas, especificando uma hora no formato de 24 horas e uma contagem de agentes em espera. A contagem especificada de agentes em espera é mantida até a próxima "time": count entrada, que pode ser no mesmo dia ou em um dia seguinte.
Uma daysData lista com um único item define um esquema de todas as semanas, onde a entrada única "time": count corresponde à contagem do agente em espera para toda a semana.
O exemplo a seguir é um esquema de agente em espera manual, usando Eastern Standard Time, com um único agente provisionado de segunda a sexta-feira, das 9h00 (contagem 1de agentes em espera) até 17h00 (contagem 0de agentes em espera).
Um único daysData item contém um dicionário de tempos e contagens de agentes em espera. Cada "time" : count entrada especifica o número de agentes em espera a agendar a partir da hora especificada, no formato de 24 horas. As entradas consecutivas "time" : count especificam uma sequência de contagens de agentes agendadas para esse dia.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
As contagens de agentes em espera não são automaticamente redefinidas para zero no final de um dia ou no final da semana, e especificar um item vazio daysData não desativa os agentes em espera para esse dia. Um item vazio daysData significa que não há alterações na programação de contagem do agente em espera para esse dia. Para definir o agente de espera como zero a partir de um período de tempo específico, você deve fornecer explicitamente uma "time" : count entrada com um count de 0.
Exemplos
Para não fazer nenhum ajuste na contagem de agentes em espera especificada na conclusão do dia anterior (ou semana, se você estiver configurando o primeiro período da semana), especifique um daysData item com zero entradas.
{
}
Para agendar um único agente em espera para iniciar 09:00:00 e parar em 17:00:00 (usando o fuso horário especificado pela resourcePredictions propriedade), especifique a seguinte configuração.
{
"09:00:00": 1,
"17:00:00": 0
}
Para agendar um único agente em espera a partir da meia-noite até 09:00:00, seguido por 10 agentes em espera até 17:00:00, especifique a seguinte configuração.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Para agendar um agente em espera para estar disponível a 09:00:00 partir do dia especificado e parando no 17:00:00 dia seguinte, use dois itens consecutivos daysData .
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Os agentes são configurados usando o agent-profile parâmetro ao criar ou atualizar um pool.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
O exemplo a seguir mostra o conteúdo do arquivo agent-profile.json.
O provisionamento manual do agente em espera é especificado na resourcePredictionsProfile seção do parâmetro e os detalhes são configurados agent-profile na resourcePredictions seção .
Especifique o fuso horário desejado para seu esquema usando a timeZone propriedade. A predefinição é UTC. Para recuperar uma lista de nomes de fuso horário para essa propriedade, consulte Método TimeZoneInfo.GetSystemTimeZones.
O cronograma para os agentes em espera é definido pela daysData lista. A daysData lista pode ter um item ou sete itens.
Uma daysData lista com sete itens mapeia os dias da semana, começando pelo domingo. Cada um desses sete itens pode ter zero ou mais "time": count entradas, especificando uma hora no formato de 24 horas e uma contagem de agentes em espera. A contagem especificada de agentes em espera é mantida até a próxima "time": count entrada, que pode ser no mesmo dia ou em um dia seguinte.
Uma daysData lista com um único item define um esquema de todas as semanas, onde a entrada única "time": count corresponde à contagem do agente em espera para toda a semana.
O exemplo a seguir é um esquema de agente em espera manual, usando Eastern Standard Time, com um único agente provisionado de segunda a sexta-feira, das 9h00 (contagem 1de agentes em espera) até 17h00 (contagem 0de agentes em espera).
Um único daysData item contém um dicionário de tempos e contagens de agentes em espera. Cada "time" : count entrada especifica o número de agentes em espera a agendar a partir da hora especificada, no formato de 24 horas. As entradas consecutivas "time" : count especificam uma sequência de contagens de agentes agendadas para esse dia.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
As contagens de agentes em espera não são automaticamente redefinidas para zero no final de um dia ou no final da semana, e especificar um item vazio daysData não desativa os agentes em espera para esse dia. Um item vazio daysData significa que não há alterações na programação de contagem do agente em espera para esse dia. Para definir o agente de espera como zero a partir de um período de tempo específico, você deve fornecer explicitamente uma "time" : count entrada com um count de 0.
Exemplos
Para não fazer nenhum ajuste na contagem de agentes em espera especificada na conclusão do dia anterior (ou semana, se você estiver configurando o primeiro período da semana), especifique um daysData item com zero entradas.
{
}
Para agendar um único agente em espera para iniciar 09:00:00 e parar em 17:00:00 (usando o fuso horário especificado pela resourcePredictions propriedade), especifique a seguinte configuração.
{
"09:00:00": 1,
"17:00:00": 0
}
Para agendar um único agente em espera a partir da meia-noite até 09:00:00, seguido por 10 agentes em espera até 17:00:00, especifique a seguinte configuração.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Para agendar um agente em espera para estar disponível a 09:00:00 partir do dia especificado e parando no 17:00:00 dia seguinte, use dois itens consecutivos daysData .
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Começar do zero
Se você optar por começar do zero, poderá adicionar uma lista de períodos de provisionamento para servir como seu esquema de provisionamento. Cada período de provisionamento consiste em um dia de início, dia de término, fuso horário, hora de início, hora de término e uma contagem. Os períodos de provisionamento não podem se sobrepor.
Property
Description
Múltiplos dias
Quando marcada, você pode configurar um Dia de Início e um Dia de Término para seu esquema de provisionamento.
Até ao próximo período
Quando verificado, o período de provisionamento é executado desde a Hora de Início até o início do próximo período de provisionamento.
Dia de Início
O dia em que o período de provisionamento começa.
Dia de Fim
O dia em que termina o período de provisionamento. Obrigatório se a opção Multi-Day estiver marcada.
Hora de Início
A hora em que o período de provisionamento começa.
Hora de Fim
O momento em que o período de provisionamento termina. Obrigatório, a menos que até o próximo período seja verificado.
Count
O número de agentes em espera a provisionar. Esse número deve ser maior que zero e não deve ser maior do que o valor Máximo de agentes configurado nas configurações do Pool.
Depois de criar um período de provisionamento, você pode excluir ou editar o período na lista Esquema de pré-provisionamento.
O exemplo a seguir configura um esquema manual com 1 agente provisionado nas manhãs de segunda-feira, das 12h00 às 5h00 EST.
Se você escolher o esquema de dias da semana, poderá especificar uma hora de início e uma hora de término em que o número especificado de agentes em espera estará em espera a cada dia da semana.
Property
Description
Hora de Início
A hora em que o período de provisionamento começa.
Hora de Fim
O momento em que o período de provisionamento termina.
Contagem de provisionamento
O número de agentes em espera a provisionar. Esse número deve ser maior que zero e não deve ser maior do que o valor Máximo de agentes configurado nas configurações do Pool.
O exemplo a seguir configura quatro agentes a serem usados durante o horário de trabalho com 0 agentes durante o horário não laboral e fins de semana, usando o horário padrão do leste.
Se você não conhece seus padrões de uso e deseja confiar na previsão automática com base em dados anteriores, escolha Automático. Você pode equilibrar o custo e o desempenho do agente usando um controle deslizante com as cinco opções a seguir. Os Pools de DevOps Gerenciados executam uma consulta nas últimas três semanas de dados históricos (se disponíveis), organizando sessões em fila do pool em períodos de cinco minutos e atribuindo o percentil especificado (para evitar picos) a cada hora.
Mais rentável (MostCostEffective) - percentil 10
Mais rentável (MoreCostEffective) - percentil 25
Balanceado (padrão) (Balanced) - percentil 50
Mais desempenho (MorePerformance) - percentil 75
Melhor desempenho (BestPerformance) - percentil 90