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

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

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

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

لديك خيار لتعيين الحد الأقصى للسعر الذي ترغب في دفعه، لكل ساعة، للجهاز الظاهري. يمكن تعيين الحد الأقصى لسعر جهاز Azure Spot الظاهري بالدولار الأمريكي (USD)، باستخدام ما يصل إلى خمسة منازل عشرية. على سبيل المثال، ستكون القيمة 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

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