Rövid útmutató: Windows rendszerű virtuálisgép-méretezési csoport létrehozása ARM-sablonnal
A következőkre vonatkozik: ✔️ Windows rendszerű virtuális gépek egységes méretezési ✔️ csoportjai
Feljegyzés
Az alábbi cikk az egységes virtuálisgép-méretezési csoportokról szól. Javasoljuk, hogy rugalmas virtuálisgép-méretezési csoportokat használjunk új számítási feladatokhoz. További információ erről az új vezénylési módról a rugalmas virtuálisgép-méretezési csoportok áttekintésében.
A virtuálisgép-méretezési csoportok segítségével automatikusan skálázható virtuális gépeket helyezhet üzembe és kezelhet. A méretezési csoportban lévő virtuális gépek számát beállíthatja manuálisan, de automatikus méretezési szabályokat is megadhat az erőforrás-használat (például processzorhasználat, memóriaigény vagy hálózati forgalom) alapján. Egy Azure-terheléselosztó ezután elosztja a forgalmat a méretezési csoportban lévő virtuálisgép-példányok között. Ebben a rövid útmutatóban létrehoz egy virtuálisgép-méretezési csoportot, és üzembe helyez egy mintaalkalmazást egy Azure Resource Manager-sablonnal (ARM-sablonnal).
Az Azure Resource Manager-sablon egy JavaScript Object Notation (JSON) fájl, amely meghatározza a projekt infrastruktúráját és konfigurációját. A sablon deklaratív szintaxist használ. Az üzembe helyezés létrehozásához szükséges programozási parancsok sorozatának megírása nélkül írhatja le a tervezett üzembe helyezést.
Az ARM-sablonok lehetővé teszik a kapcsolódó erőforrások csoportjainak üzembe helyezését. Egyetlen sablonban létrehozhatja a virtuálisgép-méretezési csoportot, telepítheti az alkalmazásokat, és konfigurálhatja az automatikus méretezési szabályokat. Különféle változók és paraméterek segítségével a sablon többször is felhasználható meglévő méretezési csoportok frissítésére vagy újabbak létrehozására. Sablonokat az Azure Portalon, az Azure CLI-n, az Azure PowerShellen vagy a folyamatos integrációs/folyamatos kézbesítési (CI/CD) folyamatokon keresztül helyezhet üzembe.
Ha a környezet megfelel az előfeltételeknek, és már ismeri az ARM-sablonokat, kattintson az Üzembe helyezés az Azure-ban gombra. A sablon az Azure Portalon fog megnyílni.
Előfeltételek
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
A sablon áttekintése
Az ebben a gyorsútmutatóban használt sablon az Azure gyorsindítási sablontárból származik.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.25.53.49325",
"templateHash": "9083237914224042883"
}
},
"parameters": {
"vmssName": {
"type": "string",
"minLength": 3,
"maxLength": 61,
"metadata": {
"description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended."
}
},
"vmSku": {
"type": "string",
"defaultValue": "Standard_D2s_v3",
"metadata": {
"description": "Size of VMs in the VM Scale Set."
}
},
"windowsOSVersion": {
"type": "string",
"defaultValue": "2022-datacenter-azure-edition",
"allowedValues": [
"2019-DataCenter-GenSecond",
"2016-DataCenter-GenSecond",
"2022-datacenter-azure-edition"
],
"metadata": {
"description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version. Allowed values: 2008-R2-SP1, 2012-Datacenter, 2012-R2-Datacenter & 2016-Datacenter, 2019-Datacenter."
}
},
"securityType": {
"type": "string",
"defaultValue": "TrustedLaunch",
"allowedValues": [
"Standard",
"TrustedLaunch"
],
"metadata": {
"description": "Security Type of the Virtual Machine."
}
},
"instanceCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 100,
"metadata": {
"description": "Number of VM instances (100 or less)."
}
},
"singlePlacementGroup": {
"type": "bool",
"defaultValue": true,
"metadata": {
"description": "When true this limits the scale set to a single placement group, of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to false. However, if singlePlacementGroup is false, it may not be modified to true."
}
},
"adminUsername": {
"type": "string",
"defaultValue": "vmssadmin",
"metadata": {
"description": "Admin username on all VMs."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Admin password on all VMs."
}
},
"_artifactsLocation": {
"type": "string",
"defaultValue": "[deployment().properties.templateLink.uri]",
"metadata": {
"description": "The base URI where artifacts required by this template are located. For example, if stored on a public GitHub repo, you'd use the following URI: https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-windows-webapp-dsc-autoscale/."
}
},
"_artifactsLocationSasToken": {
"type": "securestring",
"defaultValue": "",
"metadata": {
"description": "The sasToken required to access _artifactsLocation. If your artifacts are stored on a public repo or public storage account you can leave this blank."
}
},
"powershelldscZip": {
"type": "string",
"defaultValue": "DSC/InstallIIS.zip",
"metadata": {
"description": "Location of the PowerShell DSC zip file relative to the URI specified in the _artifactsLocation, i.e. DSC/IISInstall.ps1.zip"
}
},
"webDeployPackage": {
"type": "string",
"defaultValue": "WebDeploy/DefaultASPWebApp.v1.0.zip",
"metadata": {
"description": "Location of the of the WebDeploy package zip file relative to the URI specified in _artifactsLocation, i.e. WebDeploy/DefaultASPWebApp.v1.0.zip"
}
},
"powershelldscUpdateTagVersion": {
"type": "string",
"defaultValue": "1.0",
"metadata": {
"description": "Version number of the DSC deployment. Changing this value on subsequent deployments will trigger the extension to run."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"platformFaultDomainCount": {
"type": "int",
"defaultValue": 1,
"metadata": {
"description": "Fault Domain count for each placement group."
}
}
},
"variables": {
"vmScaleSetName": "[toLower(substring(format('vmssName{0}', uniqueString(resourceGroup().id)), 0, 9))]",
"longvmScaleSet": "[toLower(parameters('vmssName'))]",
"addressPrefix": "10.0.0.0/16",
"subnetPrefix": "10.0.0.0/24",
"vNetName": "[format('{0}vnet', variables('vmScaleSetName'))]",
"publicIPAddressName": "[format('{0}pip', variables('vmScaleSetName'))]",
"subnetName": "[format('{0}subnet', variables('vmScaleSetName'))]",
"loadBalancerName": "[format('{0}lb', variables('vmScaleSetName'))]",
"publicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]",
"lbProbeID": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('loadBalancerName'), 'tcpProbe')]",
"natPoolName": "[format('{0}natpool', variables('vmScaleSetName'))]",
"bePoolName": "[format('{0}bepool', variables('vmScaleSetName'))]",
"lbPoolID": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerName'), variables('bePoolName'))]",
"natStartPort": 50000,
"natEndPort": 50119,
"natBackendPort": 3389,
"nicName": "[format('{0}nic', variables('vmScaleSetName'))]",
"ipConfigName": "[format('{0}ipconfig', variables('vmScaleSetName'))]",
"frontEndIPConfigID": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('loadBalancerName'), 'loadBalancerFrontEnd')]",
"osType": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "[parameters('windowsOSVersion')]",
"version": "latest"
},
"securityProfileJson": {
"uefiSettings": {
"secureBootEnabled": true,
"vTpmEnabled": true
},
"securityType": "[parameters('securityType')]"
},
"imageReference": "[variables('osType')]",
"webDeployPackageFullPath": "[uri(parameters('_artifactsLocation'), format('{0}{1}', parameters('webDeployPackage'), parameters('_artifactsLocationSasToken')))]",
"powershelldscZipFullPath": "[uri(parameters('_artifactsLocation'), format('{0}{1}', parameters('powershelldscZip'), parameters('_artifactsLocationSasToken')))]"
},
"resources": [
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2023-04-01",
"name": "[variables('loadBalancerName')]",
"location": "[parameters('location')]",
"properties": {
"frontendIPConfigurations": [
{
"name": "LoadBalancerFrontEnd",
"properties": {
"publicIPAddress": {
"id": "[variables('publicIPAddressID')]"
}
}
}
],
"backendAddressPools": [
{
"name": "[variables('bePoolName')]"
}
],
"inboundNatPools": [
{
"name": "[variables('natPoolName')]",
"properties": {
"frontendIPConfiguration": {
"id": "[variables('frontEndIPConfigID')]"
},
"protocol": "Tcp",
"frontendPortRangeStart": "[variables('natStartPort')]",
"frontendPortRangeEnd": "[variables('natEndPort')]",
"backendPort": "[variables('natBackendPort')]"
}
}
],
"loadBalancingRules": [
{
"name": "LBRule",
"properties": {
"frontendIPConfiguration": {
"id": "[variables('frontEndIPConfigID')]"
},
"backendAddressPool": {
"id": "[variables('lbPoolID')]"
},
"protocol": "Tcp",
"frontendPort": 80,
"backendPort": 80,
"enableFloatingIP": false,
"idleTimeoutInMinutes": 5,
"probe": {
"id": "[variables('lbProbeID')]"
}
}
}
],
"probes": [
{
"name": "tcpProbe",
"properties": {
"protocol": "Tcp",
"port": 80,
"intervalInSeconds": 5,
"numberOfProbes": 2
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]"
]
},
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2023-09-01",
"name": "[variables('vmScaleSetName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('vmSku')]",
"tier": "Standard",
"capacity": "[parameters('instanceCount')]"
},
"properties": {
"overprovision": true,
"upgradePolicy": {
"mode": "Automatic"
},
"singlePlacementGroup": "[parameters('singlePlacementGroup')]",
"platformFaultDomainCount": "[parameters('platformFaultDomainCount')]",
"virtualMachineProfile": {
"storageProfile": {
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage"
},
"imageReference": "[variables('imageReference')]"
},
"osProfile": {
"computerNamePrefix": "[variables('vmScaleSetName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"securityProfile": "[if(equals(parameters('securityType'), 'TrustedLaunch'), variables('securityProfileJson'), null())]",
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "[variables('nicName')]",
"properties": {
"primary": true,
"ipConfigurations": [
{
"name": "[variables('ipConfigName')]",
"properties": {
"subnet": {
"id": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-04-01').subnets[0].id]"
},
"loadBalancerBackendAddressPools": [
{
"id": "[variables('lbPoolID')]"
}
]
}
}
]
}
}
]
},
"extensionProfile": {
"extensions": [
{
"name": "Microsoft.Powershell.DSC",
"properties": {
"publisher": "Microsoft.Powershell",
"type": "DSC",
"typeHandlerVersion": "2.9",
"autoUpgradeMinorVersion": true,
"forceUpdateTag": "[parameters('powershelldscUpdateTagVersion')]",
"settings": {
"configuration": {
"url": "[variables('powershelldscZipFullPath')]",
"script": "InstallIIS.ps1",
"function": "InstallIIS"
},
"configurationArguments": {
"nodeName": "localhost",
"WebDeployPackagePath": "[variables('webDeployPackageFullPath')]"
}
}
}
}
]
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]"
]
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2023-04-01",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "Static",
"dnsSettings": {
"domainNameLabel": "[variables('longvmScaleSet')]"
}
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2023-04-01",
"name": "[variables('vNetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('addressPrefix')]"
]
},
"subnets": [
{
"name": "[variables('subnetName')]",
"properties": {
"addressPrefix": "[variables('subnetPrefix')]"
}
}
]
}
},
{
"type": "Microsoft.Insights/autoscalesettings",
"apiVersion": "2022-10-01",
"name": "autoscalehost",
"location": "[parameters('location')]",
"properties": {
"name": "autoscalehost",
"targetResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]",
"enabled": true,
"profiles": [
{
"name": "Profile1",
"capacity": {
"minimum": "1",
"maximum": "10",
"default": "1"
},
"rules": [
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT5M",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": 50
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
},
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT5M",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": 30
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
]
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('vmScaleSetName'))]"
]
}
],
"outputs": {
"applicationUrl": {
"type": "string",
"value": "[uri(format('http://{0}', reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName')), '2023-04-01').dnsSettings.fqdn), '/MyApp')]"
}
}
}
Ezek az erőforrások az alábbi sablonokban vannak definiálva:
- Microsoft.Network/virtualNetworks
- Microsoft.Network/publicIPAddresses
- Microsoft.Network/loadBalancers
- Microsoft.Compute/virtualMachineScaleSets
- Microsoft. Elemzések/automatikus skálázás Gépház
Méretezési csoport meghatározása
Méretezési csoport sablon alapján való létrehozásához definiálnia kell a megfelelő erőforrásokat. A virtuálisgép-méretezési csoport erőforrástípusának alapvető részei a következők:
Tulajdonság | A tulajdonság leírása | Példa sablonérték |
---|---|---|
típus | A létrehozandó Azure-erőforrástípus | Microsoft.Compute/virtualMachineScaleSets |
név | A méretezési csoport neve | myScaleSet |
hely | A méretezési csoport létrehozásának helye | USA keleti régiója |
sku.name | A méretezési csoport egyes példányainak virtuálisgép-mérete | Standard_A1 |
sku.capacity | Az először létrehozandó virtuálisgép-példányok száma | 2 |
upgradePolicy.mode | A virtuálisgép-példányok frissítésének módja módosítás esetén | Automatikus |
imageReference | A virtuálisgép-példányokhoz használandó platform vagy egyéni rendszerkép | Microsoft Windows Server 2016 Datacenter |
osProfile.computerNamePrefix | Az egyes virtuálisgép-példányokhoz tartozó név előtagja | myvmss |
osProfile.adminUsername | Az egyes virtuálisgép-példányokhoz tartozó felhasználónév | azureuser |
osProfile.adminPassword | Az egyes virtuálisgép-példányokhoz tartozó jelszó | P@ssw0rd! |
A méretezési csoport sablonjának testreszabásához módosíthatja a virtuális gép méretét vagy a kezdeti kapacitást. Másik lehetőség egy másik platform vagy egyéni rendszerkép használata.
Mintaalkalmazás hozzáadása
A méretezési csoport teszteléséhez telepítsen egy alapszintű webalkalmazást. A méretezési csoportok üzembe helyezésekor a virtuálisgép-bővítményekkel biztosíthatóak az üzembe helyezést követő konfigurációs és automatizálási feladatok, például az alkalmazások telepítése. A szkriptek az Azure Storage-ből vagy a GitHubról tölthetők le, illetve megadhatók az Azure Portalon a bővítmény futásidejében. Ha alkalmazni szeretné valamelyik bővítményt a méretezési csoportra, egészítse ki az erőforrás előző példáját az extensionProfile szakasszal. A bővítményprofil általában az alábbi tulajdonságokat határozza meg:
- Bővítmény típusa
- Bővítmény kiadója
- Bővítmény verziója
- A konfigurációs vagy telepítési szkriptek helye
- A virtuálisgép-példányokon végrehajtandó parancsok
A sablon a PowerShell DSC-bővítményt használja egy IIS-ben futó ASP.NET MVC-alkalmazás telepítéséhez.
Letölt egy telepítő szkriptet a GitHubról – ez az url beállításban van definiálva. A bővítmény ezután futtatja az InstallIIS függvényt az IISInstall.ps1 szkriptből a function és a Script beállításoknak megfelelően. Maga az ASP.NET alkalmazás webes telepítési csomagként érhető el, amely szintén a GitHubról lesz letöltve a WebDeployPackagePath argumentumnak megfelelően:
A sablon üzembe helyezése
A sablon üzembe helyezéséhez válassza az Üzembe helyezés az Azure-ban gombot. A gomb megnyomására megnyílik az Azure Portal, betöltődik a teljes sablon, és a rendszer néhány paraméter megadását kéri (például a méretezési csomag neve, a példányok száma és a rendszergazdai hitelesítő adatok).
Resource Manager-sablont is üzembe helyezhet az Azure PowerShell használatával:
# Create a resource group
New-AzResourceGroup -Name myResourceGroup -Location EastUS
# Deploy template into resource group
New-AzResourceGroupDeployment `
-ResourceGroupName myResourceGroup `
-TemplateURI https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/demos/vmss-windows-webapp-dsc-autoscale/azuredeploy.json
# Update the scale set and apply the extension
Update-AzVmss `
-ResourceGroupName myResourceGroup `
-VmScaleSetName myVMSS `
-VirtualMachineScaleSet $vmssConfig
A kérdések megválaszolásával adja meg a méretezési csoport nevét és a virtuálisgép-példányok rendszergazdai hitelesítő adatait. A méretezési csoport létrehozása és a bővítmény alkalmazása az alkalmazás konfigurálásához 10–15 percet is igénybe vehet.
Az üzembe helyezés ellenőrzése
Ha ellenőrizni szeretné, hogyan működik a méretezési csoport, lépjen egy böngészőben a mintául szolgáló webalkalmazáshoz. Szerezze be a terheléselosztó nyilvános IP-címét a Get-AzPublicIpAddress szolgáltatással az alábbiak szerint:
Get-AzPublicIpAddress -ResourceGroupName myResourceGroup | Select IpAddress
Adja meg a terheléselosztó nyilvános IP-címét egy böngészőben a következő formátumban: http://publicIpAddress/MyApp. A terheléselosztó az egyik virtuálisgép-példányra terjeszti a forgalmat, ahogy az a következő példában látható:
Az erőforrások eltávolítása
Ha már nincs rá szükség, a Remove-AzResourceGroup használatával eltávolíthatja az erőforráscsoportot, a méretezési csoportot. A -Force
paraméter megerősíti, hogy további kérdés nélkül szeretné törölni az erőforrásokat. A -AsJob
paraméter visszaadja a vezérlést a parancssornak, és nem várja meg a művelet befejeztét.
Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob
Következő lépések
Ebben a rövid útmutatóban létrehozott egy Windows-méretezési csoportot egy ARM-sablonnal, és a PowerShell DSC-bővítmény használatával telepített egy alapszintű ASP.NET alkalmazást a virtuálisgép-példányokra. További információkért folytassa az Azure-beli virtuálisgép-méretezési csoportok létrehozásával és kezelésével kapcsolatos oktatóanyagot.