Dowiedz się więcej o szablonach zestawu skalowania maszyn wirtualnych
Szablony usługi Azure Resource Manager to doskonały sposób wdrażania grup powiązanych zasobów. W tej serii samouczków pokazano, jak utworzyć podstawowy szablon zestawu skalowania i jak zmodyfikować ten szablon w celu dopasowania go do różnych scenariuszy. Wszystkie przykłady pochodzą z tego repozytorium GitHub.
Ten szablon ma być prosty. Aby uzyskać więcej kompletnych przykładów szablonów zestawu skalowania, zobacz repozytorium GitHub Szablony szybkiego startu platformy Azure i wyszukaj foldery zawierające ciąg vmss
.
Jeśli znasz już tworzenie szablonów, możesz przejść do sekcji "Następne kroki", aby zobaczyć, jak zmodyfikować ten szablon.
Definiowanie $schema i contentVersion
Najpierw zdefiniuj $schema
element i contentVersion
w szablonie. Element $schema
definiuje wersję języka szablonu i jest używany do wyróżniania składni programu Visual Studio i podobnych funkcji sprawdzania poprawności. Element contentVersion
nie jest używany przez platformę Azure. Zamiast tego pomaga śledzić wersję szablonu.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
}
Definiuj parametry
Następnie zdefiniuj dwa parametry adminUsername
i adminPassword
. Parametry to wartości określone w czasie wdrażania. Parametr adminUsername
jest po prostu typem, ale ponieważ adminPassword
jest wpisem tajnymstring
, nadaj mu typ securestring
. Później te parametry są przekazywane do konfiguracji zestawu skalowania.
"parameters": {
"adminUsername": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
}
},
Definiowanie zmiennych
Szablony usługi Resource Manager umożliwiają również definiowanie zmiennych do późniejszego użycia w szablonie. W przykładzie nie są używane żadne zmienne, więc obiekt JSON jest pusty.
"variables": {},
Definiowanie zasobów
Następnie znajduje się sekcja zasobów szablonu. W tym miejscu zdefiniujesz to, co faktycznie chcesz wdrożyć. W przeciwieństwie do parameters
obiektów JSON i variables
(które są obiektami JSON), resources
jest listą obiektów JSON.
"resources": [
...
]
Wszystkie zasoby wymagają type
właściwości , name
, apiVersion
i location
. Pierwszy zasób tego przykładu ma typ Microsoft.Network/virtualNetwork, nazwę myVnet
i apiVersion 2018-11-01
. (Aby znaleźć najnowszą wersję interfejsu API dla typu zasobu, zobacz Dokumentacja szablonu usługi Azure Resource Manager).
{
"type": "Microsoft.Network/virtualNetworks",
"name": "myVnet",
"apiVersion": "2018-11-01",
}
Określanie lokalizacji
Aby określić lokalizację sieci wirtualnej, użyj funkcji szablonu usługi Resource Manager. Ta funkcja musi być ujęta w cudzysłowy i nawiasy kwadratowe w następujący sposób: "[<template-function>]"
. W tym przypadku użyj resourceGroup
funkcji . Nie przyjmuje żadnych argumentów i zwraca obiekt JSON z metadanymi dotyczącymi grupy zasobów, do których jest wdrażane wdrożenie. Grupa zasobów jest ustawiana przez użytkownika w momencie wdrażania. Ta wartość jest następnie indeksowana do tego obiektu JSON za pomocą .location
polecenia w celu pobrania lokalizacji z obiektu JSON.
"location": "[resourceGroup().location]",
Określanie właściwości sieci wirtualnej
Każdy zasób usługi Resource Manager ma własną properties
sekcję dotyczącą konfiguracji specyficznych dla zasobu. W takim przypadku określ, że sieć wirtualna powinna mieć jedną podsieć przy użyciu zakresu prywatnych adresów 10.0.0.0/16
IP. Zestaw skalowania jest zawsze zawarty w jednej podsieci. Nie może ona obejmować podsieci.
{
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"subnets": [
{
"name": "mySubnet",
"properties": {
"addressPrefix": "10.0.0.0/16"
}
}
]
}
},
Dodawanie listy dependsOn
Oprócz wymaganych type
właściwości , , name
apiVersion
i location
każdy zasób może mieć opcjonalną dependsOn
listę ciągów. Ta lista określa, które inne zasoby z tego wdrożenia muszą zakończyć się przed wdrożeniem tego zasobu.
W tym przypadku na liście znajduje się tylko jeden element — sieć wirtualna z poprzedniego przykładu. Ta zależność jest określana, ponieważ zestaw skalowania wymaga istnienia sieci przed utworzeniem jakichkolwiek maszyn wirtualnych. Dzięki temu zestaw skalowania może nadać tym maszynom wirtualnym prywatne adresy IP z zakresu adresów IP określonego wcześniej we właściwościach sieci. Format każdego ciągu na liście dependsOn to <type>/<name>
. Użyj tej samej type
i name
użytej wcześniej w definicji zasobu sieci wirtualnej.
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "myScaleSet",
"apiVersion": "2019-03-01",
"location": "[resourceGroup().location]",
"dependsOn": [
"Microsoft.Network/virtualNetworks/myVnet"
],
...
}
Określanie właściwości zestawu skalowania
Zestawy skalowania mają wiele właściwości dostosowywania maszyn wirtualnych w zestawie skalowania. Aby uzyskać pełną listę tych właściwości, zobacz dokumentację szablonu. W tym samouczku ustawiono tylko kilka często używanych właściwości.
Podaj rozmiar i pojemność maszyny wirtualnej
Zestaw skalowania musi wiedzieć, jaki rozmiar maszyny wirtualnej ma zostać utworzony ("nazwa jednostki SKU") i ile takich maszyn wirtualnych ma zostać utworzonych ("pojemność jednostki SKU"). Aby sprawdzić, które rozmiary maszyn wirtualnych są dostępne, zobacz dokumentację rozmiarów maszyn wirtualnych.
"sku": {
"name": "Standard_A1",
"capacity": 2
},
Wybierz typ aktualizacji
Zestaw skalowania musi również wiedzieć, jak obsługiwać aktualizacje w zestawie skalowania. Obecnie istnieją trzy opcje, Manual
, Rolling
i Automatic
. Aby uzyskać więcej informacji na temat różnic między nimi, zobacz dokumentację dotyczącą sposobu uaktualniania zestawu skalowania.
"properties": {
"upgradePolicy": {
"mode": "Manual"
},
}
Wybieranie systemu operacyjnego maszyny wirtualnej
Zestaw skalowania musi wiedzieć, jaki system operacyjny ma być umieszczony na maszynach wirtualnych. W tym miejscu utwórz maszyny wirtualne z w pełni poprawionym obrazem ubuntu 16.04-LTS.
"virtualMachineProfile": {
"storageProfile": {
"imageReference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "16.04-LTS",
"version": "latest"
}
},
}
Określ wartość computerNamePrefix
Zestaw skalowania wdraża wiele maszyn wirtualnych. Zamiast określać każdą nazwę maszyny wirtualnej, określ wartość computerNamePrefix
. Zestaw skalowania dołącza indeks do prefiksu dla każdej maszyny wirtualnej, więc nazwy maszyn wirtualnych mają postać <computerNamePrefix>_<auto-generated-index>
.
W poniższym fragmencie kodu użyj parametrów z poprzednich, aby ustawić nazwę użytkownika i hasło administratora dla wszystkich maszyn wirtualnych w zestawie skalowania. W tym procesie jest używana funkcja szablonu parameters
. Ta funkcja przyjmuje ciąg, który określa, który parametr ma odwoływać się do i zwraca wartość dla tego parametru.
"osProfile": {
"computerNamePrefix": "vm",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
Określanie konfiguracji sieci maszyny wirtualnej
Na koniec określ konfigurację sieci dla maszyn wirtualnych w zestawie skalowania. W takim przypadku wystarczy określić identyfikator utworzonej wcześniej podsieci. Informuje to zestaw skalowania o umieszczenie interfejsów sieciowych w tej podsieci.
Identyfikator sieci wirtualnej zawierającej podsieć można uzyskać przy użyciu funkcji szablonu resourceId
. Ta funkcja przyjmuje typ i nazwę zasobu i zwraca w pełni kwalifikowany identyfikator tego zasobu. Ten identyfikator ma formularz: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>
Jednak identyfikator sieci wirtualnej nie jest wystarczający. Podaj określoną podsieć, w których powinny znajdować się maszyny wirtualne zestawu skalowania. W tym celu połącz /subnets/mySubnet
się z identyfikatorem sieci wirtualnej. Wynikiem jest w pełni kwalifikowany identyfikator podsieci. Wykonaj to połączenie z funkcją concat
, która przyjmuje serię ciągów i zwraca ich łączenie.
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "myNic",
"properties": {
"primary": "true",
"ipConfigurations": [
{
"name": "myIpConfig",
"properties": {
"subnet": {
"id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
}
}
}
]
}
}
]
}
Następne kroki
Poprzedni szablon można wdrożyć, wykonując instrukcje opisane w dokumentacji usługi Azure Resource Manager.
Tę serię samouczków można uruchomić z artykułu podstawowego szablonu zestawu skalowania.
Możesz zobaczyć, jak zmodyfikować podstawowy szablon zestawu skalowania w celu wdrożenia zestawu skalowania w istniejącej sieci wirtualnej.
Możesz zobaczyć, jak zmodyfikować podstawowy szablon zestawu skalowania w celu wdrożenia zestawu skalowania przy użyciu obrazu niestandardowego.
Możesz zobaczyć, jak zmodyfikować podstawowy szablon zestawu skalowania w celu wdrożenia zestawu skalowania systemu Linux przy użyciu automatycznego skalowania opartego na gościu.
Aby uzyskać więcej informacji na temat zestawów skalowania, zapoznaj się ze stroną przeglądu zestawu skalowania.