Azure Sanal Makine Ölçek Kümesi örnekleri için sonlandırma bildirimi

Ölçek kümesi örnekleri, örnek sonlandırma bildirimlerini almayı kabul edebilir ve sonlandırma işlemine önceden tanımlanmış bir gecikme zaman aşımı ayarlayabilir. Sonlandırma bildirimi, yeniden başlatma ve yeniden dağıtma gibi etkili işlemler için bildirimler ve gecikmeler sağlayan Azure Meta Veri Hizmeti – Zamanlanmış Olaylar aracılığıyla gönderilir. Çözüm, Zamanlanmış Olaylar listesine başka bir olay (Terminate) ekler ve sonlandırma olayının ilişkili gecikmesi, ölçek kümesi model yapılandırmalarında kullanıcılar tarafından belirtilen gecikme sınırına bağlıdır.

Uygun Meta Veri Hizmeti uç noktasını çağırarak Zamanlanmış Olaylar'a kaydolduktan sonra, ölçek kümesi örneklerinin örnek silinmeden önce belirtilen zaman aşımı süresinin dolmasını beklemesi gerekmez. Sonlandır bildirimi aldıktan sonra, sonlandırma zaman aşımı süresi dolmadan önce örnek herhangi bir zamanda silinmesini seçebilir. Spot örneklerde sonlandırma bildirimleri etkinleştirilemez. Spot örnekleri hakkında daha fazla bilgi için bkz. Sanal Makine Ölçek Kümeleri için Azure Spot Sanal Makineler

Sonlandırma bildirimlerini etkinleştirme

Aşağıdaki örneklerde açıklandığı gibi, ölçek kümesi örneklerinizde sonlandırma bildirimlerini etkinleştirmenin birden çok yolu vardır.

Azure portalı

Aşağıdaki adımlar, yeni bir ölçek kümesi oluştururken sonlandırma bildirimini etkinleştirir.

  1. Sanal Makine Ölçek Kümeleri'a gidin.
  2. Yeni bir ölçek kümesi oluşturmak için + Ekle'yi seçin.
  3. Yönetim sekmesine gidin.
  4. Örnek sonlandırma bölümünü bulun.
  5. Örnek sonlandırma bildirimi için Açık'ı seçin.
  6. Sonlandırma gecikmesi (dakika) için istenen varsayılan zaman aşımını ayarlayın.
  7. Yeni ölçek kümesini oluşturmayı bitirdiğinizde Gözden Geçir ve oluştur düğmesini seçin.

Ayrıca mevcut bir ölçek kümesinde sonlandırma bildirimlerini etkinleştirebilirsiniz.

  1. İstediğiniz ölçek kümesine gidin
  2. Yapılandırma sekmesine gidin
  3. Örneği etkinleştirme sonlandırma bildirimi için Açık'ı seçin.
  4. Sonlandırma gecikmesi (dakika) için istenen varsayılan zaman aşımını ayarlayın.
  5. Kaydet düğmesini seçin.

REST API

Aşağıdaki örnek ölçek kümesi modelinde sonlandırma bildirimini etkinleştirir.

PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2019-03-01`
{
  "properties": {
    "virtualMachineProfile": {
            "scheduledEventsProfile": {
                "terminateNotificationProfile": {
                    "notBeforeTimeout":"PT5M",
                    "enable":true
                }
            }
        }
    }        
}

Yukarıdaki blok, ölçek kümenizdeki tüm örneklerde herhangi bir sonlandırma işlemi için 5 dakikalık bir zaman aşımı gecikmesi (PT5M tarafından belirtildiği gibi) belirtir. NotBeforeTimeout alanı ISO 8601 biçiminde 5 ile 15 dakika arasında bir değer alabilir. Yukarıda açıklanan terminateNotificationProfile altında notBeforeTimeout özelliğini değiştirerek sonlandırma işlemi için varsayılan zaman aşımını değiştirebilirsiniz.

Ölçek kümesi modelinde scheduledEventsProfile'ı etkinleştirdikten ve notBeforeTimeout değerini ayarladıktan sonra, tek tek örnekleri değişiklikleri yansıtacak şekilde en son modele güncelleştirin.

Dekont

Ölçek kümesi örneklerinde bildirimleri sonlandırma yalnızca API sürüm 2019-03-01 ve üzeri ile etkinleştirilebilir

Azure PowerShell

Yeni bir ölçek kümesi oluştururken, New-AzVmssConfig cmdlet'ini kullanarak ölçek kümesinde sonlandırma bildirimlerini etkinleştirebilirsiniz.

Bu örnek betik, yapılandırma dosyasını kullanarak ölçek kümesi ve ilişkili kaynakların oluşturulmasında yol gösterir: Eksiksiz bir Sanal Makine Ölçek Kümesi oluşturma. Ölçeklendirme kümesi oluşturmak için yapılandırma nesnesine TerminateScheduledEvents ve TerminateScheduledEventNotBeforeTimeoutInMinutes parametrelerini ekleyerek "sonlandırmayı yapılandır" bildirimleri sağlayabilirsiniz. Aşağıdaki örnek, özelliği 10 dakikalık gecikme zaman aşımı süresiyle etkinleştirir.

Önemli

Kasım 2023'den itibaren, düzenleme modu belirtilmezse PowerShell ve Azure CLI kullanılarak oluşturulan VM ölçek kümeleri varsayılan olarak Esnek Düzenleme Modu olarak ayarlanır. Bu değişiklik ve gerçekleştirmeniz gereken eylemler hakkında daha fazla bilgi için BKZ. VMSS PowerShell/CLI Müşterileri için Yeni Değişiklik - Microsoft Community Hub

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

Mevcut bir ölçek kümesinde sonlandırma bildirimlerini etkinleştirmek için Update-AzVmss cmdlet'ini kullanın.

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

Yukarıdaki örnek, mevcut bir ölçek kümesinde sonlandırma bildirimlerini etkinleştirir ve sonlandırma olayı için 15 dakikalık bir zaman aşımı ayarlar.

Ölçek kümesi modelinde zamanlanmış olayları etkinleştirdikten ve zaman aşımını ayarladıktan sonra, tek tek örnekleri değişiklikleri yansıtacak şekilde en son modele güncelleştirin.

Azure CLI 2.0

Aşağıdaki örnek, yeni bir ölçek kümesi oluştururken sonlandırma bildirimini etkinleştirmeye yöneliktir.

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

Yukarıdaki örnek önce bir kaynak grubu oluşturur, ardından 10 dakikalık varsayılan zaman aşımı için sonlandırma bildirimlerinin etkinleştirildiği yeni bir ölçek kümesi oluşturur.

Aşağıdaki örnek, mevcut bir ölçek kümesinde sonlandırma bildirimini etkinleştirmeye yöneliktir.

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --enable-terminate-notification true \
  --terminate-notification-time 10

Sonlandırma bildirimlerini alma

Sonlandırma bildirimleri, Azure Meta Veri Hizmeti olan Zamanlanmış Olaylar aracılığıyla teslim edilir. Azure Meta Veri hizmeti, VM'nin içinden erişilebilen bir REST Uç Noktası kullanarak Sanal Makineler çalıştırma hakkındaki bilgileri kullanıma sunar. Bilgiler, sanal makinenin dışında kullanıma sunulmaması için yönlendirilemeyen bir IP üzerinden kullanılabilir.

Zamanlanmış Olaylar, olaylar için ilk istekte bulunurken ölçek kümeniz için etkinleştirilir. İki dakikaya kadar ilk çağrınızda gecikmeli yanıt bekleyebilirsiniz. Yaklaşan bakım olaylarını ve devam eden bakım etkinliklerinin durumunu algılamak için uç noktayı düzenli aralıklarla sorgulayın.

Ölçek kümesi örnekleri 24 saat boyunca istekte bulunmazsa ölçek kümeniz için Zamanlanmış Olaylar devre dışı bırakılır.

Uç nokta bulma

Sanal ağ özellikli VM'ler için Meta Veri Hizmeti, yönlendirilemeyen statik IP'den (169.254.169.254) kullanılabilir.

Zamanlanmış Olayların en son sürümü için tam uç nokta:

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

Sorgu yanıtı

Yanıt, zamanlanmış olaylar dizisi içerir. Boş bir dizi, şu anda zamanlanmış olay olmadığı anlamına gelir.

Zamanlanmış olayların olduğu durumlarda, yanıt bir dizi olay içerir. "Sonlandır" olayı için yanıt aşağıdaki gibi görünür:

{
    "DocumentIncarnation": {IncarnationID},
    "Events": [
        {
            "EventId": {eventID},
            "EventType": "Terminate",
            "ResourceType": "VirtualMachine",
            "Resources": [{resourceName}],
            "EventStatus": "Scheduled",
            "NotBefore": {timeInUTC},
        }
    ]
}

DocumentIncarnation bir ETag'dir ve Son sorgudan bu yana Olaylar yükünün değişip değişmediğini denetlemenin kolay bir yolunu sağlar.

Yukarıdaki alanların her biri hakkında daha fazla bilgi için Windows ve Linux için Zamanlanmış Olaylar belgelerine bakın.

Olaylara yanıt verme

Yaklaşan bir olay hakkında bilgi edindikten ve düzgün kapatma mantığınızı tamamladıktan sonra EventId ile meta veri hizmetine post çağrısı yaparak bekleyen olayı onaylayabilirsiniz. POST çağrısı, Azure'a VM silme işlemine devam olabileceğini belirtir.

Post isteği gövdesinde beklenen json aşağıdadır. İstek, StartRequests listesini içermelidir. Her StartRequest, hızlandırmak istediğiniz olayın EventId değerini içerir:

{
	"StartRequests" : [
		{
			"EventId": {EventId}
		}
	]
}

Ölçek kümesindeki her VM'nin yalnızca ilgili VM'ye uygun EventID'yi onaylandığından emin olun. Bir VM, örnek meta verileri aracılığıyla kendi VM adını alabilir. Bu ad "{scale-set-name}_{instance-id}" biçimini alır ve yukarıda açıklanan sorgu yanıtının 'Kaynaklar' bölümünde görüntülenir.

Python olaylarını sorgulamak ve yanıtlamak için örnek betiklerine de başvurabilirsiniz.

İpuçları ve en iyi yöntemler

  • Bildirimleri yalnızca 'silme' işlemlerinde sonlandır – Ölçek kümenizde scheduledEventsProfile etkinse tüm silme işlemleri (el ile silme veya Otomatik ölçeklendirme ile başlatılan ölçeklendirme) Terminate olayları oluşturur. Yeniden başlatma, yeniden oluşturma, yeniden dağıtma ve durdurma/serbest bırakma gibi diğer işlemler Terminate olayları oluşturmaz.
  • Zaman aşımı için zorunlu bekleme yok – Sonlandırma işlemini olay alındıktan sonra ve olayın NotBefore süresi dolmadan önce başlatabilirsiniz.
  • Zaman aşımında zorunlu silme : Bir olay oluşturulduktan sonra zaman aşımı değerini genişletme özelliği yoktur. Zaman aşımı süresi dolduktan sonra bekleyen sonlandırma olayı işlenir ve VM silinir.
  • Değiştirilebilir zaman aşımı değeri – Ölçek kümesi modelinde notBeforeTimeout özelliğini değiştirerek ve VM örneklerini en son modele güncelleştirerek , bir örnek silinmeden önce istediğiniz zaman zaman zaman aşımı değerini değiştirebilirsiniz.
  • Tüm bekleyen silmeleri onayla – VM_1 üzerinde onaylanmamış bekleyen bir silme varsa ve VM_2 başka bir sonlandırma olayını onayladıysanız, VM_1 sonlandırma olayı onaylanana veya zaman aşımı geçene kadar VM_2 silinmez. VM_1 için sonlandırma olayını onayladıktan sonra hem VM_1 hem de VM_2 silinir.
  • Tüm eşzamanlı silmeleri onayla – VM_1 ve VM_2 aynı NotBefore zamana sahipse yukarıdaki örneği genişleterek, zaman aşımı süresi dolmadan önce her iki sonlandırma olayının da onaylanması gerekir veya vm silinmez.

Sorun giderme

ScheduledEventsProfile etkinleştirilmedi

"'VirtualMachineProfile' türündeki nesnede 'scheduledEventsProfile' üyesi bulunamadı" hata iletisiyle 'BadRequest' hatası alırsanız ölçek kümesi işlemleri için kullanılan API sürümünü denetleyin. İşlem API'si sürüm 2019-03-01 veya üzeri gereklidir.

Terminate olayları alınamaması

Zamanlanmış Olaylar aracılığıyla Terminate olayı almıyorsanız, olayları almak için kullanılan API sürümünü denetleyin. Sonlandırma olayları için Meta Veri Hizmeti API'si sürüm 2019-01-01 veya üzeri gereklidir.

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

Yanlış NotBefore zamanıyla Terminate olayını alma

Ölçek kümesi modelinde scheduledEventsProfile'ı etkinleştirdikten ve notBeforeTimeout değerini ayarladıktan sonra, tek tek örnekleri değişiklikleri yansıtacak şekilde en son modele güncelleştirin.

Sonraki adımlar

Uygulamanızı Sanal Makine Ölçek Kümeleri dağıtmayı öğrenin.