Udostępnij za pośrednictwem


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 walidacji. 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",
}

Definiowanie parametrów

Następnie zdefiniuj dwa parametry adminUsername i adminPassword. Parametry to wartości określone w momencie wdrożenia. 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 Resource Manager umożliwiają również definiowanie zmiennych do późniejszego użycia w szablonie. Przykład nie używa żadnych zmiennych, więc obiekt JSON jest pusty.

  "variables": {},

Definiowanie zasobów

Następnie znajduje się sekcja zasobów szablonu. W tym miejscu zdefiniujesz elementy, które 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ą typewłaściwości , name, apiVersioni location . Pierwszy zasób tego przykładu ma typ Microsoft.Network/virtualNetwork, nazwę myVneti apiVersion 2018-11-01. (Aby znaleźć najnowszą wersję interfejsu API dla typu zasobu, zobacz dokumentację szablonu usługi Azure Resource Manager).

{
  "type": "Microsoft.Network/virtualNetworks",
  "name": "myVnet",
  "apiVersion": "2018-11-01",
}

Określ lokalizację

Aby określić lokalizację sieci wirtualnej, użyj funkcji szablonu 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 wdrożenia. Ta wartość jest następnie indeksowana do tego obiektu JSON za pomocą polecenia .location w celu pobrania lokalizacji z obiektu JSON.

  "location": "[resourceGroup().location]",

Określanie właściwości sieci wirtualnej

Każdy zasób Resource Manager ma własną properties sekcję konfiguracji specyficznych dla zasobu. W takim przypadku określ, że sieć wirtualna powinna mieć jedną podsieć przy użyciu prywatnego zakresu adresów 10.0.0.0/16IP. 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 typewłaściwości , , nameapiVersioni 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, aby sieć istniała przed utworzeniem jakichkolwiek maszyn wirtualnych. W ten sposób 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 tego samego type i name użytego 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 najczęściej 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
  },

Wybieranie typu aktualizacji

Zestaw skalowania musi również wiedzieć, jak obsługiwać aktualizacje w zestawie skalowania. Obecnie istnieją trzy opcje, Manuali RollingAutomatic. 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 zostać 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 computerNamePrefixwartość . 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 administratora i hasło dla wszystkich maszyn wirtualnych w zestawie skalowania. Ten proces używa funkcji szablonu parameters . Ta funkcja przyjmuje ciąg określający, który parametr ma odwoływać się do tego parametru i zwraca wartość 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 wystarczy. Podaj konkretną podsieć, w którą powinny znajdować się maszyny wirtualne zestawu skalowania. W tym celu połącz /subnets/mySubnet identyfikator 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 szablonu podstawowego zestawu skalowania.

Zobaczysz, jak zmodyfikować szablon podstawowego zestawu skalowania w celu wdrożenia zestawu skalowania w istniejącej sieci wirtualnej.

Zobaczysz, jak zmodyfikować szablon podstawowego 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, zobacz stronę przeglądu zestawu skalowania.