Melding beëindigen voor exemplaren van virtuele-machineschaalsets van Azure
Van toepassing op: ✔️ Linux-VM's ✔️ Windows-VM's ✔️ Uniforme schaalsets ✔️ Flexibele schaalsets
Instanties van schaalsets kunnen ervoor kiezen om meldingen over exemplaarbeëindiging te ontvangen en een vooraf gedefinieerde time-out voor vertraging in te stellen op de beëindigingsbewerking. De beëindigingsmelding wordt verzonden via Azure Metadata Service - Scheduled Events, dat meldingen biedt voor en vertraging van impactvolle bewerkingen, zoals opnieuw opstarten en opnieuw implementeren. De oplossing voegt een andere gebeurtenis , Terminate , toe aan de lijst met Scheduled Events. De bijbehorende vertraging van de beëindigingsgebeurtenis is afhankelijk van de vertragingslimiet die is opgegeven door gebruikers in hun configuraties voor het schaalsetmodel.
Nadat de exemplaren van de schaalset zijn ingeschreven bij de functie, hoeven ze niet te wachten tot de opgegeven time-out verloopt voordat het exemplaar wordt verwijderd. Nadat de melding Beëindigen is ontvangen, kan het exemplaar op elk moment worden verwijderd voordat de time-out voor beëindigen verloopt.
Meldingen beëindigen inschakelen
Er zijn meerdere manieren om beëindigingsmeldingen in te stellen voor uw schaalset-exemplaren, zoals beschreven in de onderstaande voorbeelden.
Azure Portal
Met de volgende stappen wordt melding over beëindigen ingeschakeld bij het maken van een nieuwe schaalset.
- Ga naar Virtuele-machineschaalsets.
- Selecteer + Toevoegen om een nieuwe schaalset te maken.
- Ga naar het tabblad Beheer.
- Zoek de sectie Instantiebeëindiging.
- Selecteer voor Melding van exemplaarbeëindiging de optie Aan.
- Stel voor Beëindigingsvertraging (minuten) de gewenste standaard time-out in.
- Wanneer u klaar bent met het maken van de nieuwe schaalset, selecteert u de knop Beoordelen en maken.
Notitie
U kunt geen beëindigingsmeldingen instellen voor bestaande schaalsets in Azure Portal
REST-API
In het volgende voorbeeld wordt melding over beëindigen van het schaalsetmodel mogelijk gemaakt.
PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2019-03-01`
{
"properties": {
"virtualMachineProfile": {
"scheduledEventsProfile": {
"terminateNotificationProfile": {
"notBeforeTimeout":"PT5M",
"enable":true
}
}
}
}
}
Het bovenstaande blok geeft een time-outvertraging van 5 minuten op (zoals aangegeven door PT5M) voor elke beëindigingsbewerking op alle exemplaren in uw schaalset. Het veld notBeforeTimeout kan een waarde tussen 5 en 15 minuten in ISO 8601-indeling hebben. U kunt de standaardtime-out voor de beëindigingsbewerking wijzigen door de eigenschap notBeforeTimeout te wijzigen onder terminateNotificationProfile die hierboven wordt beschreven.
Nadat scheduledEventsProfile is inschakelen voor het schaalsetmodel en notBeforeTimeout is ingesteld, worden de afzonderlijke exemplaren bijgewerkt naar het meest recente model om de wijzigingen weer te geven.
Notitie
Meldingen over het beëindigen van exemplaren van schaalsets kunnen alleen worden ingeschakeld met API-versie 2019-03-01 en hoger
Azure PowerShell
Wanneer u een nieuwe schaalset maakt, kunt u beëindigingsmeldingen inschakelen voor de schaalset met behulp van de cmdlet New-AzVmssConfig.
Dit voorbeeldscript beloopt het maken van een schaalset en de bijbehorende resources met behulp van het configuratiebestand: Een volledige virtuele-machineschaalset maken. U kunt melding over beëindigen configureren opgeven door de parameters TerminateScheduledEvents en TerminateScheduledEventNotBeforeTimeoutInMinutes toe te voegen aan het configuratieobject voor het maken van een schaalset. In het volgende voorbeeld wordt de functie met een vertragings-time-out van 10 minuten mogelijk.
New-AzVmssConfig `
-Location "VMSSLocation" `
-SkuCapacity 2 `
-SkuName "Standard_DS2" `
-UpgradePolicyMode "Automatic" `
-TerminateScheduledEvents $true `
-TerminateScheduledEventNotBeforeTimeoutInMinutes 10
Gebruik de cmdlet Update-AzVmss om beëindigingsmeldingen in te stellen voor een bestaande schaalset.
Update-AzVmss `
-ResourceGroupName "myResourceGroup" `
-VMScaleSetName "myScaleSet" `
-TerminateScheduledEvents $true `
-TerminateScheduledEventNotBeforeTimeoutInMinutes 15
In het bovenstaande voorbeeld worden meldingen over het beëindigen van een bestaande schaalset mogelijk en wordt een time-out van 15 minuten ingesteld voor de beëindigingsgebeurtenis.
Nadat geplande gebeurtenissen voor het schaalsetmodel zijn inschakelen en de time-out is ingesteld, moet u de afzonderlijke exemplaren bijwerken naar het meest recente model om de wijzigingen weer te geven.
Azure CLI 2.0
Het volgende voorbeeld is voor het inschakelen van beëindigingsmeldingen tijdens het maken van een nieuwe schaalset.
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
In het bovenstaande voorbeeld wordt eerst een resourcegroep gemaakt en vervolgens een nieuwe schaalset gemaakt met meldingen over beëindigen ingeschakeld voor een standaard time-out van 10 minuten.
Het volgende voorbeeld is voor het inschakelen van beëindigingsmeldingen in een bestaande schaalset.
az vmss update \
--resource-group <myResourceGroup> \
--name <myVMScaleSet> \
--enable-terminate-notification true \
--terminate-notification-time 10
Meldingen over beëindigen ontvangen
Meldingen over beëindigen worden bezorgd via Scheduled Events, een Azure-Metadata Service. Azure Metadata Service geeft informatie weer over het uitvoeren van Virtual Machines met behulp van een REST-eindpunt dat toegankelijk is vanuit de VM. De informatie is beschikbaar via een niet-routeerbaar IP-adres, zodat deze niet buiten de VM beschikbaar is.
Scheduled Events de eerste keer dat u een aanvraag voor gebeurtenissen maakt, is ingeschakeld voor uw schaalset. U kunt een vertraagd antwoord verwachten in uw eerste aanroep van maximaal twee minuten. Het eindpunt periodiek opvragen om aanstaande onderhoudsgebeurtenissen en de status van lopende onderhoudsactiviteiten te detecteren.
Scheduled Events is uitgeschakeld voor uw schaalset als de instanties van de schaalset 24 uur lang geen aanvraag indienen.
Eindpuntdetectie
Voor VNET-VM's is de Metadata Service beschikbaar via een statisch niet-routeerbaar IP-adres, 169.254.169.254.
Het volledige eindpunt voor de meest recente versie van Scheduled Events is:
'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'
Query-antwoord
Een antwoord bevat een matrix met geplande gebeurtenissen. Een lege matrix betekent dat er momenteel geen gebeurtenissen zijn gepland.
In het geval dat er geplande gebeurtenissen zijn, bevat het antwoord een matrix van gebeurtenissen. Voor een gebeurtenis 'Beëindigen' ziet het antwoord er als volgt uit:
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled",
"NotBefore": {timeInUTC},
}
]
}
De DocumentIncarnation is een ETag en biedt een eenvoudige manier om te controleren of de nettolading Gebeurtenissen sinds de laatste query is gewijzigd.
Zie voor meer informatie over elk van de bovenstaande velden de Scheduled Events documentatie voor Windows en Linux.
Reageren op gebeurtenissen
Zodra u een aanstaande gebeurtenis hebt geleerd en uw logica hebt voltooid voor een goede afsluiting, kunt u de openstaande gebeurtenis goedkeuren door een POST-aanroep naar de metagegevensservice te maken met de EventId. De POST-aanroep geeft azure aan dat deze kan doorgaan met het verwijderen van de VM.
Hieronder vindt u de json die wordt verwacht in de post-aanvraag. De aanvraag moet een lijst met StartRequests bevatten. Elke StartRequest bevat de EventId voor de gebeurtenis die u wilt versnellen:
{
"StartRequests" : [
{
"EventId": {EventId}
}
]
}
Zorg ervoor dat elke VM in de schaalset alleen de EventID goedkeurt die alleen relevant is voor die VM. Een VM kan zijn eigen VM-naam krijgen via metagegevens van het exemplaar. Deze naam heeft de vorm {scale-set-name}_{instance-id} en wordt weergegeven in de sectie Resources van het query-antwoord dat hierboven wordt beschreven.
U kunt ook verwijzen naar voorbeelden van scripts voor het uitvoeren van query's en het reageren op gebeurtenissen in Python.
Tips en best practices
- Meldingen alleen beëindigen voor verwijderbewerkingen: bij alle verwijderbewerkingen (handmatig verwijderen of automatisch schalen geïnitieerd inschalen) worden beëindigingsgebeurtenissen gegenereerd als scheduledEventsProfile is ingeschakeld voor uw schaalset. Andere bewerkingen, zoals opnieuw opstarten, opnieuw genereren, opnieuw uitvoeren en stoppen/de toewijzing van toewijzingen, genereren geen beëindigingsgebeurtenissen.
- Geen verplichte wachttijd voor time-out: u kunt de beëindigingsbewerking op elk moment starten nadat de gebeurtenis is ontvangen en voordat de notbefore-tijd van de gebeurtenis verloopt.
- Verplicht verwijderen bij time-out: er is geen mogelijkheid om de time-outwaarde uit te breiden nadat een gebeurtenis is gegenereerd. Zodra de time-out is verlopen, wordt de gebeurtenis beëindigen in behandeling verwerkt en wordt de VM verwijderd.
- Wijzigbare time-outwaarde: u kunt de time-outwaarde op elk moment wijzigen voordat een exemplaar wordt verwijderd door de eigenschap notBeforeTimeout voor het schaalsetmodel te wijzigen en de VM-exemplaren bij te werken naar het meest recente model.
- Alle verwijderen in behandeling goedkeuren: als er een verwijderen in behandeling is op VM_1 dat niet is goedgekeurd en u een andere beëindigingsgebeurtenis op VM_2 hebt goedgekeurd, wordt VM_2 pas verwijderd als de beëindigingsgebeurtenis voor VM_1 is goedgekeurd of de time-out is verstreken. Zodra u de gebeurtenis beëindigen voor VM_1 goedkeurt, worden VM_1 en VM_2 verwijderd.
- Alle gelijktijdige verwijderen goedkeuren: als VM_1 en VM_2 dezelfde NotBefore-tijd hebben, moeten beide beëindigingsgebeurtenissen worden goedgekeurd of wordt geen van beide VM's verwijderd voordat de time-out verloopt.
Problemen oplossen
Kan scheduledEventsProfile niet inschakelen
Als u een BadRequest-fout krijgt met een foutbericht met de melding 'Kan lid 'scheduledEventsProfile' niet vinden op object van het type 'VirtualMachineProfile', controleert u de API-versie die wordt gebruikt voor de schaalsetbewerkingen. Compute-API-versie 2019-03-01 of hoger is vereist.
Kan gebeurtenissen voor beëindigen niet krijgen
Als u geen beëindigingsgebeurtenissen krijgt via Scheduled Events, controleert u de API-versie die wordt gebruikt om de gebeurtenissen op te vragen. Metadata Service API-versie 2019-01-01 of hoger is vereist voor gebeurtenissen beëindigen.
'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'
Gebeurtenis beëindigen met onjuiste NotBefore-tijd
Nadat scheduledEventsProfile is inschakelen voor het schaalsetmodel en notBeforeTimeout is ingesteld, worden de afzonderlijke exemplaren bijgewerkt naar het meest recente model om de wijzigingen weer te geven.
Volgende stappen
Meer informatie over het implementeren van uw toepassing op virtuele-machineschaalsets.