Использование дисков в шаблонах Azure Resource Manager

Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Универсальные масштабируемые наборы

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

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

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

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

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

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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" диск становится ресурсом верхнего уровня и для него больше не требуется учетная запись хранения, созданная пользователем. Управляемые диски впервые были представлены в версии API 2016-04-30-preview. Они доступны во всех последующих версиях API и теперь являются типом диска по умолчанию. В следующих разделах рассматриваются параметры по умолчанию и описывается дальнейшая настройка дисков.

Примечание

Рекомендуем использовать более позднюю версию API, чем 2016-04-30-preview, так как между версиями 2016-04-30-preview и 2017-03-30 были внесены критически важные изменения.

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

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

  • Версия apiVersion поддерживает управляемые диски.
  • osDisk и dataDisks больше не ссылаются на конкретный URI для VHD.
  • При развертывании без указания дополнительных свойств диск будет использовать тип хранилища в зависимости от размера виртуальной машины. Например, если вы используете размер виртуальной машины, который поддерживает хранилище премиум-класса (размеры с буквой "s" в названии, например Standard_D2s_v3), то диски премиум-класса будут настроены по умолчанию. Вы можете изменить это, используя настройку SKU на диске, чтобы указать тип хранилища.
  • Если имя для диска не указано, он принимает формат <VMName>_OsDisk_1_<randomstring> для диска ОС и <VMName>_disk<#>_<randomstring> для каждого диска с данными.
    • Если виртуальная машина создается из настраиваемого образа, то параметры по умолчанию для типа учетной записи хранения и имени диска извлекаются из свойств диска, определенных в ресурсе настраиваемого образа. Их можно переопределить, указав для них значения в шаблоне.
  • По умолчанию шифрование диска Azure отключено.
  • По умолчанию дисковое кэширование — чтение/запись для диска ОС и "Нет" для дисков данных.
  • В приведенном ниже примере все еще существует зависимость учетной записи хранения, хотя она предназначена только для хранения диагностических данных и не требуется для дискового хранилища.
{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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": {...}
    }
}

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

В качестве альтернативы указанию конфигурации дисков в объекте виртуальной машины можно создать ресурс диска верхнего уровня и подключить его при создании виртуальной машины. Например, можно создать дисковый ресурс, как показано ниже, и использовать его в качестве диска данных.

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

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

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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 ресурса группы доступности задано значение 2018-10-01.

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

Диски SSD категории "Стандартный"

Ниже приведены параметры, которые необходимо указать в шаблоне Resource Manager для создания дисков SSD категории "Стандартный".

  • Для apiVersion для Microsoft.Compute нужно задать значение 2018-04-01 (или более позднюю версию).
  • Укажите для параметра managedDisk.storageAccountType значение StandardSSD_LRS.

В следующем примере показан раздел properties.storageProfile.osDisk для виртуальной машины, которая использует диски SSD категории "Стандартный".

"osDisk": {
    "osType": "Windows",
    "name": "myOsDisk",
    "caching": "ReadWrite",
    "createOption": "FromImage",
    "managedDisk": {
        "storageAccountType": "StandardSSD_LRS"
    }
}

Полный пример создания диска SSD категории "Стандартный" с помощью шаблона приведен в разделе Create a Virtual Machine from a Windows Image with multiple empty Standard SSD Data Disks (Создание виртуальной машины из образа Windows с помощью дисков данных SSD категории "Стандартный").

Дополнительные сценарии и настройки

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

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