Condividi tramite


Errori di pool e nodo Azure Batch

Alcune operazioni di creazione e gestione del pool di Azure Batch vengono eseguite immediatamente. Il rilevamento degli errori per queste operazioni è semplice, perché gli errori in genere restituiscono immediatamente dall'API, dalla riga di comando o dall'interfaccia utente. mentre altre sono asincrone, vengono eseguite in background e richiedendo alcuni minuti per il completamento. Questo articolo descrive i modi per rilevare ed evitare errori che possono verificarsi nelle operazioni in background per pool e nodi.

Assicurarsi di aver configurato le applicazioni in modo da implementare un sistema completo di controllo degli errori, specialmente per le operazioni asincrone. Il controllo completo degli errori consente di identificare e diagnosticare tempestivamente i problemi.

Errori dei pool

Gli errori del pool possono essere correlati al timeout o all'errore di ridimensionamento, all'errore di ridimensionamento automatico o all'eliminazione del pool.

Timeout o fallimento del ridimensionamento

Durante la creazione di un nuovo pool o il ridimensionamento di un pool esistente, si specifica il numero di nodi di destinazione. L'operazione di creazione o ridimensionamento viene completata immediatamente, ma l'effettiva allocazione dei nuovi nodi o la rimozione dei nodi esistenti potrebbe richiedere diversi minuti. È possibile specificare il timeout di ridimensionamento nelle API Pool - Aggiungi o Pool - Ridimensiona. Se Azure Batch non è in grado di assegnare il numero di nodi di destinazione durante il periodo di timeout del ridimensionamento, il pool entra in uno stato stabile e segnala errori di ridimensionamento.

La proprietà resizeError elenca gli errori che si sono verificati per la valutazione più recente.

Ecco alcune cause comuni degli errori di ridimensionamento:

  • Ridimensionare il timeout troppo breve. In genere, il timeout predefinito di 15 minuti è sufficiente per allocare o rimuovere i nodi del pool. Se si alloca un numero elevato di nodi, ad esempio più di 1.000 nodi da un'immagine di Azure Marketplace o più di 300 nodi da un'immagine di macchina virtuale personalizzata, è possibile impostare il timeout di ridimensionamento su 30 minuti.

  • Quota di core insufficiente Un account Azure Batch è limitato nel numero di core che può allocare in tutti i pool e interrompe l'allocazione dei nodi una volta raggiunta tale quota. È possibile aumentare la quota di core per consentire a Azure Batch di allocare più nodi. Per altre informazioni, vedere Quote e limiti del servizio Batch.

  • Indirizzi IP di subnet insufficienti quando un pool è in una rete virtuale Una subnet di rete virtuale deve disporre di un numero sufficiente di indirizzi IP da allocare a ogni nodo di pool richiesto. In caso contrario non è possibile creare i nodi. Per altre informazioni, vedere Creare un pool di Azure Batch in una rete virtuale.

  • Risorse insufficienti quando un pool è in una rete virtuale Quando si crea un pool in una rete virtuale, è possibile creare risorse come servizi di bilanciamento del carico, indirizzi IP pubblici e gruppi di sicurezza di rete nella stessa sottoscrizione dell'account Azure Batch. Verificare che le quote della sottoscrizione siano sufficienti per queste risorse.

  • Pool di grandi dimensioni con immagini di macchina virtuale personalizzate. L'allocazione di pool di grandi dimensioni che usano immagini di macchina virtuale personalizzate può richiedere più tempo, pertanto possono verificarsi timeout di ridimensionamento. Vedere Creare un pool con Raccolta di calcolo di Azure per consigli su limiti e configurazione.

Errori di ridimensionamento automatico

È possibile impostare Azure Batch per ridimensionare automaticamente il numero di nodi in un pool e definire i parametri per la formula di ridimensionamento automatico per il pool. Il servizio Azure Batch usa quindi la formula per valutare periodicamente il numero di nodi nel pool e impostare nuovi numeri di destinazione. Per altre informazioni, vedere Creare una formula automatica per ridimensionare i nodi di calcolo in un pool di batch.

Quando si usa il ridimensionamento automatico, possono verificarsi i problemi seguenti:

  • La valutazione del ridimensionamento automatico non riesce.
  • L'operazione di ridimensionamento risultante non riesce con conseguente timeout.
  • Un problema nella formula di ridimensionamento automatico genera valori di destinazione dei nodi non corretti. Il ridimensionamento potrebbe funzionare o scadere.

Per ottenere informazioni sull'ultima valutazione del ridimensionamento automatico usare la proprietà autoScaleRun. Questa proprietà indica il periodo della valutazione, i valori e il risultato, oltre agli eventuali errori di prestazioni.

L'evento di completamento del ridimensionamento del pool acquisisce le informazioni su tutte le valutazioni.

Errori di eliminazione del pool

Per eliminare un pool contenente nodi, Azure Batch elimina prima di tutto i nodi, che possono richiedere alcuni minuti. Successivamente Azure Batch elimina l'oggetto pool stesso.

Azure Batch imposta poolState su deleting durante il processo di eliminazione. L'applicazione chiamante può rilevare se l'eliminazione del pool richiede troppo tempo usando le proprietà state e stateTransitionTime.

Se l'eliminazione del pool richiede più tempo del previsto, Azure Batch ritenta periodicamente fino a quando il pool non viene eliminato correttamente. In alcuni casi, il ritardo è dovuto a un'interruzione del servizio di Azure o ad altri problemi temporanei. Altri fattori che impediscono l'eliminazione corretta del pool potrebbero richiedere l'azione necessaria per risolvere il problema. Questi fattori possono includere i problemi seguenti:

  • È possibile che i blocchi delle risorse vengano inseriti nelle risorse create da Azure Batch o nelle risorse di rete usate da Azure Batch.

  • Le risorse create potrebbero dipendere da una risorsa creata da Azure Batch. Ad esempio, se si crea un pool in una rete virtuale, Azure Batch crea un NSG, un indirizzo IP pubblico e un servizio di bilanciamento del carico. Se si usano queste risorse all'esterno del pool, non è possibile eliminare il pool.

  • Il provider di risorse Microsoft.Batch potrebbe essere stato eliminato dalla sottoscrizione che contiene il pool.

  • Per gli account Azure Batch in modalità di sottoscrizione utente, Microsoft Azure Batch potrebbe non avere più il ruolo Collaboratore o Proprietario per la sottoscrizione che contiene il pool. Per altre informazioni, vedere Consentire a Azure Batch di accedere alla sottoscrizione.

Errori del nodo

Anche se Azure Batch alloca correttamente i nodi in un pool, vari problemi possono compromettere l'integrità di alcuni nodi e impedire l'esecuzione di attività. Questi nodi continuano a prevedere un addebito, per cui è importante rilevare i problemi per evitare di pagare per i nodi che non è possibile usare. Conoscere gli errori comuni dei nodi e conoscere lo jobStatecorrente è utile per la risoluzione dei problemi.

Errori dell'attività di avvio

È possibile specificare un startTask facoltativo per un pool. Come per qualsiasi attività, l'attività di avvio usa una riga di comando e può scaricare i file di risorse dall'archiviazione. L'attività di avvio viene eseguita per ogni nodo all'avvio del nodo. La proprietà waitForSuccess specifica se Azure Batch deve attendere il corretto completamento dell'attività di avvio prima di pianificare qualsiasi attività su un nodo. Se si configura il nodo in modo che attenda il completamento dell'attività di avvio, ma l'attività di avvio ha esito negativo, il nodo non è utilizzabile ma comporta comunque addebiti.

È possibile rilevare gli errori delle attività di avvio usando le proprietà taskExecutionResult e taskFailureInformation della proprietà del nodo startTaskInformation di livello più alto.

Un'attività di avvio non riuscita fa sì che Azure Batch imposti computeNodeState su starttaskfailed, se waitForSuccess era impostato su true.

Come per qualsiasi attività, l'esito negativo di un'attività di avvio può essere riconducibile a vari fattori. Per risolvere il problema, controllare i file stdout, stderr e qualsiasi altro file di log specifico dell'attività.

Le attività di avvio devono essere nuovamente partecipanti, perché l'attività di avvio può essere eseguita più volte nello stesso nodo, ad esempio quando il nodo viene ricreato o riavviato. In rari casi, quando un'attività di avvio viene eseguita dopo un evento causa un riavvio del nodo, un sistema operativo o un disco temporaneo ricrea l'immagine mentre l'altra non lo fa. Poiché Azure Batch avvia attività e tutte le attività batch vengono eseguite dal disco temporaneo, questa situazione non è in genere un problema. Tuttavia, nei casi in cui l'attività di avvio installa un'applicazione nel disco del sistema operativo e mantiene altri dati sul disco temporaneo, possono verificarsi problemi di sincronizzazione. Proteggere l'applicazione di conseguenza se si usano entrambi i dischi.

Errore di download del pacchetto dell'applicazione

È possibile specificare uno o più pacchetti dell'applicazione per un pool. Azure Batch scarica i file di pacchetto specificati in ogni nodo e li decomprime dopo l'avvio del nodo ma prima della pianificazione delle attività. È comune usare un comando dell'attività di avvio con i pacchetti dell'applicazione, ad esempio per copiare i file in un percorso diverso o per eseguire l'installazione.

Se un pacchetto dell'applicazione non riesce a scaricare e decomprimere, la proprietà computeNodeError segnala l'errore e imposta lo stato del nodo su unusable.

Errore di download del contenitore

È possibile specificare uno o più riferimenti a contenitori in un pool. Batch scarica i contenitori specificati in ogni nodo. Se il contenitore non viene scaricato, la proprietà computeNodeError segnala l'errore e imposta lo stato del nodo su unusable.

Aggiornamenti del sistema operativo del nodo

Per i pool di Windows, enableAutomaticUpdates è impostato su per true impostazione predefinita. Sebbene sia consigliabile consentire gli aggiornamenti automatici, gli aggiornamenti possono interrompere lo stato dell'attività, soprattutto se le attività sono a esecuzione prolungata. È possibile impostare questo valore su false se è necessario assicurarsi che un aggiornamento del sistema operativo non si verifichi in modo imprevisto.

Nodo in stato inutilizzabile

Azure Batch potrebbe impostare computeNodeState su unusable per molti motivi. Non è possibile pianificare le attività in un nodo unusable, ma il nodo comporta comunque addebiti.

Se Azure Batch è in grado di determinare la causa, questa viene indicata nella proprietà computeNodeError. Se un nodo è in uno stato unusable, ma non ha computeNodeError, significa che Azure Batch non è in grado di comunicare con la macchina virtuale. In questo caso, Batch tenta sempre di recuperare la macchina virtuale. Tuttavia, Azure Batch non tenta automaticamente di recuperare le macchine virtuali in cui non è stato possibile installare pacchetti dell'applicazione o contenitori, anche se lo stato è unusable.

Altri motivi per cui i nodi unusable potrebbero includere le cause seguenti:

  • Un'immagine di macchina virtuale personalizzata non è valida. Ad esempio, l'immagine non è preparata correttamente.
  • Una macchina virtuale viene spostata a causa di un errore di infrastruttura o un aggiornamento di basso livello. Batch recupera il nodo.
  • Un'immagine della macchina virtuale è stata distribuita nell'hardware, che non la supporta.
  • Le macchine virtuali si trovano in una rete virtuale di Azure e il traffico è stato bloccato sulle porte chiave.
  • Le macchine virtuali si trovano in una rete virtuale, ma il traffico in uscita verso l'archiviazione di Azure è bloccato.
  • Le macchine virtuali si trovano in una rete virtuale con una configurazione DNS del cliente e il server DNS non riesce a risolvere l'archiviazione di Azure.

File di log dell'agente del nodo

Il processo dell'agente Azure Batch in esecuzione in ogni nodo del pool fornisce file di log che potrebbero risultare utili se occorre contattare il supporto in relazione a un problema in un nodo del pool. È possibile caricare i file di log per un nodo tramite il portale di Azure, Azure Batch Explorer o l'API Nodo di calcolo - Caricare i log del servizio Azure Batch. Dopo aver caricato e salvato i file di log, è possibile eliminare il nodo o il pool per risparmiare il costo dell'esecuzione dei nodi.

Disco del nodo pieno

Azure Batch usa l'unità temporanea in una macchina virtuale del pool di nodi per archiviare file come i file di processo, i file di attività e i file condivisi seguenti:

  • File del pacchetto dell'applicazione
  • File di risorse dell'attività
  • File specifici dell'applicazione scaricati in una delle cartelle di Batch
  • File stdout e stderr per ogni esecuzione dell'applicazione attività
  • File di output specifici dell'applicazione

I file come i pacchetti dell'applicazione o i file di risorse dell'attività di avvio scrivono una sola volta quando Azure Batch crea il nodo del pool. Anche se scrivono una sola volta, se questi file sono troppo grandi potrebbero riempire l'unità temporanea.

Altri file, ad esempio stdout e stderr, vengono scritti per ogni attività eseguita da un nodo. Se un numero elevato di attività viene eseguito sullo stesso nodo o se i file delle attività sono troppo grandi, è possibile che riempiano l'unità temporanea.

Il nodo richiede anche una piccola quantità di spazio sul disco del sistema operativo per creare utenti dopo l'avvio.

Le dimensioni dell'unità temporanea dipendono dalle dimensioni della macchina virtuale. Una considerazione quando si selezionano le dimensioni di una macchina virtuale è assicurarsi che l'unità temporanea disponga di spazio sufficiente per il carico di lavoro pianificato.

Quando si aggiunge un pool nel portale di Azure, è possibile visualizzare l'elenco completo delle dimensioni delle macchine virtuali, inclusa una colonna Dimensioni disco risorsa. Gli articoli che descrivono le dimensioni delle macchine virtuali hanno tabelle con una colonna Archiviazione temporanea. Per altre informazioni, vedere Dimensioni delle macchine virtuali ottimizzate per il calcolo. Per una tabella di dimensioni di esempio, vedere Serie Fsv2.

È possibile specificare un tempo di conservazione per i file scritti da ogni attività. Il tempo di conservazione determina per quanto tempo conservare i file di attività prima di pulirli automaticamente. È possibile ridurre il tempo di conservazione per ridurre i requisiti di archiviazione.

Se il disco temporaneo o del sistema operativo esaurisce lo spazio o è quasi esaurito, il nodo passa a unusablecomputeNoteStatee l'errore del nodo indica che il disco è pieno.

Se non si è certi di ciò che occupa spazio nel nodo, provare a connettersi in remoto al nodo ed esaminare manualmente. È anche possibile usare l'API File - Elenco da nodo di calcolo per esaminare i file, ad esempio gli output delle attività, nelle cartelle gestite di Azure Batch. Questa API elenca solo i file nelle directory gestite di Azure Batch. Se le attività hanno creato file altrove, questa API non le mostra.

Dopo aver verificato di recuperare i dati necessari dal nodo o caricarli in un archivio durevole, è possibile eliminare i dati in base alle esigenze per liberare spazio.

È possibile eliminare i processi o le attività completati in precedenza i cui dati delle attività sono ancora presenti nei nodi. Cercare nella raccolta recentTasks nell'attività taskInformation sul nodo, oppure usare l'API File - Elenco da nodo di calcolo. L'eliminazione di un processo elimina tutte le attività nel processo. L'eliminazione delle attività nel processo attiva l'eliminazione dei dati nelle directory delle attività nei nodi e libera spazio. Dopo aver liberato spazio sufficiente, riavviare il nodo. Il nodo deve uscire dallo stato unusable e accedere nuovamente a idle.

Per ripristinare un nodo inutilizzabile nei pool VirtualMachineConfiguration, è possibile rimuovere il nodo dal pool usando l'API Pool - Rimuovi nodi. Sarà quindi possibile aumentare di nuovo il pool per sostituire il nodo errato con uno aggiornato.

Importante

La nuova creazione dell'immagine non è attualmente supportata per i pool VirtualMachineConfiguration.

Passaggi successivi