Avsluta avisering för instanser i skalningsuppsättningar med virtuella Azure-datorer
Gäller för: ✔️ Virtuella Linux-datorer:heavy_check_mark: Windows virtuella datorer:heavy_check_mark: Enhetliga skalningsuppsättningar:heavy_check_mark: Flexibla skalningsuppsättningar
Skalningsuppsättningsinstanser kan välja att ta emot meddelanden om instansavslut och ange en fördefinierad tidsgräns för fördröjning till avslutningsåtgärden. Avslutsmeddelandet skickas via Azure Metadata Service – Schemalagda händelser, som tillhandahåller meddelanden om och fördröjer effektfulla åtgärder, till exempel omstarter och omdistribution. Lösningen lägger till ytterligare en händelse – Avsluta – i listan över Schemalagda händelser, och den associerade fördröjningen för uppsägningshändelsen beror på den fördröjningsgräns som anges av användarna i deras konfigurationer av skalningsuppsättningsmodellen.
När skalningsuppsättningsinstanserna har registrerats i funktionen behöver de inte vänta tills den angivna tidsgränsen går ut innan instansen tas bort. När du har fått ett meddelande om att avsluta kan instansen välja att tas bort när som helst innan tidsgränsen för avsluta upphör att gälla.
Aktivera aviseringsaviseringar
Det finns flera sätt att aktivera avslutningsmeddelanden på dina skalningsuppsättningsinstanser, enligt beskrivningen i exemplen nedan.
Azure Portal
Följande steg aktiverar avisering om uppsägning när du skapar en ny skalningsuppsättning.
- Gå till VM-skalningsuppsättningar.
- Välj + Lägg till för att skapa en ny skalningsuppsättning.
- Gå till fliken Hantering.
- Leta upp avsnittet Instansavslutning.
- För Meddelande om instansavslut väljer du På.
- För Avslutningsfördröjning (minuter) anger du önskad standardtids tidsgräns.
- När du är klar med att skapa den nya skalningsuppsättningen väljer du knappen Granska + skapa.
Anteckning
Du kan inte ange avsluta meddelanden på befintliga skalningsuppsättningar i Azure Portal
REST API
I följande exempel aktiveras aviseringsaviseringar för skalningsuppsättningsmodellen.
PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2019-03-01`
{
"properties": {
"virtualMachineProfile": {
"scheduledEventsProfile": {
"terminateNotificationProfile": {
"notBeforeTimeout":"PT5M",
"enable":true
}
}
}
}
}
Ovanstående block anger en timeout-fördröjning på 5 minuter (som anges av PT5M) för alla uppsägningar på alla instanser i din skalningsuppsättning. Fältet notBeforeTimeout kan ta ett värde mellan 5 och 15 minuter i ISO 8601-format. Du kan ändra standardtimeout för åtgärden avsluta genom att ändra egenskapen notBeforeTimeout under terminateNotificationProfile som beskrivs ovan.
När du har aktivera scheduledEventsProfile på skalningsuppsättningsmodellen och angett notBeforeTimeout uppdaterar du de enskilda instanserna till den senaste modellen för att återspegla ändringarna.
Anteckning
Avsluta meddelanden på skalningsuppsättningsinstanser kan bara aktiveras med API-version 2019-03-01 och senare
Azure PowerShell
När du skapar en ny skalningsuppsättning kan du aktivera avslutningsmeddelanden på skalningsuppsättningen med hjälp av cmdleten New-AzVmssConfig.
Det här exempelskriptet går igenom skapandet av en skalningsuppsättning och associerade resurser med hjälp av konfigurationsfilen: Skapa en fullständig VM-skalningsuppsättning. Du kan ange konfigurera avisering om uppsägning genom att lägga till parametrarna TerminateScheduledEvents och TerminateScheduledEventNotBeforeTimeoutInMinutes i konfigurationsobjektet för att skapa skalningsuppsättningen. I följande exempel aktiveras funktionen med en timeout på 10 minuter.
New-AzVmssConfig `
-Location "VMSSLocation" `
-SkuCapacity 2 `
-SkuName "Standard_DS2" `
-UpgradePolicyMode "Automatic" `
-TerminateScheduledEvents $true `
-TerminateScheduledEventNotBeforeTimeoutInMinutes 10
Använd cmdleten Update-AzVmss för att aktivera avslutningsmeddelanden på en befintlig skalningsuppsättning.
Update-AzVmss `
-ResourceGroupName "myResourceGroup" `
-VMScaleSetName "myScaleSet" `
-TerminateScheduledEvents $true `
-TerminateScheduledEventNotBeforeTimeoutInMinutes 15
Exemplet ovan aktiverar avsluta meddelanden på en befintlig skalningsuppsättning och anger en timeout på 15 minuter för uppsägningshändelsen.
När du har aktivera schemalagda händelser på skalningsuppsättningsmodellen och angett tidsgränsen uppdaterar du de enskilda instanserna till den senaste modellen för att återspegla ändringarna.
Azure CLI 2.0
Följande exempel är till för att aktivera avslutningsaviseringar när du skapar en ny skalningsuppsättning.
az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
--resource-group <myResourceGroup> \
--name <myVMScaleSet> \
--image UbuntuLTS \
--admin-username <azureuser> \
--generate-ssh-keys \
--terminate-notification-time 10
Exemplet ovan skapar först en resursgrupp och skapar sedan en ny skalningsuppsättning med aviseringsaviseringar aktiverade för en standardtids tidsgräns på 10 minuter.
Följande exempel är till för att aktivera avslutningsaviseringar i en befintlig skalningsuppsättning.
az vmss update \
--resource-group <myResourceGroup> \
--name <myVMScaleSet> \
--enable-terminate-notification true \
--terminate-notification-time 10
Få meddelanden om att avsluta
Avsluta meddelanden levereras via Schemalagda händelser, som är en Azure-Metadata Service. Azure Metadata-tjänsten visar information om att Virtual Machines med hjälp av en REST-slutpunkt som är tillgänglig från den virtuella datorn. Informationen är tillgänglig via en icke-dirigerbar IP-adress så att den inte exponeras utanför den virtuella datorn.
Schemalagda händelser aktiveras för din skalningsuppsättning första gången du gör en begäran om händelser. Du kan förvänta dig ett fördröjd svar i ditt första anrop på upp till två minuter. Fråga slutpunkten regelbundet för att identifiera kommande underhållshändelser och status för pågående underhållsaktiviteter.
Schemalagda händelser inaktiveras för din skalningsuppsättning om skalningsuppsättningsinstanserna inte gör en begäran på 24 timmar.
Slutpunktsidentifiering
För VNET-aktiverade virtuella datorer är Metadata Service tillgänglig från en statisk icke-dirigerbar IP-adress, 169.254.169.254.
Den fullständiga slutpunkten för den senaste versionen Schemalagda händelser är:
'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'
Frågesvar
Ett svar innehåller en matris med schemalagda händelser. En tom matris innebär att det för närvarande inte finns några schemalagda händelser.
Om det finns schemalagda händelser innehåller svaret en matris med händelser. För en "Avsluta"-händelse ser svaret ut så här:
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled",
"NotBefore": {timeInUTC},
}
]
}
DocumentIncarnation är en ETag och är ett enkelt sätt att kontrollera om nyttolasten Händelser har ändrats sedan den senaste frågan.
Mer information om vart och ett av fälten ovan finns i dokumentationen Schemalagda händelser för Windows och Linux.
Svara på händelser
När du har fått reda på en kommande händelse och slutfört logiken för en bra avstängning kan du godkänna den utestående händelsen genom att göra ett POST-anrop till metadatatjänsten med EventId. POST-anropet anger till Azure att det kan fortsätta med borttagningen av den virtuella datorn.
Nedan visas den json som förväntas i POST-begärandetexten. Begäran ska innehålla en lista över StartRequests. Varje StartRequest innehåller EventId för den händelse som du vill påskynda:
{
"StartRequests" : [
{
"EventId": {EventId}
}
]
}
Se till att varje virtuell dator i skalningsuppsättningen endast godkänner eventID som är relevant för den virtuella datorn. En virtuell dator kan hämta sitt eget VM-namn via instansmetadata. Det här namnet har formen "{scale-set-name}_{instance-id}" och visas i avsnittet Resurser i frågesvaret som beskrivs ovan.
Du kan också referera till exempelskript för att köra frågor mot och svara på händelser med Python.
Tips och regelverk
- Avsluta endast meddelanden vid borttagningsåtgärder – Alla borttagningsåtgärder (manuell borttagning eller autoskalningsinitierad inskalning) genererar Uppsägningshändelser om skalningsuppsättningen har scheduledEventsProfile aktiverat. Andra åtgärder som omstart, avimning, omdistribution och stopp/avlokalisering genererar inte uppsägningshändelser.
- Ingen obligatorisk väntetid för tidsgräns – Du kan starta avsluta-åtgärden när som helst efter att händelsen har tagits emot och innan händelsens NotBefore-tid upphör att gälla.
- Obligatorisk borttagning vid timeout – Det finns ingen funktion för att utöka tidsgränsvärdet när en händelse har genererats. När tidsgränsen går ut bearbetas den väntande uppsägningshändelsen och den virtuella datorn tas bort.
- Ändringsbart tidsgränsvärde – Du kan ändra tidsgränsvärdet när som helst innan en instans tas bort genom att ändra egenskapen notBeforeTimeout i skalningsuppsättningsmodellen och uppdatera VM-instanserna till den senaste modellen.
- Godkänn alla väntande borttagningar – Om det finns en väntande borttagning på VM_1 som inte godkänns och du har godkänt en annan uppsägningshändelse på VM_2 tas inte VM_2 bort förrän uppsägningshändelsen för VM_1 har godkänts eller dess tidsgräns har gått ut. När du har godkänt uppsägningshändelsen för VM_1 tas både VM_1 och VM_2 bort.
- Godkänn alla samtidiga borttagningar – Om ovanstående exempel utökas, om VM_1 och VM_2 har samma NotBefore-tid, måste båda uppsägningshändelserna godkännas eller ingen av de virtuella datorer som tas bort innan tidsgränsen går ut.
Felsöka
Det gick inte att aktivera scheduledEventsProfile
Om du får ett "BadRequest"-fel med felmeddelandet "Det gick inte att hitta medlemmen "scheduledEventsProfile" för objektet av typen "VirtualMachineProfile" kontrollerar du DEN API-version som används för skalningsuppsättningsåtgärder. Compute API version 2019-03-01 eller senare krävs.
Det gick inte att hämta uppsägningshändelser
Om du inte får några uppsägningshändelser via Schemalagda händelser kontrollerar du den API-version som används för att hämta händelserna. Metadata Service API-version 2019-01-01 eller senare krävs för avsluta händelser.
'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'
Hämta en avsluta-händelse med felaktig NotBefore-tid
När du har aktivera scheduledEventsProfile på skalningsuppsättningsmodellen och angett notBeforeTimeout uppdaterar du de enskilda instanserna till den senaste modellen för att återspegla ändringarna.
Nästa steg
Lär dig hur du distribuerar ditt program på VM-skalningsuppsättningar.