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

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

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

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

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

استخدام قالب

بالنسبة إلى عمليات نشر قالب Azure Spot VM، استخدم"apiVersion": "2019-03-01" أو أحدث. أضِف الخصائص priority و evictionPolicy و billingProfile في قالبك:

"priority": "Spot",
"evictionPolicy": "Deallocate",
"billingProfile": {
    "maxPrice": -1
}

فيما يلي نموذج قالب مع خصائص مضافة لجهاز Azure Spot الظاهري. استبدل أسماء الموارد باسمك الخاص <password> وبكلمة مرور لحساب المسؤول المحلي على الجهاز الظاهري.

{
    "$schema": "http://schema.management.azure.com/schemas/2019-03-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
    },
    "variables": {
        "vnetId": "/subscriptions/ec9fcd04-e188-48b9-abfc-abcd515f1836/resourceGroups/spotVM/providers/Microsoft.Network/virtualNetworks/spotVM",
        "subnetName": "default",
        "networkInterfaceName": "spotVMNIC",
        "publicIpAddressName": "spotVM-ip",
        "publicIpAddressType": "Dynamic",
        "publicIpAddressSku": "Basic",
        "virtualMachineName": "spotVM",
        "osDiskType": "Premium_LRS",
        "virtualMachineSize": "Standard_D2s_v3",
        "adminUsername": "azureuser",
        "adminPassword": "<password>",
        "diagnosticsStorageAccountName": "diagstoragespot2019",
        "diagnosticsStorageAccountId": "Microsoft.Storage/storageAccounts/diagstoragespot2019",
        "diagnosticsStorageAccountType": "Standard_LRS",
        "diagnosticsStorageAccountKind": "Storage",
        "subnetRef": "[concat(variables('vnetId'), '/subnets/', variables('subnetName'))]"
    },
    "resources": [
        {
            "name": "spotVM",
            "type": "Microsoft.Network/networkInterfaces",
            "apiVersion": "2019-03-01",
            "location": "eastus",
            "dependsOn": [
                "[concat('Microsoft.Network/publicIpAddresses/', variables('publicIpAddressName'))]"
            ],
            "properties": {
                "ipConfigurations": [
                    {
                        "name": "ipconfig1",
                        "properties": {
                            "subnet": {
                                "id": "[variables('subnetRef')]"
                            },
                            "privateIPAllocationMethod": "Dynamic",
                            "publicIpAddress": {
                                "id": "[resourceId(resourceGroup().name, 'Microsoft.Network/publicIpAddresses', variables('publicIpAddressName'))]"
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "[variables('publicIpAddressName')]",
            "type": "Microsoft.Network/publicIpAddresses",
            "apiVersion": "2019-02-01",
            "location": "eastus",
            "properties": {
                "publicIpAllocationMethod": "[variables('publicIpAddressType')]"
            },
            "sku": {
                "name": "[variables('publicIpAddressSku')]"
            }
        },
        {
            "name": "[variables('virtualMachineName')]",
            "type": "Microsoft.Compute/virtualMachines",
            "apiVersion": "2019-03-01",
            "location": "eastus",
            "dependsOn": [
                "[concat('Microsoft.Network/networkInterfaces/', variables('networkInterfaceName'))]",
                "[concat('Microsoft.Storage/storageAccounts/', variables('diagnosticsStorageAccountName'))]"
            ],
            "properties": {
                "hardwareProfile": {
                    "vmSize": "[variables('virtualMachineSize')]"
                },
                "storageProfile": {
                    "osDisk": {
                        "createOption": "fromImage",
                        "managedDisk": {
                            "storageAccountType": "[variables('osDiskType')]"
                        }
                    },
                    "imageReference": {
                        "publisher": "Canonical",
                        "offer": "UbuntuServer",
                        "sku": "22.04-LTS",
                        "version": "latest"
                    }
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
                        }
                    ]
                },
                "osProfile": {
                    "computerName": "[variables('virtualMachineName')]",
                    "adminUsername": "[variables('adminUsername')]",
                    "adminPassword": "[variables('adminPassword')]"
                },
                "diagnosticsProfile": {
                    "bootDiagnostics": {
                        "enabled": true,
                        "storageUri": "[concat('https://', variables('diagnosticsStorageAccountName'), '.blob.core.windows.net/')]"
                    }
                },
                "priority": "Spot",
                "evictionPolicy": "Deallocate",
                "billingProfile": {
                    "maxPrice": -1
                }
            }
        },
        {
            "name": "[variables('diagnosticsStorageAccountName')]",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "location": "eastus",
            "properties": {},
            "kind": "[variables('diagnosticsStorageAccountKind')]",
            "sku": {
                "name": "[variables('diagnosticsStorageAccountType')]"
            }
        }
    ],
    "outputs": {
        "adminUsername": {
            "type": "string",
            "value": "[variables('adminUsername')]"
        }
    }
}

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

يمكنك محاكاة إخلاء جهاز Azure Spot الظاهري، لاختبار استجابة التطبيق الخاص بك للإخلاء المفاجئ.

استبدل المعلمات أدناه بمعلوماتك:

  • subscriptionId
  • resourceGroupName
  • vmName
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction?api-version=2020-06-01

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

  • يمكنك أيضا إنشاء Azure Spot VM باستخدام Azure PowerShell أو Azure CLI.
  • لمزيد من المعلومات حول التسعير الحالي ل Azure Spot VM، راجع واجهة برمجة تطبيقات أسعار التجزئة في Azure. يحتوي كل من meterName و skuName على Spot.
  • لمعرفة المزيد حول خطأ، راجع رموز الخطأ.