Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le istanze del set di scalabilità possono scegliere di ricevere notifiche di terminazione dell'istanza e impostare un ritardo predefinito prima dell'operazione di terminazione. La notifica di terminazione viene inviata tramite il servizio metadati di Azure - Eventi pianificati, che fornisce notifiche per e ritardo di operazioni di impatto, ad esempio riavvii e ridistribuzione. La soluzione aggiunge un altro evento, Terminate, all'elenco degli eventi pianificati e il ritardo associato dell'evento di chiusura dipenderà dal limite di ritardo specificato dagli utenti nelle configurazioni del modello del set di scalabilità.
Dopo aver eseguito la registrazione negli eventi pianificati chiamando l'endpoint del servizio metadati appropriato, le istanze del set di scalabilità non devono attendere la scadenza del timeout specificato prima dell'eliminazione dell'istanza. Dopo aver ricevuto una notifica Terminate, l'istanza può scegliere di essere eliminata in qualsiasi momento prima della scadenza del timeout di terminazione. Non è possibile abilitare le notifiche di terminazioni nelle istanze spot. Per ulteriori informazioni sulle istanze Spot, consulta le Macchine virtuali Spot di Azure per i Set di scalabilità delle macchine virtuali.
Abilitare le notifiche di terminazioni
Esistono diversi modi per abilitare le notifiche di terminazione nelle istanze del set di scalabilità, come descritto negli esempi seguenti.
Portale di Azure
La procedura seguente abilita la notifica di chiusura durante la creazione di un nuovo set di scalabilità.
- Passare a set di scalabilità di macchine virtuali.
- Selezionare + Aggiungi per creare un nuovo set di scalabilità.
- Passare alla scheda Gestione .
- Trova la sezione Terminazione istanza.
- Per Notifica di terminazione dell'istanza selezionare Sì.
- Per Ritardo di terminazione (minuti) impostare il timeout predefinito desiderato.
- Al termine della creazione del nuovo set di scalabilità, selezionare pulsante Rivedi e crea.
È anche possibile abilitare le notifiche di terminazione in un set di scalabilità esistente.
- Passare al set di scalabilità desiderato
- Passare alla scheda Configurazione
- Per Abilita notifica di terminazione dell'istanza selezionare Sì.
- Per Ritardo di terminazione (minuti) impostare il timeout predefinito desiderato.
- Selezionare il pulsante Salva .
REST API (Interfaccia di Programmazione delle Applicazioni REST)
Nell'esempio seguente viene abilitata la notifica di terminazione nel modello del set di scalabilità.
PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2019-03-01`
{
"properties": {
"virtualMachineProfile": {
"scheduledEventsProfile": {
"terminateNotificationProfile": {
"notBeforeTimeout":"PT5M",
"enable":true
}
}
}
}
}
Il blocco precedente specifica un ritardo di timeout di 5 minuti (come indicato da PT5M) per qualsiasi operazione di terminazione in tutte le istanze del set di scalabilità. Il campo notBeforeTimeout può richiedere qualsiasi valore compreso tra 5 e 15 minuti in formato ISO 8601. È possibile modificare il timeout predefinito per l'operazione di terminazione modificando la proprietà notBeforeTimeout in terminateNotificationProfile descritta in precedenza.
Dopo aver abilitato scheduledEventsProfile nel modello del set di scalabilità e aver impostato notBeforeTimeout, aggiornare le singole istanze al modello più recente per riflettere le modifiche.
Annotazioni
Le notifiche di terminazione nelle istanze del set di scalabilità possono essere abilitate solo con la versione API 2019-03-01 e successive.
Azure PowerShell
Quando si crea un nuovo set di scalabilità, è possibile abilitare le notifiche di terminazione nel set di scalabilità usando il cmdlet New-AzVmssConfig .
Questo script di esempio illustra la creazione di un set di scalabilità e le risorse associate usando il file di configurazione: Creare un set di scalabilità di macchine virtuali completo. È possibile fornire notifiche "configure terminate" aggiungendo i parametri TerminateScheduledEvents e TerminateScheduledEventNotBeforeTimeoutInMinutes all'oggetto di configurazione per la creazione del set di scalabilità. L'esempio seguente abilita la funzionalità con un timeout di ritardo di 10 minuti.
Importante
A partire da novembre 2023, i set di scalabilità di macchine virtuali creati con PowerShell e l'interfaccia della riga di comando di Azure avranno per impostazione predefinita la modalità di orchestrazione flessibile se non è specificata alcuna modalità di orchestrazione. Per altre informazioni su questa modifica e sulle azioni da eseguire, vedere Modifica che causa un'interruzione per i clienti di PowerShell/CLI di VMSS - Hub della community Microsoft
New-AzVmssConfig `
-Location "VMSSLocation" `
-SkuCapacity 2 `
-OrchestrationMode "Flexible" `
-SkuName "Standard_DS2" `
-TerminateScheduledEvents $true `
-TerminateScheduledEventNotBeforeTimeoutInMinutes 10
Usare il cmdlet Update-AzVmss per abilitare le notifiche di terminazione in un set di scalabilità esistente.
Update-AzVmss `
-ResourceGroupName "myResourceGroup" `
-VMScaleSetName "myScaleSet" `
-TerminateScheduledEvents $true `
-TerminateScheduledEventNotBeforeTimeoutInMinutes 15
L'esempio precedente abilita le notifiche di terminazione in un set di scalabilità esistente e imposta un timeout di 15 minuti per l'evento di terminazione.
Dopo aver abilitato gli eventi pianificati nel modello di scalabilità e aver impostato il timeout, aggiornare le singole istanze al modello più recente per incorporare le modifiche.
Interfaccia della riga di comando di Azure 2.0
L'esempio seguente consiste nell'abilitare la notifica di terminazione durante la creazione di un nuovo set di scalabilità.
az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
--resource-group <myResourceGroup> \
--name <myVMScaleSet> \
--image Ubuntu2204 \
--admin-username <azureuser> \
--generate-ssh-keys \
--terminate-notification-time 10
L'esempio precedente crea prima un gruppo di risorse, quindi crea un nuovo set di scalabilità con notifiche terminate abilitate per un timeout predefinito di 10 minuti.
L'esempio seguente consiste nell'abilitare la notifica di terminazione in un set di scalabilità esistente.
az vmss update \
--resource-group <myResourceGroup> \
--name <myVMScaleSet> \
--enable-terminate-notification true \
--terminate-notification-time 10
Ricevi notifiche di Terminate
Le notifiche di terminazione vengono recapitate tramite eventi pianificati, ovvero un servizio metadati di Azure. Il servizio metadati di Azure espone informazioni sull'esecuzione di macchine virtuali tramite un endpoint REST accessibile dall'interno della macchina virtuale. Le informazioni sono disponibili tramite un INDIRIZZO IP non instradabile in modo che non vengano esposte all'esterno della macchina virtuale.
Gli eventi pianificati sono abilitati per il set di scalabilità la prima volta che si effettua una richiesta di eventi. È possibile prevedere una risposta ritardata nella prima chiamata di un massimo di due minuti. Eseguire periodicamente una query sull'endpoint per rilevare gli eventi di manutenzione imminenti e lo stato delle attività di manutenzione in corso.
Gli eventi pianificati sono disabilitati per il set di scalabilità se le istanze del set di scalabilità non effettuano una richiesta per 24 ore.
Individuazione degli endpoint
Per le macchine virtuali abilitate per la rete virtuale, il servizio metadati è disponibile da un indirizzo IP statico non instradabile, 169.254.169.254.
L'endpoint completo per la versione più recente degli eventi pianificati è:
http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01
Risposta di query
Una risposta contiene una serie di eventi pianificati. Una matrice vuota indica che attualmente non sono previsti eventi.
Nel caso in cui siano presenti eventi pianificati, la risposta contiene una matrice di eventi. Per un evento "Terminate", la risposta sarà simile alla seguente:
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled",
"NotBefore": {timeInUTC},
}
]
}
DocumentIncarnation è un ETag e offre un modo semplice per controllare se il payload degli eventi è stato modificato dall'ultima query.
Per altre informazioni su ognuno dei campi precedenti, vedere la documentazione relativa agli eventi pianificati per Windows e Linux.
Rispondere agli eventi
Dopo essere venuti a conoscenza di un evento imminente e aver completato la logica per l'arresto graduale, è possibile convalidare l'evento in attesa effettuando una chiamata POST al servizio metadati con EventId. La chiamata POST indica ad Azure che può continuare con l'eliminazione della macchina virtuale.
Di seguito è riportato il codice JSON previsto nel corpo della richiesta POST. La richiesta deve contenere un elenco di StartRequests. Ogni StartRequest contiene l'EventId per l'evento che si vuole accelerare:
{
"StartRequests" : [
{
"EventId": {EventId}
}
]
}
Assicurarsi che ogni macchina virtuale nel set di scalabilità approvi solo l'Id evento pertinente solo per tale macchina virtuale. Una macchina virtuale può ottenere il proprio nome di macchina virtuale tramite i metadati dell'istanza. Questo nome assume il formato "{scale-set-name}_{instance-id}" e verrà visualizzato nella sezione "Risorse" della risposta alla query descritta in precedenza.
È anche possibile fare riferimento agli script di esempio per l'esecuzione di query e la risposta agli eventi Python.
Suggerimenti e procedure consigliate
- Terminare le notifiche solo nelle operazioni di 'eliminazione': tutte le operazioni di eliminazione (eliminazione manuale o riduzione automatica delle istanze avviata con scaling-in) genereranno eventi di terminazione se il set di scalabilità ha scheduledEventsProfile abilitato. Altre operazioni, come il riavvio, la reinstallazione dell’immagine, il ridistribuzione e l’arresto/deallocazione, non generano eventi di terminazione.
- Nessuna attesa obbligatoria per il timeout: è possibile avviare l'operazione di terminazione in qualsiasi momento dopo la ricezione dell'evento e prima della scadenza dell'ora NotBefore dell'evento.
- Eliminazione obbligatoria in fase di timeout: non è possibile estendere il valore di timeout dopo la generazione di un evento. Una volta scaduto il timeout, l'evento di terminazione in sospeso verrà elaborato e la macchina virtuale verrà eliminata.
- Valore di timeout modificabile: è possibile modificare il valore di timeout in qualsiasi momento prima dell'eliminazione di un'istanza modificando la proprietà notBeforeTimeout nel modello del set di scalabilità e aggiornando le istanze della macchina virtuale al modello più recente.
- Approvare tutte le eliminazioni in sospeso: se è presente un'eliminazione in sospeso in VM_1 non approvata e si è approvato un altro evento di terminazione in VM_2, VM_2 non viene eliminato finché non viene approvato l'evento di terminazione per VM_1 o il relativo timeout è scaduto. Dopo aver approvato l'evento terminate per VM_1, vengono eliminati sia VM_1 che VM_2.
- Approvare tutte le eliminazioni simultanee: estendendo l'esempio precedente, se VM_1 e VM_2 hanno lo stesso tempo NotBefore , entrambi gli eventi di terminazione devono essere approvati o nessuna delle macchine virtuali viene eliminata prima della scadenza del timeout.
Risoluzione dei Problemi
Errore durante l'abilitazione di scheduledEventsProfile
Se viene visualizzato un errore "BadRequest" con un messaggio di errore che indica che "Impossibile trovare il membro 'scheduledEventsProfile' nell'oggetto di tipo 'VirtualMachineProfile'", controllare la versione dell'API usata per le operazioni del set di scalabilità. È necessaria l'API di calcolo versione 2019-03-01 o successiva.
Errore durante il recupero degli eventi Terminate
Se non si ricevono eventi Terminate tramite eventi pianificati, controllare la versione dell'API usata per ottenere gli eventi. L'API del servizio metadati versione 2019-01-01 o successiva è necessaria per gli eventi di terminazione.
http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01
Ricezione dell'evento Terminate con un tempo NotBefore non corretto
Dopo aver abilitato scheduledEventsProfile nel modello del set di scalabilità e aver impostato notBeforeTimeout, aggiornare le singole istanze al modello più recente per riflettere le modifiche.
Passaggi successivi
Informazioni su come distribuire l'applicazione nei set di scalabilità di macchine virtuali.