Condividi tramite


Configurare il ridimensionamento

È possibile gestire le prestazioni e i costi dell'istanza di Pool DevOps gestiti configurando le impostazioni di ridimensionamento. Per informazioni sui prezzi e sulle prestazioni, vedere Gestire i costi e le prestazioni.

Stato dell'agente

È possibile configurare i pool come:

  • Senza stato: Offrire un Nuovo Agente per ogni incarico.
  • Stateful: consente la condivisione di agenti tra più incarichi.

L'impostazione predefinita per un pool è stateless, che è possibile ottenere usando il settaggio Fresh agent every time. 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. Un agente può essere riutilizzato per un massimo di sette giorni per impostazione predefinita, ma è possibile configurarlo per essere riciclato prima.

Nota

Gli agenti di sicurezza consigliano agli utenti di usare pool stateless come difesa dagli attacchi alla catena di approvvigionamento. Usare l'impostazione dello stato dell'agente Fresh agent ogni volta.

Pool senza stato

Quando si configura un agente senza stato, viene fornito un nuovo agente per ogni lavoro. L'agente viene rimosso al termine dell'operazione.

Per altre informazioni sul ciclo di vita degli agenti senza stato e sul modo in cui vengono usati in Azure Pipelines, vedere la sezione Ciclo di vita degli agenti e potenziali ritardi nell'allocazione .

Screenshot che mostra un agente senza stato.

Quando si imposta Stato dell'agente su Nuovo agente ogni volta, viene procurato un nuovo agente per ogni processo. L'agente viene eliminato al termine dell'attività.

Pool con stato

Screenshot che mostra un agente con stato.

Quando si abilita Lo stesso agente può essere utilizzato da più compilazioni (l'impostazione nei modelli di risorse o l'impostazione "kind": "stateful" nell'interfaccia della riga di comando { "stateful": {...} } di Azure), gli agenti nel pool sono a stato persistente. È possibile configurare pool con stato usando le impostazioni seguenti:

  • Durata massima di vita per gli agenti di standby (maxAgentLifetime) configura la durata massima per cui un agente in un pool con stato mantenuto può funzionare prima che venga terminato 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 grazia (gracePeriodTimeSpan) configura il tempo che un agente in un pool stateful attende nuovi lavori prima dell'arresto, dopo che tutti i lavori correnti e in coda sono stati completati. Il formato del periodo di tolleranza è dd.hh:mm:ss e il valore predefinito non è un periodo di tolleranza.

    Importante

    Se un’attività è in esecuzione quando scade l'intervallo massimo di tempo per gli agenti di standby, l'agente non si arresterà fino al termine dell'attività, a meno che l'attività richieda più di due giorni per essere completata. I processi individuali nei pool gestiti di DevOps possono essere eseguiti per un massimo di due giorni, anche se sono in esecuzione su un agente di standby con più di due giorni configurati come tempo massimo di vita per gli agenti di standby. Contattare il supporto tecnico se il flusso di lavoro richiede il completamento di un singolo processo che richiede più di due giorni.

Gli agenti nei pool senza stato vengono terminati e eliminati dopo ogni attività. Gli agenti nei pool con stato continuano a essere in esecuzione se vengono soddisfatte una delle condizioni seguenti:

  • Se un altro processo viene accodato al termine del primo processo, i pool di DevOps gestiti inviano il processo in coda all'agente che ha eseguito il primo processo anziché arrestarlo.
  • Se è stato configurato un periodo di tolleranza per il pool, gli agenti attendono le nuove attività per la durata specificata dal periodo di tolleranza prima di spegnersi.
  • 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 ed eliminati se vengono eseguiti continuamente per la durata specificata da Tempo massimo di vita per gli agenti standby, anche se le condizioni precedenti sono vere. Ad esempio, se il tempo massimo di vita per gli agenti di standby è configurato per tre giorni e la modalità agente standby è impostata su Manuale, Schema settimanale (computer disponibili 24/7), gli agenti vengono riavviati dopo tre giorni consecutivi di attività.

Importante

Gli agenti nei pool con stato possono comunque essere arrestati e rimossi al termine di un processo se non è previsto alcun periodo di tolleranza, nessun periodo di provisioning attivo per gli agenti di standby e nessun processo in coda corrispondente all'agente. Quando un agente viene rimosso, qualsiasi stato viene perso.

I periodi di tolleranza consentono il modo più economico per eseguire pool stateful per le pipeline con carico coerente. I periodi di tolleranza non richiedono l'uso della modalità agente di standby per mantenere gli agenti online e pronti ad accettare compiti.

Modalità agente standby

Quando si crea un pool, la modalità agente standby è disattivata per impostazione predefinita. Quando la modalità agente standby è disattivata, non sono presenti agenti standby da assegnare immediatamente alle pipeline. Le pipeline potrebbero dover attendere da qualche istante a 15 minuti per l'assegnazione su richiesta di un agente. Per prestazioni migliori, abilitare la modalità agente standby e configurare una pianificazione dell'agente di standby che fornisce capacità per il carico di lavoro.

Quando si configura una pianificazione dell'agente di standby, i pool di DevOps gestiti confrontano periodicamente il numero di agenti di cui è stato effettuato il provisioning con il numero di agenti di standby specificato nello schema di provisioning corrente. Avvia nuovi agenti in base alle esigenze per mantenere il numero di agenti di standby. È possibile visualizzare lo stato corrente e il numero degli agenti nel pool usando il riquadro Agenti .

Importante

Il numero di provisioning in uno schema non può essere maggiore del valore Massimo agenti configurato nelle impostazioni pool.

È possibile configurare la modalità agente di standby usando le impostazioni seguenti:

  • Disattivata: la modalità agente standby è disattivata e gli agenti vengono forniti su richiesta quando i processi sono in coda.
  • Manuale: configurare una pianificazione di standby manuale.
  • Automatico: usare una pianificazione di standby automatica in base alla cronologia di utilizzo dell'agente. È possibile configurarlo per i costi e le prestazioni.

Screenshot che mostra le selezioni per la modalità agente standby.

Manuale

La modalità manuale è ideale per i team che conoscono i modelli di utilizzo di pipeline di integrazione continua e recapito continuo (CI/CD). Quando si usa l'opzione manuale, è necessario definire lo schema di pre-provisioning. È possibile definire il tuo schema in base alla tua comprensione di quali agenti nel pool sono più probabilmente utilizzati e quanti è probabile saranno utilizzati. Specificare un numero di agenti di provisioning che soddisfano la richiesta prevista.

È possibile creare una pianificazione di provisioning personalizzata o scegliere tra una delle pianificazioni predefinite. È 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.

È possibile configurare agenti di standby manuali in uno dei tre modi seguenti:

Ciascun avvio rapido per il pre-provisioning include le seguenti impostazioni comuni, oltre alle impostazioni specifiche di ciascun avvio rapido:

  • Pre-configurazione del fuso orario: consente di configurare il fuso orario per i periodi di tempo nel tuo 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. Quando si usano i modelli di Azure Resource Manager è possibile configurare l'impostazione Percentuale Agente Standby nella sezione images. Per altre informazioni, vedere Configurare le immagini.

Screenshot che mostra la modalità standby manuale.

Iniziare da zero

Se si sceglie di iniziare da zero, è possibile aggiungere un elenco di periodi di approvvigionamento come schema di approvvigionamento. Ogni periodo di provisioning è costituito da un giorno di inizio, un giorno di fine, una zona oraria, un'ora di inizio, un'ora di fine e un conteggio. I periodi di provisioning non possono sovrapporsi tra loro.

Proprietà Descrizione
Multi-Day Quando si seleziona questa opzione, è possibile configurare sia Il giorno di inizio che il giorno di fine per lo schema di provisioning.
Fino al periodo successivo Quando si seleziona questa opzione, il periodo di provisioning va dall'Ora di Inizio fino all'inizio del periodo di provisioning successivo.
Giorno di inizio Giorno in cui inizia il periodo di provisioning.
Fine della giornata Giorno in cui termina il periodo di approvvigionamento. Obbligatorio se è selezionata l'opzione Multi-Day .
Ora di inizio L'ora in cui inizia il periodo di provisioning.
Ora di fine Momento di fine del periodo di provisioning. Obbligatorio a meno che non venga selezionato Fino al periodo successivo .
Conto 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 nelle impostazioni pool.

Dopo aver creato un periodo di provisioning, è possibile eliminare o modificare il periodo dall'elenco Schema di preprovvista.

L'esempio seguente illustra come configurare uno schema manuale con un agente di cui è stato effettuato il provisioning il lunedì mattina dalle 12:00 alle 5:00 EST.

Screenshot che mostra uno schema di ridimensionamento manuale.

Schema giorno feriale

Se si seleziona il piano feriale, è possibile specificare un'ora di inizio e un'ora di fine, tra i quali il numero specificato di agenti di emergenza è in servizio per ciascun giorno feriale.

Proprietà Descrizione
Ora di inizio L'ora in cui inizia il periodo di provisioning.
Ora di fine Momento di fine del periodo di provisioning.
Numero di 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 usare durante l'orario di lavoro e nessun agente durante le ore lavorative e i fine settimana, usando l'ora orientale (UTC-5).

Screenshot che mostra uno schema dei giorni feriali.

Schema settimanale

Se si sceglie il piano settimanale completo, è possibile specificare il numero di agenti che si desidera avere sempre disponibili.

Screenshot che mostra uno schema settimanale completo.

Automatico

Se non si conoscono i modelli di utilizzo e si vuole basarsi sulla previsione automatica basata sui dati precedenti, selezionare Automatico. È possibile bilanciare le prestazioni dei costi e degli agenti usando un dispositivo di scorrimento con le cinque opzioni seguenti. I Pool DevOps Gestiti eseguono una query sui dati storici delle ultime tre settimane (se disponibili). Organizza le sessioni in attesa del pool in intervalli di cinque minuti e assegna il percentile specificato (per evitare picchi) ad ogni ora.

  • Più conveniente dal punto di vista del costo (MostCostEffective): 10° percentile.
  • Più conveniente (MoreCostEffective): 25° percentile.
  • Bilanciato (impostazione predefinita):Balanced 50° percentile.
  • Maggiore prestazioni (MorePerformance): 75° percentile.
  • Prestazioni migliori (BestPerformance): 90° percentile.

Screenshot che mostra l'impostazione di ridimensionamento automatico.

Ciclo di vita degli agenti e potenziali ritardi nell'allocazione

Quando si abilitano gli agenti di standby usando uno schema senza stato , è necessario installare e configurare l'agente di Azure Pipelines prima di passare dallo stato pronto allo stato allocato ed eseguire una pipeline.

Quando i pool di DevOps gestiti effettuano il provisioning di nuovi agenti, tenta di scaricare l'agente Azure Pipelines più recente in modo che sia già scaricato negli agenti di standby prima che passino allo stato pronto. L'avvio, la connessione e l'inizio del processo possono richiedere da 10 secondi a un minuto a seconda della velocità dello SKU del pool, dell'immagine usata e del carico di rete. Inoltre, quando si specificano determinate impostazioni in un processo della pipeline, può causare un nuovo download e l'esecuzione di un agente diverso. Le regressioni e i rollback dell'agente possono anche causare un nuovo scaricamento dell'agente.

Agenti disponibili hanno sempre un potenziale ritardo perché i Managed DevOps Pools usano questo agente in modo "effimero", il che significa che l'agente di attività viene avviato ed eseguito una volta per ogni lavoro. Se si riscontrano ritardi nel momento in cui gli agenti pronti acquisiscono lavori da Azure DevOps, considerare le seguenti domande:

  • Hai degli agenti pronti? Il problema più comune è un malinteso quando è necessario effettuare il pre-provisioning degli agenti. I computer devono essere attivati da zero quando vengono soddisfatte le condizioni seguenti:
    • Il numero di processi in coda è maggiore del numero di agenti in standby all'interno di un pool.
    • I processi vengono accodati fuori dalla pianificazione del pre-provisioning.
    • Il numero di agenti di standby è impostato a zero.
  • Stai configurando correttamente gli agenti standby che hanno più immagini? Se non si specifica quale immagine usare nella pipeline usando la richiesta ImageOverride , i processi hanno come destinazione la prima immagine. A seconda delle impostazioni di ridimensionamento, è possibile che non siano disponibili tutti gli agenti previsti, perché alcuni vengono allocati ad altre immagini.
  • Stai usando la ImageVersionOverride richiesta nelle pipeline? Quando si usa la ImageVersionOverride richiesta per specificare una versione dell'immagine diversa da quella configurata nelle impostazioni del pool, ogni agente viene avviato su richiesta usando la versione dell'immagine specificata. Il provisioning degli agenti di riserva viene eseguito usando le versioni dell'immagine specificate nella configurazione del pool. Se usi ImageVersionOverride, gli agenti standby non saranno compatibili con quella versione e verrà avviato un nuovo agente.
  • Le impostazioni del proxy, della rete virtuale o del firewall rallentano il pool? Il potenziale rallentamento derivante dalle impostazioni di rete può comportare un tempo maggiore per l'avvio dell'agente e la sua connessione ad Azure DevOps.
  • Si esegue l'override della versione dell'agente? Per impostazione predefinita, i pool di DevOps gestiti vengono eseguiti nella versione più recente dell'agente attività di Azure DevOps. Le impostazioni nella pipeline YAML (ad esempio la Agent.Version domanda) e le impostazioni dell'organizzazione di Azure DevOps possono forzare le pipeline a usare le versioni precedenti dell'agente di processo, che richiede il riscaricamento una volta allocato il computer.