Sdílet prostřednictvím


Zřizování rozšíření sekvence ve škálovacích sadách virtuálních počítačů

Rozšíření virtuálních počítačů Azure poskytují možnosti, jako jsou konfigurace a správa po nasazení, monitorování, zabezpečení a další. Produkční nasazení obvykle používají kombinaci více rozšíření nakonfigurovaných pro instance virtuálních počítačů k dosažení požadovaných výsledků.

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

Tento článek podrobně popisuje, jak můžete nakonfigurovat rozšíření pro instance virtuálních počítačů ve škálovacích sadách virtuálních počítačů.

Požadavky

Tento článek předpokládá, že znáte:

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

Sekvencování rozšíření není povinné pro škálovací sady, a pokud není zadáno, lze rozšíření zřídit v instanci škálovací sady v libovolném pořadí.

Pokud má například model škálovací sady 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 se rozšíření A vždy zřídilo 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 pouze jedna sekvence:

  • ExtensionA – > ExtensionB

Všechna rozšíření, která nejsou zadaná v definované sekvenci zřizování, je možné kdykoli zřídit, včetně před, po nebo během definované sekvence. Sekvencování rozšíření určuje, že se konkrétní rozšíření zřídí až 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á například váš model škálovací sady tři rozšíření – rozšíření A, rozšíření B a rozšíření C – zadané v modelu a rozšíření C se nastaví 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 sekvencovat všechna rozšíření ve vašem modelu škálovací sady. V předchozím příkladu lze rozšíření B nastavit tak, aby se 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ě definována 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 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 lze upravit tak, aby ExtensionC byl zřízen za ExtensionA a ExtensionB, ale není vyžadováno žádné ř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á nové rozšíření s názvem ExtensionC do modelu škálovací sady. 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 rozšířeníC bylo definováno dříve v modelu škálovací sady a teď chcete přidat jeho závislosti, můžete spustit úpravu PATCH vlastností 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 vyšší.

Následující příklad přidá rozšíření Stav aplikace do extensionProfile modelu škálovací sady škálovací sady se škálovací sadou založenou na Windows. Rozšíření Stavu aplikace se zřídí po zřízení rozšíření vlastních skriptů, které už je definováno 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í služby Application Health do definice modelu škálovací sady. Sekvencování rozšíření vyžaduje použití Azure CLI 2.0.55 nebo vyšší.

Následující příklad přidá rozšíření Stav aplikace do modelu škálovací sady škálovací sady škálovací sady založené na Systému Windows. Rozšíření Stavu aplikace se zřídí po zřízení rozšíření vlastních skriptů, které už je definováno 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

Odstraňování 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í posloupnost není povolená: ExtensionA –> ExtensionB –> ExtensionC –> ExtensionA
  3. Ujistěte se, že všechna rozšíření, na kterých pracujete, mají vlastnost nastavení v části Vlastnosti rozšíření. Pokud například po rozšíření A je potřeba zřídit ExtentionB, musí extensionA obsahovat pole "settings" v části ExtensionA "properties". Pokud rozšíření nepovoluje požadovaná nastavení, můžete zadat prázdnou vlastnost Nastavení.

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

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

Další kroky

Zjistěte, jak nasadit aplikaci ve škálovacích sadách virtuálních počítačů.