توزيع أجهزة Azure Spot الظاهرية باستخدام Azure PowerShell

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ أجهزة Windows الظاهرية ✔️ مجموعات مقياس مرنة

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

يتغير تسعير Azure Spot Virtual Machines، استنادًا إلى المنطقة وSKU. لمزيدٍ من المعلومات، راجع تسعير الجهاز الظاهري لنظامي التشغيل Linux و Windows. لمزيد من المعلومات عن تعيين الحد الأقصى للسعر، راجع أجهزة Azure Spot الظاهرية - التسعير.

لديك خيار تعيين الحد الأقصى للسعر الذي ترغب في دفعه، في الساعة، مقابل الجهاز الظاهري. يمكن تعيين الحد الأقصى لسعر جهاز Azure Spot الظاهري بالدولار الأمريكي (USD)، باستخدام ما يصل إلى 5 منازل عشرية. على سبيل المثال، ستكون القيمة 0.98765 أقصى سعر يبلغ 0.98765 دولار أمريكي لكل ساعة. إذا عيَّنت الحد الأقصى للسعر إلى -1، فلن يتم استرداد الجهاز الظاهري بناءً على السعر. سيكون سعر الجهاز الظاهري هو السعر الحالي لـ Spot أو سعر جهاز ظاهري قياسي، وهو أقل من أي وقت مضى، طالما أن هناك سعة وحصة متوفرة.

إنشاء جهاز ظاهري

إنشاء spotVM باستخدام New-AzVmConfig لإنشاء التكوين. قم بتضمين -Priority Spot وتعيين -MaxPrice إما:

  • -1 لذلك لا يتم إخلاء الجهاز الظاهري بناءً على السعر.
  • مبلغ بالدولار، يصل إلى 5 أرقام. على سبيل المثال، -MaxPrice .98765 يعني أنه سيتم إلغاء تخصيص VM بمجرد أن يصل سعر spotVM إلى حوالي .98765 دولاراً أمريكياً في الساعة.

ينشئ هذا المثال spotVM لن يتم إلغاء تخصيصه استناداً إلى التسعير (فقط عندما يحتاج Azure إلى استعادة السعة). تم تعيين سياسة الإخلاء على إلغاء تخصيص الجهاز الظاهري، بحيث يمكن إعادة تشغيله في وقتٍ لاحق. إذا كنت تريد حذف الجهاز الظاهري والقرص الأساسي عند إخلاء الجهاز الظاهري، فقم بتعيين -EvictionPolicy إلى Delete في New-AzVMConfig.

$resourceGroup = "mySpotRG"
$location = "eastus"
$vmName = "mySpotVM"
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
New-AzResourceGroup -Name $resourceGroup -Location $location
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
   -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup `
   -Location $location -Name MYvNET -AddressPrefix 192.168.0.0/16 `
   -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration and set this to be an Azure Spot Virtual Machine

$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1 -Priority "Spot" -MaxPrice -1 -EvictionPolicy Deallocate | `
Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | `
Set-AzVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzVMNetworkInterface -Id $nic.Id

New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

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

Get-AzVM -ResourceGroupName $resourceGroup | `
   Select-Object Name,@{Name="maxPrice"; Expression={$_.BillingProfile.MaxPrice}}

محاكاة عملية الإخلاء

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

في معظم الحالات، ستحتاج إلى استخدام REST API للجهاز الظاهري - محاكاة الإخلاء للمساعدة في الاختبار التلقائي للتطبيقات. بالنسبة إلى REST، تعني Response Code: 204 أن محاكاة الإخلاء كانت ناجحة. يمكنك الجمع بين محاكاة الإخلاء مع خدمة Scheduled Event، لأتمتة كيفية استجابة تطبيقك عند إخلاء الجهاز الظاهري.

لمشاهدة الأحداث المجدولة أثناء العمل، شاهد Azure Friday - استخدام أحداث Azure المجدولة للتحضير لصيانة الجهاز الظاهري.

الاختبار السريع

لإجراء اختبار سريع من أجل إظهار كيفية عمل محاكاة الإخلاء، دعنا نتصفح الاستعلام عن خدمة Scheduled Event لنرى كيف تبدو عند محاكاة عملية إخلاء باستخدام PowerShell.

يتم تمكين خدمة الأحداث المجدولة لخدمتك في المرة الأولى التي تقدم فيها طلباً للأحداث.

الاتصال بالجهاز الظاهري الخاص بك عن بُعد، ثم افتح موجه الأوامر.

من موجه الأوامر على الجهاز الظاهري الخاص بك، اكتب:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

قد تستغرق هذه الاستجابة الأولى ما يصل إلى دقيقتين. من الآن فصاعداً، يتعين عليهم عرض الإخراج على الفور تقريباً.

من جهاز كمبيوتر مثبت عليه الوحدة النمطية Az PowerShell (مثل جهازك المحلي)، قم بمحاكاة عملية إخلاء باستخدام Set-AzVM. استبدل اسم مجموعة الموارد واسم الجهاز الظاهري بأسمائك.

Set-AzVM -ResourceGroupName "mySpotRG" -Name "mySpotVM" -SimulateEviction

سيكون إخراج الاستجابة Status: Succeeded إذا تم تقديم الطلب بنجاح.

ارجع بسرعة إلى اتصالك عن بُعد بجهاز Spot الظاهري واستعلم عن نقطة نهاية الأحداث المجدولة مرةً أخرى. كرر الأمر التالي حتى تحصل على إخراج يحتوي على مزيدٍ من المعلومات:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

عندما تتلقى خدمة Scheduled Event إشعار الإخلاء، ستتلقى رداً يشبه هذا:

{"DocumentIncarnation":1,"Events":[{"EventId":"A123BC45-1234-5678-AB90-ABCDEF123456","EventStatus":"Scheduled","EventType":"Preempt","ResourceType":"VirtualMachine","Resources":["myspotvm"],"NotBefore":"Tue, 16 Mar 2021 00:58:46 GMT","Description":"","EventSource":"Platform"}]}

يمكنك أن ترى ذلك"EventType":"Preempt"، والمورد هو مورد الجهاز الظاهري "Resources":["myspotvm"].

يمكنك أيضاً معرفة متى سيتم إخلاء الجهاز الظاهري عن طريق التحقق من القيمة "NotBefore". لن يتم إخلاء الجهاز الظاهري قبل الوقت المحدد NotBefore، لذا فهذه هي مهلتك الزمنية لإغلاق تطبيقك بأمان.

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

يمكنك أيضاً إنشاء جهاز Azure Spot الظاهري باستخدام Azure CLI، أو المدخل، أو القالب.

استعلم عن معلومات التسعير الحالية باستخدام واجهة برمجة تطبيقات أسعار التجزئة في Azure للحصول على معلومات عن تسعير جهاز Azure Spot الظاهري. سيحتوي كل من meterName وskuName على Spot.

إذا واجهت خطأ، فراجع رموز الخطأ.