إنهاء الإعلام لمثيلات Azure Virtual Machine Scale Set

يمكن لمثيلات مجموعة المقاييس الاشتراك في تلقي إعلامات إنهاء المثيل وتعيين مهلة تأخير محددة مسبقاً لعملية الإنهاء. يتم إرسال إعلام الإنهاء من خلال خدمة بيانات تعريف Azure - الأحداث المجدولة، والتي توفر إعلامات للعمليات المؤثرة وتأخيرها مثل إعادة التشغيل وإعادة النشر. يضيف الحل حدثاً آخر - وهو إنهاء - إلى قائمة الأحداث المجدولة، وسيعتمد التأخير المرتبط بحدث الإنهاء على حد التأخير كما هو محدد من قبل المستخدمين في تكوينات نموذج مجموعة المقاييس الخاصة بهم.

بمجرد التسجيل في الأحداث المجدولة عن طريق استدعاء نقطة نهاية خدمة بيانات التعريف المناسبة، لا تحتاج مثيلات مجموعة المقياس إلى الانتظار حتى تنتهي المهلة المحددة قبل حذف المثيل. بعد تلقي إعلام الإنهاء، يمكن للمثيل اختيار حذفه في أي وقت قبل انتهاء مهلة الإنهاء. لا يمكن تمكين إنهاء الإعلامات في مثيلات Spot. لمزيد من المعلومات حول مثيلات Spot، راجع أجهزة Azure Spot الظاهرية لمجموعات مقياس الجهاز الظاهري

تمكين إعلامات الإنهاء

ثمة طرق متعددة لتمكين إعلام الإنهاء على مثيلات مجموعة المقياس، كما هو مفصل في الأمثلة الواردة أدناه.

مدخل Azure

تتيح الخطوات التالية إعلام الإنهاء عند إنشاء مجموعة مقياس جديدة.

  1. انتقل إلى مجموعات مقياس الجهاز الظاهري.
  2. حدد + Add لإنشاء مجموعة مقاييس جديدة.
  3. انتقل إلى علامة التبويب ⁧Management⁧⁩.
  4. حدد موقع قسم إنهاء المثيل.
  5. بالنسبة إلى إعلام إنهاء المثيل، حدد On.
  6. بالنسبة إلى تأخير الإنهاء (بالدقائق)، قم بتعيين المهلة الافتراضية المطلوبة.
  7. عند الانتهاء من إنشاء مجموعة المقياس الجديدة، حدد الزر Review + create .

يمكنك أيضا تمكين إشعارات الإنهاء على مجموعة مقياس موجودة.

  1. انتقل إلى مجموعة المقياس المطلوبة
  2. انتقل إلى علامة التبويب Configuration
  3. لتمكين إعلام إنهاء المثيل، حدد تشغيل.
  4. بالنسبة إلى تأخير الإنهاء (بالدقائق)، قم بتعيين المهلة الافتراضية المطلوبة.
  5. حدد الزر حفظ .

واجهة برمجة تطبيقات REST

يتيح المثال التالي إعلام الإنهاء على نموذج مجموعة المقياس.

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

تحدد الكتلة أعلاه مهلة تأخير بمقدار 5 دقائق (كما هو موضح بواسطة PT5M) لأي عملية إنهاء في جميع الحالات في مجموعة المقياس الخاصة بك. قد يأخذ الحقل notBeforeTimeout أي قيمة تتراوح بين 5 و15 دقيقة بتنسيق ISO 8601. يمكنك تغيير المهلة الافتراضية لعملية الإنهاء عن طريق تعديل الخاصية notBeforeTimeout ضمن terminateNotificationProfile الموضح أعلاه.

بعد تمكين scheduledEventsProfile على نموذج مجموعة المقياس وتعيين notBeforeTimeout، قم بتحديث المثيلات الفردية إلى أحدث طراز لتعكس التغييرات.

إشعار

لا يمكن تمكين إعلامات الإنهاء على مثيلات مجموعة المقياس إلا باستخدام إصدار API 2019-03-01 والإصدارات الأحدث

Azure PowerShell

عند إنشاء مجموعة مقاييس جديدة، يمكنك تمكين إعلامات الإنهاء على المقياس الذي تم تعيينه باستخدام New-AzVmssConfig cmdlet.

يستعرض هذا البرنامج النصي النموذجي إنشاء مجموعة تحجيم والموارد المقترنة باستخدام ملف التكوين: إنشاء مجموعة مقياس جهاز ظاهري كاملة. يمكنك توفير إعلامات "تكوين الإنهاء" عن طريق إضافة المعلمات TerminateScheduledEvents و TerminateScheduledEventNotBeforeTimeoutInMinutes إلى كائن التكوين لإنشاء مجموعة مقياس. يتيح المثال التالي الميزة مع مهلة تأخير مدتها 10 دقائق.

هام

بدءا من نوفمبر 2023، سيتم تعيين مجموعات مقياس الجهاز الظاهري التي تم إنشاؤها باستخدام PowerShell وAzure CLI افتراضيا إلى وضع التنسيق المرن إذا لم يتم تحديد وضع التزامن. لمزيد من المعلومات حول هذا التغيير والإجراءات التي يجب اتخاذها، انتقل إلى كسر التغيير لعملاء VMSS PowerShell/CLI - مركز مجتمع Microsoft

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

استخدم Update-AzVmss cmdlet لتمكين إعلامات الإنهاء على مجموعة مقاييس حالية.

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

يمكّن المثال أعلاه إعلامات الإنهاء على مجموعة مقياس موجودة وتعيين مهلة مدتها 15 دقيقة لحدث الإنهاء.

بعد تمكين الأحداث المجدولة على نموذج مجموعة المقياس وتعيين المهلة، قم بتحديث المثيلات الفردية إلى أحدث طراز لتعكس التغييرات.

Azure CLI 2.0

المثال التالي مخصص لتمكين إعلام الإنهاء أثناء إنشاء مجموعة مقياس جديدة.

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

ينشئ المثال أعلاه أولاً مجموعة موارد، ثم ينشئ مجموعة مقاييس جديدة مع تمكين إعلامات الإنهاء لمهلة افتراضية مدتها 10 دقائق.

المثال التالي هو لتمكين إعلام الإنهاء في مجموعة مقاييس حالية.

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

الحصول على إعلامات الإنهاء

يتم تقديم إعلامات الإنهاء من خلال الأحداث المجدولة، وهي خدمة بيانات تعريفية في Azure. تعرض خدمة بيانات تعريف Azure معلومات عن تشغيل الأجهزة الظاهرية باستخدام نقطة نهاية REST التي يمكن الوصول إليها من داخل الجهاز الظاهري. تتوفر المعلومات عبر عنوان IP غير قابل للتوجيه، بحيث لا يتم كشفه خارج الجهاز الظاهري.

يتم تمكين الأحداث المجدولة لمجموعة مقاييسك في المرة الأولى التي تقدم فيها طلباً للأحداث. يجب أن تتوقع استجابة متأخرة في استدعائك الأول لمدة تصل إلى دقيقتين. استعلم عن نقطة النهاية بشكلٍ دوري لاكتشاف أحداث الصيانة القادمة وحالة أنشطة الصيانة الجارية.

يتم تعطيل الأحداث المجدولة لمجموعة المقاييس التي تم تعيينها إذا لم تقدم مثيلات مجموعة المقياس طلباً لمدة 24 ساعة.

اكتشاف نقطة النهاية

بالنسبة للأجهزة الظاهرية التي تدعم الشبكة الظاهرية، تتوفر خدمة بيانات التعريف من عنوان IP ثابت غير قابل للتوجيه، 169.254.169.254.

نقطة النهاية الكاملة لأحدث إصدار من الأحداث المجدولة هي:

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

استجابة الاستعلام

تحتوي الاستجابة على صفيف من الأحداث المجدولة. يعني الصفيف الفارغ أنه لا توجد أحداث مجدولة حالياً.

في حالة وجود أحداث مجدولة، تحتوي الاستجابة على صفيف من الأحداث. بالنسبة لحدث "الإنهاء"، ستبدو الاستجابة على النحو التالي:

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

DocumentIncarnation عبارة عن ETag وتوفر طريقة سهلة لفحص ما إذا كانت حمولة الأحداث قد تغيرت منذ آخر طلب استعلام.

لمزيد من المعلومات عن أحد الحقول الواردة أعلاه، راجع وثائق الأحداث المجدولة لنظامي التشغيل Windows وLinux.

الاستجابة للأحداث

بمجرد أن تعرفت على حدث قادم وأكملت منطقك لإيقاف التشغيل بأمان، يمكنك الموافقة على الحدث المعلق عن طريق إجراء استدعاء POST لخدمة بيانات التعريف باستخدام EventId. يشير استدعاء POST إلى Azure أنه يمكنه متابعة حذف الجهاز الظاهري.

فيما يلي ملف JSON المتوقع في نص طلب POST. يجب أن يحتوي الطلب على قائمة StartRequests. يحتوي كل StartRequest على EventId للحدث الذي تريد تعجيله:

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

تأكد من أن كل جهاز ظاهري في مجموعة المقياس يعتمد فقط على EventID ذي الصلة بهذا الجهاز الظاهري. يمكن للجهاز الظاهري الحصول على اسم الجهاز الظاهري الخاص به من خلال البيانات الوصفية للمثيل. يأخذ هذا الاسم الشكل "{scale-set-name}_{instance-id}"، وسيتم عرضه في قسم "الموارد" في استجابة الاستعلام الموضحة أعلاه.

يمكنك أيضاً الرجوع إلى نماذج البرامج النصية للاستعلام عن أحداث Python والرد عليها.

التلميحات وأفضل الممارسات

  • إعلامات الإنهاء فقط في عمليات "الحذف" - ستقوم جميع عمليات الحذف (الحذف اليدوي أو التدرج التلقائي الذي بدأه) بإنشاء أحداث إنهاء إذا تم تمكين scheduledEventsProfile في مجموعة المقاييس الخاصة بك. لا تنشئ العمليات الأخرى مثل إعادة التشغيل وإعادة الإعادة وإعادة النشر والإيقاف/إلغاء التخصيص أحداث إنهاء.
  • لا يوجد انتظار إلزامي للمهلة - يمكنك بدء عملية الإنهاء في أي وقت بعد تلقي الحدث وقبل انتهاء وقت NotBefore الخاص بالحدث.
  • حذف إلزامي عند انتهاء المهلة - لا توجد أي إمكانية لتمديد قيمة المهلة بعد إنشاء الحدث. بمجرد انتهاء المهلة، ستتم معالجة حدث الإنهاء المعلق وسيتم حذف الجهاز الظاهري.
  • قيمة المهلة القابلة للتعديل - يمكنك تعديل قيمة المهلة في أي وقت قبل حذف مثيل، عن طريق تعديل خاصية notBeforeTimeout في نموذج مجموعة المقياس وتحديث مثيلات الجهاز الظاهري إلى أحدث طراز.
  • الموافقة على جميع عمليات الحذف المعلقة - إذا كان هناك حذف معلق على VM_1 لم تتم الموافقة عليه، ووافقت على حدث إنهاء آخر على VM_2، فلن يتم حذف VM_2 حتى تتم الموافقة على حدث الإنهاء لـVM_1 أو انقضاء المهلة الخاصة به. بمجرد الموافقة على حدث الإنهاء لـVM_1، يتم حذف كل من VM_1 وVM_2.
  • الموافقة على جميع عمليات الحذف المتزامنة - تمديد المثال أعلاه، إذا كان VM_1 وVM_2 لهما نفس الوقت NotBefore، يجب الموافقة على كلا الحدثين المنتهيين أو لا يتم حذف أي من الأجهزة الظاهرية قبل انتهاء المهلة.

استكشاف الأخطاء وإصلاحها‬

فشل تمكين scheduledEventsProfile

إذا تلقيت خطأ "BadRequest" مع رسالة خطأ تنص على "تعذر العثور على العضو" "ScheduleEventsProfile" في كائن من النوع "VirtualMachineProfile"، فتحقق من إصدار واجهة برمجة التطبيقات المستخدم لعمليات مجموعة المقياس. يلزم توفر إصدار واجهة برمجة تطبيقات الحوسبة 2019-03-01 أو الإصدار الأحدث.

فشل الحصول على أحداث الإنهاء

إذا لم تحصل على أي أحداث إنهاء من خلال الأحداث المجدولة، فتحقق من إصدار واجهة برمجة التطبيقات المستخدم للحصول على الأحداث. يلزم توفر إصدار واجهة برمجة تطبيقات خدمة بيانات التعريف 2019-01-01 أو الإصدار الأعلى لأحداث الإنهاء.

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

الحصول على حدث إنهاء مع وقت NotBefore غير صحيح

بعد تمكين scheduledEventsProfile على نموذج مجموعة المقياس وتعيين notBeforeTimeout، قم بتحديث المثيلات الفردية إلى أحدث طراز لتعكس التغييرات.

الخطوات التالية

تعرف على كيفية نشر التطبيق الخاص بك على مجموعات مقياس الجهاز الظاهري.