Sdílet prostřednictvím


Kurz: Úprava škálovací sady virtuálních počítačů pomocí Azure CLI

V průběhu životního cyklu vašich aplikací možná budete muset upravit nebo aktualizovat škálovací sadu virtuálních počítačů. Tyto aktualizace můžou zahrnovat, jak aktualizovat konfiguraci škálovací sady nebo změnit konfiguraci aplikace. Tento článek popisuje, jak upravit existující škálovací sadu pomocí Azure CLI.

Níže deklarujeme proměnné prostředí, které budou použity v celém tomto dokumentu. Náhodná přípona se připojí k názvům prostředků, které musí být pro každé nasazení jedinečné. Je nastaven REGION na WestUS2.

Nastavení skupiny prostředků

Než budete pokračovat, ujistěte se, že skupina prostředků existuje. Tento krok vytvoří skupinu prostředků, pokud ještě neexistuje.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
  "location": "WestUS2",
  "managedBy": null,
  "name": "myResourceGroupxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Vytvoření škálovací sady virtuálních počítačů

Pokud chcete zajistit, aby následné příkazy aktualizace a dotazování měly k dispozici platný prostředek pro práci, vytvořte škálovací sadu virtuálních počítačů. V tomto kroku nasadíme základní škálovací sadu pomocí platné image (Ubuntu2204) a nastavíme počet instancí na 5, aby aktualizace specifické pro instanci mohly cílit na existující ID instance.

export SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --image Ubuntu2204 \
  --upgrade-policy-mode manual \
  --instance-count 5 \
  --admin-username azureuser \
  --generate-ssh-keys
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
  "location": "WestUS2",
  "name": "myScaleSetxxx",
  "provisioningState": "Succeeded"
}

Aktualizace modelu škálovací sady

Škálovací sada má "model škálovací sady", který zachycuje požadovaný stav škálovací sady jako celku. K dotazování modelu pro škálovací sadu můžete použít příkaz az vmss show:

az vmss show --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

Přesná prezentace výstupu závisí na možnostech, které specificky zadáte příkazu. Následující příklad ukazuje zhuštěný ukázkový výstup z Azure CLI:

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
  "location": "WestUS2",
  "name": "myScaleSetxxx",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroupxxx",
  "sku": {
    "capacity": 5,
    "name": "Standard_DS1_v2",
    "tier": "Standard"
  },
  "timeCreated": "2022-11-29T22:16:43.250912+00:00",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "networkProfile": {
    "networkApiVersion": "2020-11-01",
    "networkInterfaceConfigurations": [
      {
        "deleteOption": "Delete",
        "disableTcpStateTracking": false,
        "dnsSettings": {
          "dnsServers": []
        },
        "enableIpForwarding": false,
        "ipConfigurations": [
          {
            "applicationGatewayBackendAddressPools": [],
            "applicationSecurityGroups": [],
            "loadBalancerBackendAddressPools": [
              {
                "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                "resourceGroup": "myResourceGroupxxx"
              }
            ],
            "name": "mysca2215IPConfig",
            "privateIpAddressVersion": "IPv4",
            "subnet": {
              "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
              "resourceGroup": "myResourceGroupxxx"
            }
          }
        ],
        "name": "mysca2215Nic",
        "networkSecurityGroup": {
          "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
          "resourceGroup": "myResourceGroupxxx"
        },
        "primary": true
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerNamePrefix": "myScaleS",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true
    }
  },
  "storageProfile": {
    "imageReference": {
      "offer": "UbuntuServer",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "storageAccountType": "Premium_LRS"
      },
      "osType": "Linux"
    }
  }
}

Pomocí příkazu az vmss update můžete aktualizovat různé vlastnosti škálovací sady. Například aktualizace typu licence nebo zásad ochrany instancí virtuálního počítače. Všimněte si, že povolená hodnota typu licence je RHEL_BYOS místo Windows_Server.

az vmss update --name $SCALE_SET_NAME --resource-group $MY_RESOURCE_GROUP_NAME --license-type RHEL_BYOS
export INSTANCE_ID=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].instanceId" \
  -o tsv)

az vmss update \
  --name $SCALE_SET_NAME \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --instance-id "$INSTANCE_ID" \
  --protect-from-scale-set-actions False \
  --protect-from-scale-in

Pokud jste dříve škálovací sadu nasadili pomocí az vmss create příkazu, můžete příkaz spustit az vmss create znovu a aktualizovat škálovací sadu. Ujistěte se, že všechny vlastnosti v příkazu az vmss create jsou stejné jako předtím, s výjimkou těch, které chcete upravit. Například, jak je uvedeno níže, zvyšujeme počet instancí na pět.

Důležité

Od listopadu 2023 se škálovací sady virtuálních počítačů vytvořené pomocí PowerShellu a Azure CLI ve výchozím nastavení nastaví do flexibilního režimu orchestrace, pokud není zadaný žádný režim orchestrace. Další informace o této změně a akcích, které byste měli provést, najdete v tématu Zásadní změna pro zákazníky PowerShellu nebo rozhraní příkazového řádku VMSS – Microsoft Community Hub.

az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5 \
  --os-disk-size-gb 64

Aktualizace jednotlivých instancí virtuálních počítačů ve škálovací sadě

Podobně jako má škálovací sada zobrazení modelu, každá instance virtuálního počítače ve škálovací sadě má vlastní zobrazení modelu. Pokud chcete dotazovat zobrazení modelu pro konkrétní instanci virtuálního počítače ve škálovací sadě, můžete použít příkaz az vm show.

export INSTANCE_NAME=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].name" \
  -o tsv)

az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $INSTANCE_NAME

Přesná prezentace výstupu závisí na možnostech, které specificky zadáte příkazu. Následující příklad ukazuje zhuštěný ukázkový výstup z Azure CLI:

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2"
  },
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "WestUS2",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroupxxx"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true
    }
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroupxxx",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "22.04.202204200",
      "offer": "0001-com-ubuntu-server-jammy",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_xxx",
        "resourceGroup": "myResourceGroupxxx",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_xxx",
      "osType": "Linux"
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
    "resourceGroup": "myResourceGroupxxx"
  }
}

Tyto vlastnosti popisují konfiguraci instance virtuálního počítače ve škálovací sadě, nikoli konfiguraci škálovací sady jako celku.

Aktualizace jednotlivých instancí virtuálních počítačů ve škálovací sadě můžete provádět stejně jako samostatný virtuální počítač. Například připojení nového datového disku k instanci 1:

az vm disk attach --resource-group $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --name disk_name1 --new

Když spustíte příkaz az vm show znovu, uvidíme, že instance virtuálního počítače má připojený nový disk.

{
  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroupxxx",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false
      }
    ]
  }
}

Přidání instance do škálovací sady

Někdy můžete chtít do škálovací sady přidat nový virtuální počítač, ale chcete jiné možnosti konfigurace než ty uvedené v modelu škálovací sady. Virtuální počítače je možné přidat do škálovací sady během vytváření pomocí příkazu az vm create a zadáním názvu škálovací sady, do které chcete instanci přidat.

export NEW_INSTANCE_NAME="myNewInstance$RANDOM_SUFFIX"
az vm create --name $NEW_INSTANCE_NAME --resource-group $MY_RESOURCE_GROUP_NAME --vmss $SCALE_SET_NAME --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myNewInstancexxx",
  "location": "WestUS2",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroupxxx",
  "zones": ""
}

Pokud pak zkontrolujeme naši škálovací sadu, uvidíme přidanou novou instanci.

az vm list --resource-group $MY_RESOURCE_GROUP_NAME --output table
Name                  ResourceGroup      Location
--------------------  ---------------    ----------
myNewInstancexxx      myResourceGroupxxx WestUS2
myScaleSet_Instance1  myResourceGroupxxx WestUS2
myScaleSet_Instance1  myResourceGroupxxx WestUS2

Aktualizace virtuálních počítačů up-tona nejnovější model škálovací sady.

Poznámka:

Režimy upgradu se v současné době nepodporují ve škálovacích sadách virtuálních počítačů pomocí flexibilního režimu orchestrace.

Škálovací sady mají zásadu upgradu, která určuje, jak se virtuální počítače přenesou up-to–date s nejnovějším modelem škálovací sady. Pro zásady upgradu existují tři režimy:

  • Automaticky – V tomto režimu škálovací sada neposkytuje žádné záruky týkající se pořadí vypínání virtuálních počítačů. Škálovací sada může současně vypnout všechny virtuální počítače.
  • Rolling – V tomto režimu škálovací sada zavádí aktualizaci v dávkách s volitelným časem pozastavení mezi dávkami.
  • Ruční – V tomto režimu se při aktualizaci modelu škálovací sady nic nestane s existujícími virtuálními počítači, dokud se neaktivuje ruční aktualizace.

Pokud je vaše škálovací sada nastavená na ruční upgrady, můžete aktivovat ruční upgrade pomocí příkazu az vmss update.

az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

Poznámka:

Clustery Service Fabric můžou používat pouze automatický režim, ale aktualizace se zpracovává jinak. Další informace najdete v tématu Upgrady aplikací Service Fabric.

Opětovné vytvoření škálovací sady

Škálovací sady virtuálních počítačů vygenerují jedinečný název pro každý virtuální počítač ve škálovací sadě. Zásady vytváření názvů se liší podle režimu orchestrace:

  • Flexibilní režim orchestrace: {scale-set-name}_{8-char-guid}
  • Jednotný režim pro orchestraci: {scale-set-name}_{instance-id}

V případech, kdy potřebujete znovu vytvořit určitou instanci, použijte příkaz az vmss reimage a zadejte ID instance. Další možností je použít příkaz az vm redeploy k opětovnému vytvoření image virtuálního počítače přímo. Tento příkaz je užitečný, pokud chcete virtuální počítač znovu vytvořit, aniž byste museli zadávat ID instance.

# Get the VM name first
VM_NAME=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].name" \
  -o tsv)

# Reimage the VM directly
az vm redeploy \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $VM_NAME

Aktualizujte obraz operačního systému pro škálovací sadu

Možná máte škálovací sadu, na které běží stará verze Ubuntu. Chcete aktualizovat na novější verzi Ubuntu, například na nejnovější verzi. Vlastnost referenční verze image není součástí seznamu, takže tyto vlastnosti můžete přímo upravit pomocí příkazu az vmss update.

az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest

Případně můžete chtít změnit image, kterou vaše škálovací sada používá. Můžete například chtít aktualizovat nebo změnit vlastní obraz používaný vaší škálovací sadou. Obrázek, který vaše škálovací sada používá, můžete změnit aktualizací vlastnosti ID odkazu na obrázek. Vlastnost ID odkazu na obrázek není součástí seznamu, takže tuto vlastnost můžete přímo upravit pomocí příkazu az vmss update.

Pokud používáte platformové obrazy Azure, můžete obraz aktualizovat úpravou imageReference. Další informace najdete v dokumentaci k rozhraní REST API.

Poznámka:

U obrazů platformy je běžné zadat "poslední" pro referenci obrazu. Při vytváření, horizontálním navýšení kapacity a přeinstalováním jsou virtuální počítače vytvořeny s nejnovější dostupnou verzí. To však neznamená, že se obraz operačního systému automaticky aktualizuje časem s vydáním nových verzí obrazů. Samostatná funkce poskytuje automatické upgrady operačního systému. Další informace najdete v dokumentaci k automatickým upgradům operačního systému.

Pokud používáte vlastní image, můžete aktualizovat image tím, že aktualizujete ID imageReference (další informace najdete v dokumentaci rozhraní REST API).

Aktualizujte vyrovnávač zatížení vaší škálovací sady

Řekněme, že máte škálovací sadu s Azure Load Balancerem a chcete nahradit Azure Load Balancer s Azure Application Gateway. Vlastnosti nástroje pro vyrovnávání zatížení a služby Application Gateway pro škálovací sadu jsou součástí seznamu, takže pomocí příkazů můžete odebrat nebo přidat prvky seznamu místo přímé úpravy vlastností.

# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0

# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0

# Add the application gateway backend pool to the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/xxxxx/resourceGroups/'$MY_RESOURCE_GROUP_NAME'/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

Poznámka:

Tyto příkazy předpokládají, že ve škálovací sadě existuje pouze jedna konfigurace PROTOKOLU IP a nástroj pro vyrovnávání zatížení. Pokud existují více položek, možná budete muset použít jiný index seznamu než je 0.

Další kroky

V tomto kurzu jste se dozvěděli, jak upravit různé aspekty škálovací sady a jednotlivých instancí.

  • Aktualizace modelu škálovací sady
  • Aktualizace jednotlivé instance virtuálního počítače ve škálovací sadě
  • Přidání instance do škálovací sady
  • Aktualizace virtuálních počítačů up-tona nejnovější model škálovací sady.
  • Opětovné vytvoření škálovací sady
  • Aktualizujte obraz operačního systému pro škálovací sadu
  • Aktualizujte vyrovnávač zatížení vaší škálovací sady