Configurare le impostazioni di ridimensionamento per gestire le prestazioni e i costi del pool DevOps gestito. Per informazioni sui prezzi e sulle prestazioni, vedere Gestire i costi e le prestazioni.
Stato dell'agente
I pool DevOps gestiti possono essere configurati come senza stato o con stato.
Pool senza stato: fornire un nuovo agente per ogni processo.
Pool con stato: consente la condivisione di agenti tra più processi.
L'impostazione predefinita per un pool devOps gestito è senza stato (agente aggiornato ogni volta), ma in alcuni casi i team potrebbero voler riutilizzare gli agenti per riutilizzare i pacchetti o i file creati durante l'esecuzione della pipeline precedente. Il carico di lavoro di compilazione è uno scenario comune in cui i team vogliono mantenere lo stato e riutilizzare gli agenti. È possibile ottenere pool con stato tramite pool DevOps gestiti, bilanciandoli con le procedure consigliate per la sicurezza. Per impostazione predefinita, un agente può essere riutilizzato per un massimo di 7 giorni, ma è possibile configurarlo per essere riciclato prima.
Nota
I pool senza stato o l'uso dello stato dell'agente impostano Fresh agent ogni volta che sono consigliati dagli esperti di sicurezza come difesa dagli attacchi della supply chain.
Pool senza stato
Quando viene configurato un agente senza stato, viene acquistato un nuovo agente per ogni processo e viene rimosso al termine del processo.
Gli agenti vengono configurati usando la agentProfile proprietà nella risorsa Pool DevOps gestiti. Nell'esempio seguente viene specificato un agente senza stato.
Nell'esempio seguente viene specificato un agente senza stato senza agenti di standby.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Nell'esempio seguente viene illustrato il contenuto del file agent-profile.json .
{
"Stateless": {}
}
Quando lo stato dell'agente è impostato su Fresh Agent ogni volta, viene acquistato un nuovo agente per ogni processo e viene rimosso al termine del processo.
Quando lo stesso agente può essere usato da più compilazioni ("kind": "stateful" nei modelli di risorse o { "stateful": {...} } nell'interfaccia della riga di comando di Azure) è abilitato, gli agenti nel pool vengono considerati con stato. I pool con stato vengono configurati usando le impostazioni seguenti.
Il tempo massimo di esecuzione per gli agenti di standby (maxAgentLifetime) configura la durata massima che un agente in un pool con stato può essere eseguito prima che venga arrestato e rimosso. Il formato di durata massima per gli agenti di standby è dd.hh:mm:ss. Il valore predefinito Max time to live for standby agents è impostato sulla durata massima consentita di sette giorni (7.00:00:00).
Periodo di tolleranza (gracePeriodTimeSpan) configura la quantità di tempo per cui un agente in un pool con stato attende i nuovi processi prima dell'arresto dopo il completamento di tutti i processi correnti e in coda. Il formato del periodo di tolleranza è dd.hh:mm:ss e il valore predefinito non è un periodo di tolleranza.
Mentre gli agenti nei pool senza stato vengono arrestati e rimossi dopo ogni processo, gli agenti nei pool con stato continuano a essere in esecuzione se vengono soddisfatte una delle condizioni seguenti.
Se è presente un altro processo in coda al completamento del primo processo, i pool di DevOps gestiti inviano tale processo all'agente che ha eseguito il primo processo invece di arrestarlo.
Se è configurato un periodo di tolleranza per il pool, gli agenti attendono i nuovi processi per la durata specificata dal periodo di tolleranza prima dell'arresto.
Se gli agenti di standby sono abilitati e l'immagine dell'agente soddisfa i criteri del periodo di provisioning attivo, l'agente continua a essere eseguito e attende i processi.
Gli agenti in esecuzione nei pool con stato vengono arrestati e rimossi se vengono eseguiti continuamente per la durata specificata da Max time to live per gli agenti di standby, anche se le condizioni precedenti sono vere. Se, ad esempio, la durata massima per gli agenti di standby è configurata per tre giorni e la modalità agente standby è impostata su Manuale, Schema di tutte le settimane (computer disponibili 24/7), gli agenti vengono riavviati dopo tre giorni di tempo di attività continui.
Importante
Gli agenti nei pool con stato possono comunque essere arrestati e rimossi dopo il completamento di un processo se non è presente alcun periodo di tolleranza, nessun periodo di provisioning attivo per gli agenti di standby e nessun processo in coda corrispondente all'agente. Una volta rimosso un agente, qualsiasi stato viene perso.
Il periodo di tolleranza consente il modo più conveniente per eseguire pool con stato per le pipeline con carico coerente e non richiede l'uso della modalità agente standby per mantenere online gli agenti e pronti ad accettare processi.
Modalità agente standby
Quando si crea un pool, la modalità agente standby è disattivata per impostazione predefinita e non sono presenti agenti di standby da assegnare immediatamente alle pipeline, che potrebbero dover attendere alcuni istanti, fino a 15 minuti, affinché venga effettuato il provisioning di un agente su richiesta. Per prestazioni migliori, abilitare la modalità agente standby e configurare una pianificazione dell'agente di standby che fornisce capacità per il carico di lavoro.
Disattivata : la modalità agente standby è disattivata e gli agenti vengono sottoposte a provisioning su richiesta quando i processi vengono accodati.
Manuale : configurare una pianificazione di standby manuale.
Automatico : usare una pianificazione di standby automatica in base alla cronologia di utilizzo dell'agente e configurabile per i costi e le prestazioni.
Gli agenti standby vengono configurati usando la resourcePredictionsProfile sezione della agentProfile proprietà . Impostare "kind": "Manual" per configurare un avvio da zero, uno schema della settimana o tutto il giorno della settimana e specificare i dettagli dello schema nella resourcePredictions sezione . Impostare "kind": "Automatic" per configurare gli agenti di standby automatici. Omettere la ResourcePredictionsProfile sezione per disabilitare gli agenti di standby. Per informazioni dettagliate su come configurare ogni tipo di ridimensionamento, vedere le sezioni seguenti.
Gli agenti standby vengono configurati usando la resourcePredictionsProfile sezione del agent-profile parametro . Impostare "kind": "Manual" per configurare un avvio da zero, uno schema della settimana o tutto il giorno della settimana e specificare i dettagli dello schema nella resourcePredictions sezione . Impostare "kind": "Automatic" per configurare gli agenti di standby automatici. Per informazioni dettagliate su come configurare ogni tipo di ridimensionamento, vedere le sezioni seguenti.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Nell'esempio seguente viene illustrato il contenuto del file agent-profile.json .
La modalità manuale è più adatta per i team che hanno familiarità con i modelli di utilizzo delle pipeline CI/CD. Se si seleziona l'opzione manuale, è necessario definire lo schema di pre-provisioning in base alla comprensione dell'uso degli agenti nel pool e del numero di agenti che potrebbero essere usati e specificare un conteggio di provisioning degli agenti che soddisfano la richiesta prevista.
È possibile creare una pianificazione di provisioning personalizzata o scegliere tra una delle pianificazioni predefinite ed è possibile configurare il fuso orario da usare per specificare le pianificazioni. Il valore predefinito per Il fuso orario di pre-provisioning è (UTC) Coordinated Universal Time.
Suggerimento
Il numero di provisioning in uno schema non può essere maggiore degli agenti massimi configurati nelle impostazioni pool.
Ogni pochi minuti, i pool di DevOps gestiti controllano il numero di agenti attivi che eseguono processi e agenti di standby in attesa di processi, per assicurarsi che il numero di provisioning degli agenti specificati dallo schema di provisioning corrente sia disponibile. Se il numero di provisioning corrente è 10 e sono presenti cinque agenti che eseguono processi e due agenti in standby, i pool di DevOps gestiti avviano tre agenti di standby aggiuntivi per portare il conteggio totale degli agenti fino a 10.
La configurazione manuale dell'agente standby può essere configurata in uno dei tre modi seguenti.
Iniziare da zero - Configurare un set di periodi di provisioning per gli agenti di standby
Ognuna delle guide introduttive di pre-provisioning include le impostazioni comuni seguenti, oltre alle impostazioni specifiche per tale avvio rapido.
Il pre-provisioning timeZone consente di configurare il fuso orario per gli orari nello schema di pre-provisioning. Il valore predefinito per Il fuso orario di pre-provisioning è (UTC) Coordinated Universal Time.
Percentuale agente standby configura la percentuale di agenti di standby desiderati per ogni immagine. È possibile immettere * per assicurarsi che venga eseguito lo stesso provisioning di tutte le immagini oppure è possibile specificare un numero intero compreso tra 0 e 100 per rappresentare una percentuale. Se si specifica una percentuale, il totale per tutte le immagini deve essere uguale a 100. Se si dispone di una singola immagine, specificare * o 100. La percentuale dell'agente di standby viene configurata nella images sezione quando si usano i modelli di Resource Manager. Per altre informazioni, vedere Configurare le immagini.
Il provisioning manuale dell'agente standby viene specificato nella resourcePredictionsProfile sezione di agentProfilee i dettagli sono configurati nella resourcePredictions sezione .
Specificare il fuso orario desiderato per lo schema usando la timeZone proprietà . Il valore predefinito è UTC. Per recuperare un elenco di nomi di fuso orario per questa proprietà, vedere Metodo TimeZoneInfo.GetSystemTimeZones.
La pianificazione per gli agenti di standby è definita dall'elenco daysData . L'elenco daysData può avere un elemento o sette elementi.
Un daysData elenco con sette elementi viene mappato ai giorni della settimana, a partire dalla domenica. Ognuno di questi sette elementi può avere zero o più "time": count voci, specificando un'ora in formato 24 ore e un numero di agenti di standby. Il numero specificato di agenti di standby viene mantenuto fino alla voce successiva "time": count , che può essere nello stesso giorno o in un giorno successivo.
Un daysData elenco con un singolo elemento definisce uno schema All Week, in cui la singola "time": count voce corrisponde al numero di agenti di standby per l'intera settimana.
L'esempio seguente è uno schema dell'agente di standby manuale, usando Eastern Standard Time, con un singolo agente di cui è stato effettuato il provisioning dal lunedì al venerdì, dalle 9:00 (numero 1di agenti di standby ) alle 17:00 (numero 0di agenti di standby).
Un singolo daysData elemento contiene un dizionario di volte e conteggi degli agenti di standby. Ogni "time" : count voce specifica il numero di agenti di standby da pianificare a partire dall'ora specificata, in formato 24 ore. Le voci consecutive "time" : count specificano una sequenza di conteggi degli agenti pianificati per quel giorno.
"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
]
I conteggi degli agenti di standby non vengono reimpostati automaticamente su zero alla fine di un giorno o alla fine della settimana e l'impostazione di un elemento vuoto daysData non disabilita gli agenti di standby per quel giorno. Un elemento vuoto daysData indica che non sono state apportate modifiche alla pianificazione del numero di agenti di standby per quel giorno. Per impostare l'agente di standby su zero a partire da un periodo di tempo specifico, è necessario fornire in modo esplicito una "time" : count voce con un count di 0.
Esempi
Per non apportare modifiche al numero di agenti di standby specificato alla conclusione del giorno precedente (o alla settimana se si configura il primo periodo della settimana), specificare un daysData elemento con zero voci.
{
}
Per pianificare l'avvio 09:00:00 e l'arresto 17:00:00 di un singolo agente di standby (usando il fuso orario specificato dalla resourcePredictions proprietà), specificare la configurazione seguente.
{
"09:00:00": 1,
"17:00:00": 0
}
Per pianificare un singolo agente di standby a partire da mezzanotte a 09:00:00, seguito da 10 agenti di standby fino a 17:00:00, specificare la configurazione seguente.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Per pianificare la disponibilità di un agente di standby a partire dal 09:00:00 giorno specificato e arrestarsi 17:00:00 al giorno successivo, usare due elementi consecutivi daysData .
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
Nell'esempio seguente viene illustrato il contenuto del file agent-profile.json .
Il provisioning manuale dell'agente standby viene specificato nella resourcePredictionsProfile sezione del agent-profile parametro e i dettagli sono configurati nella resourcePredictions sezione .
Specificare il fuso orario desiderato per lo schema usando la timeZone proprietà . Il valore predefinito è UTC. Per recuperare un elenco di nomi di fuso orario per questa proprietà, vedere Metodo TimeZoneInfo.GetSystemTimeZones.
La pianificazione per gli agenti di standby è definita dall'elenco daysData . L'elenco daysData può avere un elemento o sette elementi.
Un daysData elenco con sette elementi viene mappato ai giorni della settimana, a partire dalla domenica. Ognuno di questi sette elementi può avere zero o più "time": count voci, specificando un'ora in formato 24 ore e un numero di agenti di standby. Il numero specificato di agenti di standby viene mantenuto fino alla voce successiva "time": count , che può essere nello stesso giorno o in un giorno successivo.
Un daysData elenco con un singolo elemento definisce uno schema All Week, in cui la singola "time": count voce corrisponde al numero di agenti di standby per l'intera settimana.
L'esempio seguente è uno schema dell'agente di standby manuale, usando Eastern Standard Time, con un singolo agente di cui è stato effettuato il provisioning dal lunedì al venerdì, dalle 9:00 (numero 1di agenti di standby ) alle 17:00 (numero 0di agenti di standby).
Un singolo daysData elemento contiene un dizionario di volte e conteggi degli agenti di standby. Ogni "time" : count voce specifica il numero di agenti di standby da pianificare a partire dall'ora specificata, in formato 24 ore. Le voci consecutive "time" : count specificano una sequenza di conteggi degli agenti pianificati per quel giorno.
"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
]
I conteggi degli agenti di standby non vengono reimpostati automaticamente su zero alla fine di un giorno o alla fine della settimana e l'impostazione di un elemento vuoto daysData non disabilita gli agenti di standby per quel giorno. Un elemento vuoto daysData indica che non sono state apportate modifiche alla pianificazione del numero di agenti di standby per quel giorno. Per impostare l'agente di standby su zero a partire da un periodo di tempo specifico, è necessario fornire in modo esplicito una "time" : count voce con un count di 0.
Esempi
Per non apportare modifiche al numero di agenti di standby specificato alla conclusione del giorno precedente (o alla settimana se si configura il primo periodo della settimana), specificare un daysData elemento con zero voci.
{
}
Per pianificare l'avvio 09:00:00 e l'arresto 17:00:00 di un singolo agente di standby (usando il fuso orario specificato dalla resourcePredictions proprietà), specificare la configurazione seguente.
{
"09:00:00": 1,
"17:00:00": 0
}
Per pianificare un singolo agente di standby a partire da mezzanotte a 09:00:00, seguito da 10 agenti di standby fino a 17:00:00, specificare la configurazione seguente.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Per pianificare la disponibilità di un agente di standby a partire dal 09:00:00 giorno specificato e arrestarsi 17:00:00 al giorno successivo, usare due elementi consecutivi daysData .
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Inizia da zero
Se si sceglie di iniziare da zero, è possibile aggiungere un elenco di periodi di provisioning da usare come schema di provisioning. Ogni periodo di provisioning è costituito da un giorno di inizio, un giorno di fine, un fuso orario, un'ora di inizio, un'ora di fine e un conteggio. I periodi di provisioning non possono sovrapporsi tra loro.
Proprietà
Descrizione
Più giorni
Quando selezionata, è possibile configurare sia un giorno di inizio che un giorno di fine per lo schema di provisioning.
Fino al periodo successivo
Quando selezionato, il periodo di provisioning viene eseguito dall'ora di inizio fino all'inizio del periodo di provisioning successivo.
Giorno di inizio
Giorno in cui inizia il periodo di provisioning.
Fine giorno
Giorno in cui termina il periodo di provisioning. Obbligatorio se è selezionata l'opzione Multi-Day.
Ora di avvio
Ora di inizio del periodo di provisioning.
Ora di fine
Ora di fine del periodo di provisioning. Obbligatorio a meno che non venga controllato fino al periodo successivo.
Count
Numero di agenti di standby di cui effettuare il provisioning. Questo numero deve essere maggiore di zero e non deve essere maggiore del valore Massimo agenti configurato nelle impostazioni pool.
Dopo aver creato un periodo di provisioning, è possibile eliminare o modificare il periodo dall'elenco Schema di pre-provisioning.
L'esempio seguente configura uno schema manuale con 1 agente di cui è stato effettuato il provisioning il lunedì mattina dalle 12:00 alle 5:00 EST.
Se si sceglie lo schema della settimana, è possibile specificare un'ora di inizio e un'ora di fine in cui il numero specificato di agenti di standby sarà in standby ogni giorno feriale.
Proprietà
Descrizione
Ora di avvio
Ora di inizio del periodo di provisioning.
Ora di fine
Ora di fine del periodo di provisioning.
Conteggio provisioning
Numero di agenti di standby di cui effettuare il provisioning. Questo numero deve essere maggiore di zero e non deve essere maggiore del valore Massimo agenti configurato nelle impostazioni pool.
Nell'esempio seguente vengono configurati quattro agenti da utilizzare durante l'orario di lavoro con 0 agenti durante le ore non lavorative e i fine settimana, usando l'ora solare orientale.
Se non si conoscono i modelli di utilizzo e si vuole basarsi sulla previsione automatica basata sui dati passati, scegliere Automatico. È possibile bilanciare i costi e le prestazioni dell'agente usando un dispositivo di scorrimento con le cinque opzioni seguenti. I pool DevOps gestiti eseguono una query nelle ultime tre settimane di dati cronologici (se disponibili), organizzando le sessioni in coda del pool in cinque minuti e assegnando il percentile specificato (per evitare picchi) a ogni ora.
Più conveniente (MostCostEffective) - 10° percentile
Più conveniente (MoreCostEffective) - 25° percentile