Melding beëindigen voor instanties van virtuele-machineschaalsets van Azure

Schaalsetexemplaren kunnen zich aanmelden voor het ontvangen van meldingen over beëindiging van exemplaren en een vooraf gedefinieerde vertragingstime-out instellen voor de beëindigingsbewerking. De beëindigingsmelding wordt verzonden via Azure Metadata Service: geplande gebeurtenissen, die meldingen biedt voor en het vertragen van impactvolle bewerkingen, zoals opnieuw opstarten en opnieuw implementeren. De oplossing voegt een andere gebeurtenis toe : Beëindigen – aan de lijst met geplande gebeurtenissen en de bijbehorende vertraging van de beëindigingsbeurt is afhankelijk van de vertragingslimiet zoals opgegeven door gebruikers in hun modelconfiguraties voor schaalsets.

Nadat u zich hebt geregistreerd bij geplande gebeurtenissen door het juiste eindpunt van de metagegevensservice aan te roepen, hoeven instanties van de schaalset niet te wachten tot de opgegeven time-out verloopt voordat het exemplaar wordt verwijderd. Na ontvangst van een melding beëindigen kan het exemplaar ervoor kiezen om te worden verwijderd voordat de time-out voor beëindiging verloopt. Meldingen over beëindigen kunnen niet worden ingeschakeld op spot-exemplaren. Zie Azure Spot Virtual Machines voor virtuele-machineschaalsets voor meer informatie over spot-exemplaren

Meldingen over beëindigen inschakelen

Er zijn meerdere manieren om beëindigingsmeldingen in te schakelen voor uw schaalsetexemplaren, zoals beschreven in de onderstaande voorbeelden.

Azure Portal

Met de volgende stappen kunt u een melding over beëindigen inschakelen bij het maken van een nieuwe schaalset.

  1. Ga naar Virtuele-machineschaalsets.
  2. Selecteer + Toevoegen om een nieuwe schaalset te maken.
  3. Ga naar het tabblad Beheer .
  4. Zoek de sectie Exemplaarbeëindiging .
  5. Selecteer Aan voor de melding over beëindiging van het exemplaar.
  6. Voor vertraging bij beëindiging (minuten) stelt u de gewenste standaardtime-out in.
  7. Wanneer u klaar bent met het maken van de nieuwe schaalset, selecteert u de knop Beoordelen en maken .

U kunt ook beëindigingsmeldingen inschakelen voor een bestaande schaalset.

  1. Navigeer naar de gewenste schaalset
  2. Ga naar het tabblad Configuratie
  3. Voor melding over het inschakelen van de beëindiging van exemplaren selecteert u Aan.
  4. Voor vertraging bij beëindiging (minuten) stelt u de gewenste standaardtime-out in.
  5. Selecteer de knop Opslaan .

REST-API

In het volgende voorbeeld wordt een beëindigingsmelding ingeschakeld voor het schaalsetmodel.

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 op van 5 minuten (zoals aangegeven door PT5M) voor elke beëindigingsbewerking op alle exemplaren in uw schaalset. Het veld notBeforeTimeout kan elke waarde tussen 5 en 15 minuten in ISO 8601-indeling duren. 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 ingeschakeld op het schaalsetmodel en de notBeforeTimeout hebt ingesteld, werkt u de afzonderlijke exemplaren bij naar het nieuwste model om de wijzigingen weer te geven.

Notitie

Meldingen over schaalsetexemplaren beëindigen, kunnen alleen worden ingeschakeld met API-versie 2019-03-01 en hoger

Azure PowerShell

Wanneer u een nieuwe schaalset maakt, kunt u beëindigingsmeldingen voor de schaalset inschakelen met behulp van de cmdlet New-AzVmssConfig .

Dit voorbeeldscript begeleidt u bij het maken van een schaalset en bijbehorende resources met behulp van het configuratiebestand: Een volledige virtuele-machineschaalset maken. U kunt 'beëindigen' meldingen 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 vertragingstime-out van 10 minuten ingeschakeld.

Belangrijk

Vanaf november 2023 worden VM-schaalsets die zijn gemaakt met PowerShell en Azure CLI standaard ingesteld op de flexibele indelingsmodus als er geen indelingsmodus is opgegeven. Voor meer informatie over deze wijziging en welke acties u moet ondernemen, gaat u naar Belangrijke wijziging voor VMSS PowerShell/CLI-klanten - Microsoft Community Hub

New-AzVmssConfig `
  -Location "VMSSLocation" `
  -SkuCapacity 2 `
  -OrchestrationMode "Flexible" `
  -SkuName "Standard_DS2" `
  -TerminateScheduledEvents $true `
  -TerminateScheduledEventNotBeforeTimeoutInMinutes 10

Gebruik de cmdlet Update-AzVmss om beëindigingsmeldingen in te schakelen voor een bestaande schaalset.

Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -TerminateScheduledEvents $true `
  -TerminateScheduledEventNotBeforeTimeoutInMinutes 15

In het bovenstaande voorbeeld worden beëindigingsmeldingen voor een bestaande schaalset ingeschakeld en wordt een time-out van 15 minuten ingesteld voor de beëindigingsgebeurtenis.

Nadat geplande gebeurtenissen op het schaalsetmodel zijn ingeschakeld en de time-out zijn ingesteld, werkt u de afzonderlijke exemplaren bij naar het nieuwste model om de wijzigingen weer te geven.

Azure CLI 2.0

Het volgende voorbeeld is bedoeld 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 Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --terminate-notification-time 10

In het bovenstaande voorbeeld wordt eerst een resourcegroep gemaakt en wordt vervolgens een nieuwe schaalset gemaakt met beëindigde meldingen ingeschakeld voor een standaardtime-out van 10 minuten.

Het volgende voorbeeld is bedoeld 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

Beëindigingsmeldingen worden bezorgd via geplande gebeurtenissen. Dit is een Azure Metadata Service. De Azure Metadata-service bevat informatie over het uitvoeren van virtuele machines met behulp van een REST-eindpunt dat toegankelijk is vanuit de VIRTUELE machine. De informatie is beschikbaar via een niet-routeerbaar IP-adres, zodat deze niet beschikbaar is buiten de VIRTUELE machine.

Geplande gebeurtenissen worden ingeschakeld voor uw schaalset wanneer u de eerste keer een aanvraag voor gebeurtenissen indient. U kunt een vertraagd antwoord verwachten in uw eerste oproep van maximaal twee minuten. Voer periodiek een query uit op het eindpunt om toekomstige onderhoudsevenementen en de status van lopende onderhoudsactiviteiten te detecteren.

Geplande gebeurtenissen zijn uitgeschakeld voor uw schaalset als de instanties van de schaalset 24 uur geen aanvraag indienen.

Eindpuntdetectie

Voor vm's met VNET is de Metadata Service beschikbaar via een statisch niet-routeerbaar IP-adres, 169.254.169.254.

Het volledige eindpunt voor de nieuwste versie van Geplande gebeurtenissen is:

'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'

Queryantwoord

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 met 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},
        }
    ]
}

DocumentIncarnation is een ETag en biedt een eenvoudige manier om te controleren of de nettolading Gebeurtenissen is gewijzigd sinds de laatste query.

Zie de documentatie over geplande gebeurtenissen voor Windows en Linux voor meer informatie over elk van de bovenstaande velden.

Reageren op gebeurtenissen

Zodra u meer hebt geleerd over een geplande gebeurtenis en uw logica voor een probleemloos afsluiten hebt voltooid, kunt u de openstaande gebeurtenis goedkeuren door een POST-aanroep naar de metagegevensservice te plaatsen met de EventId. Met de POST-aanroep wordt aan Azure aangegeven dat deze kan doorgaan met verwijderen van de virtuele machine.

Hieronder ziet u de json die wordt verwacht in de hoofdtekst van 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 VIRTUELE machine in de schaalset alleen de EventID goedkeurt die relevant is voor die VM. Een VIRTUELE machine kan een eigen VM-naam ophalen via metagegevens van exemplaren. Deze naam heeft het formulier {scale-set-name}_{instance-id}, en wordt weergegeven in de sectie Resources van het queryantwoord dat hierboven wordt beschreven.

U kunt ook verwijzen naar voorbeeldenscripts voor het uitvoeren van query's en het reageren op gebeurtenissen in Python.

Tips en best practices

  • Meldingen alleen beëindigen bij 'delete'-bewerkingen: alle verwijderbewerkingen (handmatig verwijderen of automatisch schalen geïnitieerde inschaalbewerkingen) genereren beëindigingsgebeurtenissen als uw schaalset scheduledEventsProfile heeft ingeschakeld. Andere bewerkingen, zoals opnieuw opstarten, installatiekopie, opnieuw implementeren en stoppen/ongedaan maken, genereren geen beëindigingsgebeurtenissen.
  • Geen verplichte wachttijd voor time-out: u kunt de beëindigingsbewerking op elk gewenst moment starten nadat de gebeurtenis is ontvangen en voordat de NotBefore-tijd van de gebeurtenis verloopt.
  • Verplichte verwijdering tijdens 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 in behandeling zijnde beëindigingsgebeurtenis verwerkt en wordt de VIRTUELE machine verwijderd.
  • Wijzigbare time-outwaarde: u kunt de time-outwaarde op elk gewenst moment wijzigen voordat een exemplaar wordt verwijderd door de eigenschap notBeforeTimeout in het schaalsetmodel te wijzigen en de VM-exemplaren bij te werken naar het nieuwste model.
  • Alle verwijderingen in behandeling goedkeuren. Als er een verwijdering in behandeling is op VM_1 die niet is goedgekeurd en u een andere beëindigingsgebeurtenis hebt goedgekeurd op VM_2, wordt VM_2 pas verwijderd nadat de beëindigingsgebeurtenis voor VM_1 is goedgekeurd of de time-out is verstreken. Zodra u de beëindigingsbeurtenis voor VM_1 goedkeurt, worden zowel VM_1 als VM_2 verwijderd.
  • Alle gelijktijdige verwijderingen goedkeuren: als VM_1 en VM_2 dezelfde NotBefore-tijd hebben, moeten beide beëindigingsbeurtenissen worden goedgekeurd of worden beide VM's verwijderd voordat de time-out verloopt.

Problemen oplossen

Kan scheduledEventsProfile niet inschakelen

Als u een 'BadRequest'-fout krijgt met het foutbericht 'Kan lid 'scheduledEventsProfile' niet vinden op het 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 geen beëindigingsevenementen ophalen

Als u geen beëindigingsevenementen via geplande gebeurtenissen krijgt, controleert u de API-versie die wordt gebruikt voor het ophalen van de gebeurtenissen. Metagegevensservice-API-versie 2019-01-01 of hoger is vereist voor beëindigingsgebeurtenissen.

'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'

Gebeurtenis Beëindigen met onjuiste NotBefore-tijd ophalen

Nadat scheduledEventsProfile is ingeschakeld op het schaalsetmodel en de notBeforeTimeout hebt ingesteld, werkt u de afzonderlijke exemplaren bij naar het nieuwste model om de wijzigingen weer te geven.

Volgende stappen

Meer informatie over het implementeren van uw toepassing op virtuele-machineschaalsets.