Поделиться через


Использование шаблонов управляемых дисков виртуальной машины

В этой статье описаны различия между управляемыми и неуправляемыми дисками при использовании шаблонов Azure Resource Manager для подготовки виртуальных машин в Azure Stack Hub. Эти примеры помогают преобразовать существующие шаблоны, использующие неуправляемые диски, в управляемые диски.

Форматирование шаблона неуправляемых дисков

Сначала рассмотрим, как развертываются неуправляемые диски. При создании неуправляемых дисков необходима учетная запись хранения для хранения файлов VHD-файлов. Можно создать новую учетную запись хранения или использовать существующую. Создайте ресурс учетной записи хранения в блоке resources шаблона следующим образом:

{
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2017-10-01",
    "name": "[variables('storageAccountName')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "Standard_LRS"
    },
    "kind": "Storage"
}

В объект виртуальной машины добавьте зависимость от учетной записи хранения, чтобы гарантировать, что она будет создана до виртуальной машины. В разделе storageProfile укажите полный универсальный код ресурса (URI) расположения VHD, который ссылается на учетную запись хранения и требуется для диска ОС и дисков данных. В следующем примере создается один диск ОС из образа и один пустой диск данных размером 1023 ГБ:

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "name": "osdisk",
                "vhd": {
                    "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob, 'vhds/osdisk.vhd')]"
                },
                "caching": "ReadWrite",
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "name": "datadisk1",
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "vhd": {
                        "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob, 'vhds/datadisk1.vhd')]"
                    },
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Формат шаблона с управляемыми дисками

При использовании управляемых дисков Azure диск становится ресурсом верхнего уровня и больше не требует создания учетной записи хранения пользователем. Управляемые диски впервые появились в 2017-03-30 версии API. В следующих разделах описаны параметры по умолчанию и объясняется, как настроить диски.

Параметры управляемого диска по умолчанию

Чтобы создать виртуальную машину с управляемыми дисками, вам больше не нужно создавать ресурс учетной записи хранения. В приведенном ниже примере шаблона есть некоторые отличия от предыдущих примеров неуправляемых дисков:

  • apiVersion— это версия для типа ресурса virtualMachines, который поддерживает управляемые диски.
  • osDisk и dataDisks больше не ссылаются на конкретный URI для VHD.
  • При развертывании без указания дополнительных свойств диск использует тип хранилища в зависимости от размера виртуальной машины. Например, если используется размер виртуальной машины, поддерживающий хранилище класса Premium (размеры с "s" в имени, например Standard_DS2_v2), то диски класса Premium будут настроены по умолчанию. Вы можете изменить это, используя настройку SKU на диске, чтобы указать тип хранилища.
  • Если имя для диска не указано, он принимает формат <VMName>_OsDisk_1_<randomstring> для диска ОС и <VMName>_disk<#>_<randomstring> для каждого диска с данными.
    • Если виртуальная машина создается из пользовательского образа, параметры по умолчанию для типа учетной записи хранения и имени диска извлекаются из свойств диска, определенных в ресурсе пользовательского образа. Их можно переопределить, указав для них значения в шаблоне.
  • По умолчанию кэширование диска выполняется для чтения и записи для диска ОС, а для дисков данных — нет .
  • В следующем примере по-прежнему существует зависимость учетной записи хранения, хотя она используется только для хранения диагностика и не требуется для дискового хранилища:
{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Использование ресурса управляемого диска верхнего уровня

В качестве альтернативы указанию конфигурации дисков в объекте виртуальной машины можно создать ресурс диска верхнего уровня и подключить его при создании виртуальной машины. Обязательно используйте 2017-03-30 в disks качестве версии API ресурса. Например, можно создать дисковый ресурс, как показано ниже, и использовать его в качестве диска данных. В этом примере vmName используется как часть имени диска:

{
    "type": "Microsoft.Compute/disks",
    "apiVersion": "2017-03-30",
    "name": "[concat(variables('vmName'),'-datadisk1')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "Standard_LRS"
    },
    "properties": {
        "creationData": {
            "createOption": "Empty"
        },
        "diskSizeGB": 1023
    }
}

Затем в объекте виртуальной машины укажите ссылку на него, чтобы подключить этот объект диска. Указав идентификатор ресурса созданного управляемого диска в свойстве managedDisk, можно подключить этот диск при создании виртуальной машины. Для параметра apiVersion ресурса виртуальной машины задано значение 2017-12-01. Добавляется зависимость от дискового ресурса, чтобы убедиться, что он успешно создан перед созданием виртуальной машины:

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]",
        "[resourceId('Microsoft.Compute/disks/', concat(variables('vmName'),'-datadisk1'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "lun": 0,
                    "name": "[concat(variables('vmName'),'-datadisk1')]",
                    "createOption": "attach",
                    "managedDisk": {
                        "id": "[resourceId('Microsoft.Compute/disks/', concat(variables('vmName'),'-datadisk1'))]"
                    }
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Создание управляемых групп доступности с виртуальными машинами, использующими управляемые диски

Чтобы создать управляемые группы доступности с виртуальными машинами, использующими управляемые диски, добавьте объект sku в ресурс группы доступности и задайте для свойства name значение Aligned. Это свойство гарантирует, что диски каждой виртуальной машины будут достаточно изолированы друг от друга, чтобы избежать образования единых точек отказа. Также обратите внимание, что apiVersion для ресурса группы доступности задано значение 2017-12-01:

{
    "type": "Microsoft.Compute/availabilitySets",
    "apiVersion": "2017-12-01",
    "location": "[resourceGroup().location]",
    "name": "[variables('avSetName')]",
    "properties": {
        "PlatformUpdateDomainCount": 1,
        "PlatformFaultDomainCount": 2
    },
    "sku": {
        "name": "Aligned"
    }
}

Дальнейшие действия