Sdílet prostřednictvím


Zřizování rozšíření sekvence v Virtual Machine Scale Sets

Rozšíření virtuálních počítačů Azure poskytují možnosti, jako je konfigurace a správa po nasazení, monitorování, zabezpečení a další. Produkční nasazení obvykle používají kombinaci několika rozšíření nakonfigurovaných pro instance virtuálních počítačů, aby se dosáhlo požadovaných výsledků.

Pokud na virtuálním počítači používáte více rozšíření, je důležité zajistit, aby se rozšíření, která vyžadují stejné prostředky operačního systému, nepokoušla získat tyto prostředky současně. Některá rozšíření také závisejí na jiných rozšířeních, která poskytují požadované konfigurace, jako jsou nastavení prostředí a tajné kódy. Bez správného pořadí a pořadí můžou selhat nasazení závislých rozšíření.

Tento článek podrobně popisuje, jak můžete sekvencovat rozšíření, která se mají nakonfigurovat pro instance virtuálních počítačů v Virtual Machine Scale Sets.

Požadavky

V tomto článku se předpokládá, že znáte:

Kdy použít sekvencování rozšíření

Rozšíření pořadí nejsou pro škálovací sady povinná, a pokud není uvedeno, je možné rozšíření zřídit v instanci škálovací sady v libovolném pořadí.

Pokud má váš model škálovací sady například dvě rozšíření – ExtensionA a ExtensionB – zadané v modelu, může dojít k některé z následujících sekvencí zřizování:

  • ExtensionA –> ExtensionB
  • ExtensionB –> ExtensionA

Pokud vaše aplikace vyžaduje, aby rozšíření A bylo vždy zřízeno před rozšířením B, měli byste použít sekvencování rozšíření, jak je popsáno v tomto článku. Při sekvencování rozšíření teď proběhne jenom jedna sekvence:

  • ExtensionA – > ExtensionB

Všechna rozšíření nezadaná v definované sekvenci zřizování je možné zřídit kdykoli, a to i před, po nebo během definované sekvence. Sekvencování rozšíření pouze určuje, že konkrétní rozšíření bude zřízeno po jiném konkrétním rozšíření. Nemá vliv na zřizování žádného jiného rozšíření definovaného v modelu.

Pokud má váš model škálovací sady například tři rozšíření – rozšíření A, rozšíření B a rozšíření C – zadané v modelu a rozšíření C je nastavené tak, aby se zřídilo po rozšíření A, může dojít k některé z následujících sekvencí zřizování:

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

Pokud potřebujete zajistit, aby se během provádění definované sekvence rozšíření nezřídilo žádné jiné rozšíření, doporučujeme sekvenovat všechna rozšíření v modelu škálovací sady. Ve výše uvedeném příkladu je možné nastavit, aby se rozšíření B zřídilo po rozšíření C tak, aby mohlo dojít pouze k jedné sekvenci:

  • ExtensionA –> ExtensionC –> ExtensionB

Jak používat sekvencování rozšíření

Pokud chcete sekvencovat zřizování rozšíření, musíte aktualizovat definici rozšíření v modelu škálovací sady tak, aby zahrnovala vlastnost "provisionAfterExtensions", která přijímá pole názvů rozšíření. Rozšíření uvedená v hodnotě pole vlastností musí být plně definovaná v modelu škálovací sady.

Nasazení šablony

Následující příklad definuje šablonu, ve které má škálovací sada tři rozšíření – ExtensionA, ExtensionB a ExtensionC – tak, aby byla rozšíření zřízena v tomto pořadí:

  • 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"                   
        }
      }
    ]
  }
}

Vzhledem k tomu, že vlastnost "provisionAfterExtensions" přijímá pole názvů rozšíření, výše uvedený příklad může být změněn tak, aby ExtensionC byl zřízen za ExtensionA a ExtensionB, ale není vyžadováno řazení mezi ExtensionA a ExtensionB. K dosažení tohoto scénáře můžete použít následující šablonu:

"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

Následující příklad přidá do modelu škálovací sady nové rozšíření s názvem ExtensionC. ExtensionC má závislosti na ExtensionA a ExtensionB, které už byly definovány v modelu škálovací sady.

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" 
  }                  
}

Pokud byl ExtensionC definován dříve v modelu škálovací sady a teď chcete přidat jeho závislosti, můžete spuštěním PATCH příkazu upravit vlastnosti již nasazeného rozšíření.

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

Změny existujících instancí škálovací sady se použijí při dalším upgradu.

Azure PowerShell

Pomocí rutiny Add-AzVmssExtension přidejte rozšíření Application Health do definice modelu škálovací sady. Sekvencování rozšíření vyžaduje použití Az PowerShellu 1.2.0 nebo novějšího.

Následující příklad přidá rozšíření Application Health do extensionProfile modelu škálovací sady škálovací sady založené na Windows. Rozšíření Application Health se zřídí po zřízení rozšíření vlastních skriptů, které je už definované ve škálovací sadě.

# 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

Pomocí příkazu az vmss extension set přidejte rozšíření Application Health do definice modelu škálovací sady. Sekvencování rozšíření vyžaduje použití Azure CLI 2.0.55 nebo novějšího.

Následující příklad přidá rozšíření Application Health do modelu škálovací sady škálovací sady se systémem Windows. Rozšíření Application Health se zřídí po zřízení rozšíření vlastních skriptů, které je už definované ve škálovací sadě.

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

Řešení potíží

Nemůžete přidat rozšíření se závislostmi?

  1. Ujistěte se, že rozšíření zadaná v provisionAfterExtensions jsou definována v modelu škálovací sady.
  2. Ujistěte se, že nejsou zavedeny žádné cyklické závislosti. Například následující sekvence není povolená: ExtensionA –> ExtensionB –> ExtensionC –> ExtensionA
  3. Ujistěte se, že všechna rozšíření, na kterých přebírají závislosti, mají vlastnost "settings" v části "vlastnosti" rozšíření. Pokud je třeba zřídit například ExtentionB po ExtensionA, musí mít ExtensionA pole "nastavení" v části ExtensionA "vlastnosti". Pokud rozšíření nevyžaduje žádná požadovaná nastavení, můžete zadat prázdnou vlastnost "settings".

Nemůžete odebrat rozšíření?

Ujistěte se, že odebraná rozšíření nejsou uvedená v části provisionAfterExtensions pro žádná jiná rozšíření.

Další kroky

Zjistěte, jak nasadit aplikaci na Virtual Machine Scale Sets.