Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Шаблоны Azure Resource Manager — отличный способ развертывания групп связанных ресурсов. В этой серии руководств показано, как создать шаблон простого набора масштабирования и как изменить его для различных сценариев использования. Все примеры из этого репозитория GitHub.
Этот шаблон должен быть простым. Более полные примеры шаблонов масштабируемых наборов см. в репозитории GitHub Azure Quickstart Templates и найдите папки, в названии которых содержится строка vmss.
Если вы уже знакомы с созданием шаблонов, перейдите к разделу "Дальнейшие шаги", чтобы узнать, как изменить этот шаблон.
Определите $schema и contentVersion
Сначала определите $schema и contentVersion в шаблоне. Элемент $schema определяет версию языка шаблона и используется для выделения синтаксиса Visual Studio и аналогичных функций проверки. Элемент contentVersion не используется Azure. Вместо этого он помогает отслеживать версию шаблона.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
}
Определить параметры
Затем определите два параметра adminUsername и adminPassword. Параметры — это значения, указанные во время развертывания. Параметр adminUsername имеет тип string, но поскольку adminPassword — это секрет, присвойте ему тип securestring. Затем эти параметры передаются в конфигурацию масштабируемого набора.
"parameters": {
"adminUsername": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
}
},
Определение переменных
Resource Manager шаблоны также позволяют определять переменные, которые будут использоваться позже в шаблоне. В примере не используются переменные, поэтому объект JSON пуст.
"variables": {},
Определение ресурсов
Далее — раздел ресурсов шаблона. Здесь вы указываете, что именно хотите развернуть. В отличие parameters от объектов JSON и variables (которые являются объектами JSON), resources это список объектов JSON.
"resources": [
...
]
Для всех ресурсов требуются type, nameapiVersionи location свойства. Первый ресурс этого примера имеет тип Microsoft. Network/virtualNetwork, name myVnet и apiVersion 2018-11-01. (Чтобы найти последнюю версию API для типа ресурса, см. справочник по шаблону Azure Resource Manager.)
{
"type": "Microsoft.Network/virtualNetworks",
"name": "myVnet",
"apiVersion": "2018-11-01",
}
Укажите расположение
Чтобы указать расположение виртуальной сети, используйте функцию шаблона Resource Manager. Эта функция должна быть заключена в кавычки и квадратные скобки, как показано ниже "[<template-function>]". В этом случае используйте функцию resourceGroup . Он не принимает аргументы и возвращает объект JSON с метаданными о группе ресурсов, в которой развертывается это развертывание. Группа ресурсов устанавливается пользователем во время развертывания. Затем это значение используется для индексации в этом объекте JSON с помощью .location, чтобы получить местоположение из объекта JSON.
"location": "[resourceGroup().location]",
Указание свойств виртуальной сети
Каждый ресурс Resource Manager имеет собственный раздел properties для конфигураций, относящихся к ресурсу. В этом случае укажите, что виртуальная сеть должна иметь одну подсеть с помощью диапазона 10.0.0.0/16частных IP-адресов. Набор масштабирования всегда находится в пределах одной подсети. Она не может охватывать подсети.
{
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"subnets": [
{
"name": "mySubnet",
"properties": {
"addressPrefix": "10.0.0.0/16"
}
}
]
}
},
Добавить список dependsOn
Помимо обязательных type, nameapiVersionи location свойств, каждый ресурс может иметь необязательный dependsOn список строк. Этот список указывает, развертывание каких других ресурсов из этого развертывания должно быть завершено до развертывания данного ресурса.
В этом случае в списке существует только один элемент, виртуальная сеть из предыдущего примера. Укажите эту зависимость, поскольку сеть должна существовать до создания каких-либо виртуальных машин в масштабируемом наборе. Таким образом, масштабируемый набор может предоставить этим виртуальным машинам частные IP-адреса из диапазона IP-адресов, ранее указанных в свойствах сети. Формат каждой строки в списке dependsOn: <type>/<name>. Используйте те же type и name, которые ранее использовались в определении ресурса виртуальной сети.
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "myScaleSet",
"apiVersion": "2019-03-01",
"location": "[resourceGroup().location]",
"dependsOn": [
"Microsoft.Network/virtualNetworks/myVnet"
],
...
}
Укажите свойства группы масштабирования
Масштабируемые наборы имеют множество свойств для настройки виртуальных машин в масштабируемом наборе. Полный список этих свойств см. в справочнике по шаблону. В этом руководстве задаются только несколько часто используемых свойств.
Предоставление размера и емкости виртуальной машины
Масштабируемый набор должен знать, какой размер виртуальной машины необходимо создать (имя SKU) и сколько таких виртуальных машин необходимо создать (емкость SKU). Сведения о доступных размерах виртуальных машин см. в документации по размерам виртуальных машин.
"sku": {
"name": "Standard_A1",
"capacity": 2
},
Выбор типа обновлений
Группа масштабирования также должна определять, как обрабатывать обновления группы масштабирования. В настоящее время существует три варианта: Manual, Rolling и Automatic. Дополнительные сведения о различиях между ними см. в документации о том, как обновить масштабируемый набор.
"properties": {
"upgradePolicy": {
"mode": "Manual"
},
}
Выбор операционной системы виртуальной машины
Для группы масштабирования нужно указать, какую операционную систему установить на виртуальные машины. Здесь создайте виртуальные машины с образом Ubuntu 22.04 LTS, содержащим все обновления.
"virtualMachineProfile": {
"storageProfile": {
"imageReference": {
"publisher": "Canonical",
"offer": "0001-com-ubuntu-server-jammy",
"sku": "22_04-lts",
"version": "latest"
}
},
}
Укажите computerNamePrefix
Группа масштабирования развертывает несколько виртуальных машин. Вместо указания имени каждой виртуальной машины укажите computerNamePrefix. Масштабируемый набор добавляет индекс к префиксу для каждой виртуальной машины, поэтому имена виртуальных машин имеют форму <computerNamePrefix>_<auto-generated-index>.
В следующем фрагменте кода используйте ранее указанные параметры, чтобы задать имя пользователя администратора и пароль для всех виртуальных машин в наборе масштабирования. Этот процесс использует функцию parameters шаблона. Эта функция принимает строку, указывающую, какой параметр следует ссылаться и выводит значение для этого параметра.
"osProfile": {
"computerNamePrefix": "vm",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
Указание конфигурации сети виртуальной машины
Наконец, укажите конфигурацию сети для виртуальных машин в масштабируемом наборе. В этом случае необходимо указать только идентификатор созданной ранее подсети. Это указывает набору масштабирования использовать эту подсеть для размещения сетевых интерфейсов.
Идентификатор виртуальной сети, содержащей подсеть, можно получить с помощью resourceId функции шаблона. Эта функция принимает тип и имя ресурса и возвращает полный идентификатор этого ресурса. Этот идентификатор имеет форму: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>
Однако идентификатора виртуальной сети недостаточно. Укажите конкретную подсеть, в которую должны находиться виртуальные машины масштабируемого набора. Для этого добавьте /subnets/mySubnet к идентификатору виртуальной сети. Результатом является полный идентификатор подсети. Выполните это объединение с concat функцией, которая принимает ряд строк и возвращает их объединение.
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "myNic",
"properties": {
"primary": "true",
"ipConfigurations": [
{
"name": "myIpConfig",
"properties": {
"subnet": {
"id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
}
}
}
]
}
}
]
}
Дальнейшие действия
Предыдущий шаблон можно развернуть, следуя документации Azure Resource Manager.
Вы можете начать знакомство с этой серией руководств со статьи о базовом шаблоне масштабируемого набора.
Вы можете увидеть, как изменить базовый шаблон масштабируемого набора для развертывания масштабируемого набора в существующей виртуальной сети.
Вы можете увидеть, как изменить шаблон базового масштабируемого набора для развертывания масштабируемого набора с помощью пользовательского образа.
Здесь показано, как изменить базовый шаблон масштабируемого набора, чтобы развернуть масштабируемый набор виртуальных машин Linux с гостевым автомасштабированием.
Дополнительные сведения о масштабируемых наборах см. на странице обзора масштабируемых наборов.