Dela via


Etablering av sekvenstillägg i VM-skalningsuppsättningar

Tillägg för virtuella Azure-datorer ger funktioner som konfiguration och hantering efter distributionen, övervakning, säkerhet med mera. Produktionsdistributioner använder vanligtvis en kombination av flera tillägg som konfigurerats för de virtuella datorinstanserna för att uppnå önskat resultat.

När du använder flera tillägg på en virtuell dator är det viktigt att se till att tillägg som kräver samma OS-resurser inte försöker hämta dessa resurser samtidigt. Vissa tillägg är också beroende av andra tillägg för att tillhandahålla nödvändiga konfigurationer, till exempel miljöinställningar och hemligheter. Utan rätt ordning och sekvensering på plats kan beroende tilläggsdistributioner misslyckas.

Den här artikeln beskriver hur du kan sekvenstillägg som ska konfigureras för de virtuella datorinstanserna i VM-skalningsuppsättningar.

Förutsättningar

Den här artikeln förutsätter att du är bekant med:

  • Tillägg för virtuella Azure-datorer
  • Ändra vm-skalningsuppsättningar

När tilläggssekvensering ska användas

Sekvenseringstillägg i inte obligatoriskt för skalningsuppsättningar, och om det inte anges kan tillägg etableras på en skalningsuppsättningsinstans i valfri ordning.

Om din skalningsuppsättningsmodell till exempel har två tillägg – ExtensionA och ExtensionB – angivna i modellen kan någon av följande etableringssekvenser inträffa:

  • ExtensionA –> ExtensionB
  • ExtensionB –> ExtensionA

Om ditt program kräver att tillägg A alltid etableras före tillägg B bör du använda tilläggssekvensering enligt beskrivningen i den här artikeln. Med tilläggssekvensering sker nu endast en sekvens:

  • ExtensionA – > ExtensionB

Tillägg som inte anges i en definierad etableringssekvens kan etableras när som helst, inklusive före, efter eller under en definierad sekvens. Tilläggssekvensering anger bara att ett specifikt tillägg ska etableras efter ett annat specifikt tillägg. Det påverkar inte etableringen av något annat tillägg som definierats i modellen.

Om din skalningsuppsättningsmodell till exempel har tre tillägg – tillägg A, tillägg B och tillägg C – som anges i modellen och tillägg C är inställt på att etableras efter tillägg A, kan någon av följande etableringssekvenser inträffa:

  • ExtensionA –> ExtensionC –> ExtensionB
  • ExtensionB –> ExtensionA –> ExtensionC
  • ExtensionA –> ExtensionB –> ExtensionC

Om du behöver se till att inget annat tillägg etableras medan den definierade tilläggssekvensen körs rekommenderar vi att du sekvenserar alla tillägg i skalningsuppsättningsmodellen. I exemplet ovan kan tillägg B ställas in så att det etableras efter tillägg C så att endast en sekvens kan inträffa:

  • ExtensionA –> ExtensionC –> ExtensionB

Så här använder du tilläggssekvensering

Om du vill sekvensera tilläggsetablering måste du uppdatera tilläggsdefinitionen i skalningsuppsättningsmodellen så att den innehåller egenskapen "provisionAfterExtensions", som accepterar en matris med tilläggsnamn. Tilläggen som anges i egenskapsmatrisvärdet måste vara helt definierade i skalningsuppsättningsmodellen.

Malldistribution

I följande exempel definieras en mall där skalningsuppsättningen har tre tillägg – ExtensionA, ExtensionB och ExtensionC – så att tillägg etableras i ordningen:

  • ExtensionA –> ExtensionB –> ExtensionC
"virtualMachineProfile": {
  "extensionProfile": {
    "extensions": [
      {
        "name": "ExtensionA",
        "properties": {
          "publisher": "ExtensionA.Publisher",
          "settings": {},
          "typeHandlerVersion": "1.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionA"
        }
      },
      {
        "name": "ExtensionB",
        "properties": {
          "provisionAfterExtensions": [
            "ExtensionA"
          ],
          "publisher": "ExtensionB.Publisher",
          "settings": {},
          "typeHandlerVersion": "2.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionB"
        }
      }, 
      {
        "name": "ExtensionC",
        "properties": {
          "provisionAfterExtensions": [
            "ExtensionB"
          ],
          "publisher": "ExtensionC.Publisher",
          "settings": {},
          "typeHandlerVersion": "3.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionC"                   
        }
      }
    ]
  }
}

Eftersom egenskapen "provisionAfterExtensions" accepterar en matris med tilläggsnamn kan exemplet ovan ändras så att ExtensionC etableras efter ExtensionA och ExtensionB, men ingen beställning krävs mellan ExtensionA och ExtensionB. Följande mall kan användas för att uppnå det här scenariot:

"virtualMachineProfile": {
  "extensionProfile": {
    "extensions": [
      {
        "name": "ExtensionA",
        "properties": {
          "publisher": "ExtensionA.Publisher",
          "settings": {},
          "typeHandlerVersion": "1.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionA"
        }
      },
      {
        "name": "ExtensionB",
        "properties": {
          "publisher": "ExtensionB.Publisher",
          "settings": {},
          "typeHandlerVersion": "2.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionB"
        }
      }, 
      {
        "name": "ExtensionC",
        "properties": {
          "provisionAfterExtensions": [
            "ExtensionA","ExtensionB"
          ],
          "publisher": "ExtensionC.Publisher",
          "settings": {},
          "typeHandlerVersion": "3.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionC"                   
        }
      }
    ]
  }
}

REST-API

I följande exempel läggs ett nytt tillägg med namnet ExtensionC till en skalningsuppsättningsmodell. ExtensionC har beroenden för ExtensionA och ExtensionB, som redan har definierats i skalningsuppsättningsmodellen.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/ExtensionC?api-version=2018-10-01`
{ 
  "name": "ExtensionC",
  "properties": {
    "provisionAfterExtensions": [
      "ExtensionA","ExtensionB"
    ],
    "publisher": "ExtensionC.Publisher",
    "settings": {},
    "typeHandlerVersion": "3.0",
    "autoUpgradeMinorVersion": true,
    "type": "ExtensionC" 
  }                  
}

Om ExtensionC definierades tidigare i skalningsuppsättningsmodellen och du nu vill lägga till dess beroenden kan du köra en PATCH för att redigera egenskaperna för det redan distribuerade tillägget.

PATCH on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/ExtensionC?api-version=2018-10-01`
{ 
  "properties": {
    "provisionAfterExtensions": [
      "ExtensionA","ExtensionB"
    ]
  }                  
}

Ändringar i befintliga skalningsuppsättningsinstanser tillämpas vid nästa uppgradering.

Azure PowerShell

Använd cmdleten Add-AzVmssExtension för att lägga till Application Health-tillägget i skalningsuppsättningsmodelldefinitionen. Tilläggssekvensering kräver användning av Az PowerShell 1.2.0 eller senare.

I följande exempel läggs Application Health-tillägget till extensionProfile i en skalningsuppsättningsmodell för en Windows-baserad skalningsuppsättning. Tillägget Programhälsa etableras efter etablering av tillägget för anpassat skript, som redan har definierats i skalningsuppsättningen.

# Define the scale set variables
$vmScaleSetName = "myVMScaleSet"
$vmScaleSetResourceGroup = "myVMScaleSetResourceGroup"

# Define the Application Health extension properties
$publicConfig = @{"protocol" = "http"; "port" = 80; "requestPath" = "/healthEndpoint"};
$extensionName = "myHealthExtension"
$extensionType = "ApplicationHealthWindows"
$publisher = "Microsoft.ManagedServices"

# Get the scale set object
$vmScaleSet = Get-AzVmss `
  -ResourceGroupName $vmScaleSetResourceGroup `
  -VMScaleSetName $vmScaleSetName

# Add the Application Health extension to the scale set model
Add-AzVmssExtension -VirtualMachineScaleSet $vmScaleSet `
  -Name $extensionName `
  -Publisher $publisher `
  -Setting $publicConfig `
  -Type $extensionType `
  -TypeHandlerVersion "1.0" `
  -ProvisionAfterExtension "CustomScriptExtension" `
  -AutoUpgradeMinorVersion $True

# Update the scale set
Update-AzVmss -ResourceGroupName $vmScaleSetResourceGroup `
  -Name $vmScaleSetName `
  -VirtualMachineScaleSet $vmScaleSet

Azure CLI 2.0

Använd az vmss extension set för att lägga till Application Health-tillägget i skalningsuppsättningsmodelldefinitionen. Tilläggssekvensering kräver användning av Azure CLI 2.0.55 eller senare.

I följande exempel läggs Application Health-tillägget till skalningsuppsättningsmodellen för en Windows-baserad skalningsuppsättning. Tillägget Programhälsa etableras efter etablering av tillägget för anpassat skript, som redan har definierats i skalningsuppsättningen.

az vmss extension set \
  --name ApplicationHealthWindows \
  --publisher Microsoft.ManagedServices \
  --version 1.0 \
  --resource-group <myVMScaleSetResourceGroup> \
  --vmss-name <myVMScaleSet> \
  --provision-after-extensions CustomScriptExtension \
  --settings ./extension.json

Felsöka

Kan du inte lägga till tillägg med beroenden?

  1. Se till att tilläggen som anges i provisionAfterExtensions definieras i skalningsuppsättningsmodellen.
  2. Se till att inga cirkulära beroenden introduceras. Följande sekvens är till exempel inte tillåten: ExtensionA –> ExtensionB –> ExtensionC –> ExtensionA
  3. Se till att alla tillägg som du använder beroenden på har en egenskap för "inställningar" under tillägget "egenskaper". Om Till exempel ExtentionB måste etableras efter ExtensionA måste ExtensionA ha fältet "inställningar" under ExtensionA "properties". Du kan ange en tom egenskap för "inställningar" om tillägget inte kräver några nödvändiga inställningar.

Kan du inte ta bort tillägg?

Se till att tilläggen som tas bort inte visas under provisionAfterExtensions för andra tillägg.

Nästa steg

Lär dig hur du distribuerar ditt program på VM-skalningsuppsättningar.