Etablering av sekvenstillägg i Virtual Machine Scale Sets

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 Virtual Machine Scale Sets.

Förutsättningar

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

När tilläggssekvensering ska användas

Sekvenseringstillägg i inte obligatoriskt för skalningsuppsättningar, och om inget annat 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 programmet 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 bara 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 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 etablera sekvenstillägg 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 följande ordning:

  • 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 ordning 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 tillägget Application Health till extensionProfile i en skalningsuppsättningsmodell för en Windows-baserad skalningsuppsättning. Application Health-tillägget etableras när det anpassade skripttillägget har etablerats, 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 tillägget Application Health till skalningsuppsättningsmodellen för en Windows-baserad skalningsuppsättning. Application Health-tillägget etableras när det anpassade skripttillägget har etablerats, 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. Kontrollera att tilläggen som anges i provisionAfterExtensions definieras i skalningsuppsättningsmodellen.
  2. Se till att det inte finns några cirkulära beroenden som 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 egenskapen "inställningar" under tillägget "properties". 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å Virtual Machine Scale Sets.