Defina as configurações de dimensionamento para gerenciar o desempenho e o custo do 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 sem estado ou com estado.
Pools sem estado - Forneça um novo agente para cada trabalho.
Pools com estado - Permitem o compartilhamento de agentes entre vários trabalhos.
A configuração padrão para um pool de DevOps gerenciado é sem estado (sempre um novo agente), mas, em alguns casos, as equipes podem querer reutilizar agentes para reutilizar os pacotes ou arquivos criados durante a execução do pipeline anterior. A carga de trabalho de build é um cenário comum em que as equipes desejam preservar o estado e reutilizar agentes. Você pode obter pools com estado por meio de pools de DevOps gerenciados enquanto os equilibra 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.
Observação
Pools sem estado ou uso da configuração de estado do agente Agente novo sempre são recomendados por especialistas em segurança como uma defesa contra ataques à cadeia de suprimentos.
Pools 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 Pools de DevOps Gerenciados. 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 Novo agente todas as vezes, 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ários builds ("kind": "stateful" em modelos de recursos ou { "stateful": {...} } na CLI do Azure) está habilitado, os agentes no pool são considerados com estado. Os pools com estado são configurados usando as configurações a seguir.
Tempo máximo de vida útil para agentes em espera (maxAgentLifetime) configura a duração máxima que um agente em um pool com estado pode ser executado antes de ser desligado e descartado. O formato para o tempo máximo de vida dos agentes em espera é dd.hh:mm:ss. O valor padrão de Tempo máximo de vida útil para agentes em espera é definido como a duração máxima permitida de sete dias (7.00:00:00).
Período de carência (gracePeriodTimeSpan) configura a quantidade de tempo que um agente em um pool com estado aguarda novos trabalhos antes de desligar 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 é sem período de carência.
Enquanto os agentes em pools stateless são desligados e descartados após cada trabalho, os agentes em pools stateful continuam em execução se qualquer uma das condições a seguir 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 desligá-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 desligar.
Se os agentes em espera estiverem ativados e a imagem do agente atender aos critérios do período de provisionamento ativo, o agente continuará a ser executado e aguardará trabalhos.
Os agentes em execução em pools com estado serão desligados e descartados se forem executados continuamente pela duração especificada por 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 útil dos agentes em espera estiver configurado para três dias e o modo de agente em espera estiver definido como Manual, esquema para todas as semanas (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 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 enfileirado correspondente ao agente. Depois 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 online 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 pipelines, que podem ter que aguardar alguns instantes, até 15 minutos, para que um agente seja provisionado sob demanda. Para obter melhor desempenho, habilite o modo de agente em espera e configure um agendamento 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 de espera manual.
Automático - Use uma programação automática em espera 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 resourcePredictionsProfile seção da agentProfile propriedade. Defina "kind": "Manual" para configurar um esquema de início do zero, dia da semana ou esquema de toda a semana e especifique os detalhes do esquema na resourcePredictions seção. Defina "kind": "Automatic" para configurar agentes em 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 escalabilidade.
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 resourcePredictionsProfile seção do agent-profile parâmetro. Defina "kind": "Manual" para configurar um esquema de início do zero, dia da semana ou esquema de toda a semana e especifique os detalhes do esquema na resourcePredictions seção. Defina "kind": "Automatic" para configurar agentes em espera automáticos. Consulte as seções a seguir para obter detalhes sobre como configurar cada tipo de escalabilidade.
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 sua compreensão de quando os agentes no pool têm maior probabilidade de serem usados e quantos agentes provavelmente serão usados, além de especificar uma contagem de provisionamento de agentes que atendem à demanda projetada.
Você pode criar sua própria programação 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 o fuso horário de pré-provisionamento é (UTC) Tempo Universal Coordenado.
Dica
A contagem de provisionamento em um esquema não pode ser maior que o Máximo de agentes configurados nas configurações do pool.
A cada poucos minutos, os Pools de DevOps Gerenciados verificam a contagem de agentes ativos em execução e agentes em espera aguardando trabalhos, para garantir que a contagem de provisionamento de agentes especificada 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 elevar 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 TimeZone 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 o fuso horário de pré-provisionamento é (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 número 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 na images seção ao usar modelos do 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 o seu esquema usando a timeZone propriedade. O padrão é UTC. Para recuperar uma lista de nomes de fuso horário para essa propriedade, consulte Método TimeZoneInfo.GetSystemTimeZones.
A programação para os agentes em espera é definida pela daysData lista. A daysData lista pode ter um ou sete itens.
Uma daysData lista com sete itens mapeia os dias da semana, começando com o 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 no dia seguinte.
Uma daysData lista com um único item define um esquema All Week, em que a única "time": count entrada corresponde à contagem de agentes em espera para a semana inteira.
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 9:00 AM (contagem 1de agentes em standby) até as 5:00 PM (contagem 0de agentes em standby).
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 serem agendados a partir do horário especificado, 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 redefinidas automaticamente 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 de agentes em espera para esse dia. Para definir o agente em 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 e parar em 09:00:0017:00:00 (usando o fuso horário especificado pela resourcePredictions propriedade), especifique a configuração a seguir.
{
"09:00:00": 1,
"17:00:00": 0
}
Para programar 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 configuração a seguir.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Para programar um agente em espera para estar disponível a partir do 09:00:00 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 agent-profile parâmetro e os detalhes são configurados na resourcePredictions seção.
Especifique o fuso horário desejado para o seu esquema usando a timeZone propriedade. O padrão é UTC. Para recuperar uma lista de nomes de fuso horário para essa propriedade, consulte Método TimeZoneInfo.GetSystemTimeZones.
A programação para os agentes em espera é definida pela daysData lista. A daysData lista pode ter um ou sete itens.
Uma daysData lista com sete itens mapeia os dias da semana, começando com o 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 no dia seguinte.
Uma daysData lista com um único item define um esquema All Week, em que a única "time": count entrada corresponde à contagem de agentes em espera para a semana inteira.
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 9:00 AM (contagem 1de agentes em standby) até as 5:00 PM (contagem 0de agentes em standby).
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 serem agendados a partir do horário especificado, 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 redefinidas automaticamente 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 de agentes em espera para esse dia. Para definir o agente em 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 e parar em 09:00:0017:00:00 (usando o fuso horário especificado pela resourcePredictions propriedade), especifique a configuração a seguir.
{
"09:00:00": 1,
"17:00:00": 0
}
Para programar 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 configuração a seguir.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Para programar um agente em espera para estar disponível a partir do 09:00:00 dia especificado e parando no 17:00:00 dia seguinte, use dois itens consecutivos daysData .
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Comece 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.
Propriedade
Descrição
Vários dias
Quando marcada, você pode configurar um Dia de Início e um Dia de Término para seu esquema de provisionamento.
Até o próximo período
Quando marcado, o período de provisionamento é executado a partir da 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.
Horário de Início
A hora em que o período de provisionamento começa.
Horário de Término
A hora em que o período de provisionamento termina. Obrigatório, a menos que Até o próximo período seja marcado.
Count
O número de agentes em espera a serem provisionados. Esse número deve ser maior que zero e não deve ser maior 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 da lista Esquema de pré-provisionamento.
O exemplo a seguir configura um esquema manual com 1 agente provisionado nas manhãs de segunda-feira, das 12:00 às 5:00 EST.
Se você escolher o esquema de dia 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.
Propriedade
Descrição
Horário de Início
A hora em que o período de provisionamento começa.
Horário de Término
A hora em que o período de provisionamento termina.
Contagem de provisionamento
O número de agentes em espera a serem provisionados. Esse número deve ser maior que zero e não deve ser maior 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 fora do horário de trabalho 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 enfileiradas do pool em períodos de cinco minutos e atribuem o percentil especificado (para evitar picos) a cada hora.
Mais custo-efetivo (MostCostEffective) - 10º percentil
Mais econômico (MoreCostEffective) - percentil 25
Balanceado (padrão) (Balanced) - 50º percentil
Mais desempenho (MorePerformance) - percentil 75
Melhor desempenho (BestPerformance) - percentil 90