Delen via


Zelfstudie: Een virtuele machineschaalset wijzigen met behulp van Azure CLI

Tijdens de levenscyclus van uw toepassingen moet u mogelijk uw virtuele-machineschaalset wijzigen of bijwerken. Deze updates kunnen omvatten hoe u de configuratie van de schaalset bijwerkt of de toepassingsconfiguratie wijzigt. In dit artikel wordt beschreven hoe u een bestaande schaalset wijzigt met behulp van de Azure CLI.

Hieronder declareren we omgevingsvariabelen die in dit document worden gebruikt. Er wordt een willekeurig achtervoegsel toegevoegd aan resourcenamen die uniek moeten zijn voor elke implementatie. De REGION is ingesteld op WestUS2.

Resourcegroep instellen

Zorg ervoor dat de resourcegroep bestaat voordat u doorgaat. Met deze stap maakt u de resourcegroep aan indien deze nog niet bestaat.

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

Maak de virtuele machineschaalset

Maak een virtuele-machineschaalset om ervoor te zorgen dat volgende update- en queryopdrachten een geldige resource hebben om mee te werken. In deze stap implementeren we een eenvoudige schaalset met behulp van een geldige installatiekopie (Ubuntu2204) en stellen we het aantal exemplaren in op 5, zodat exemplaarspecifieke updates een bestaande exemplaar-id kunnen instellen.

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

Het schaalsetmodel bijwerken

Een schaalset heeft een 'schaalsetmodel' waarmee de gewenste status van de schaalset als geheel wordt vastgelegd. Als u een query wilt uitvoeren op het model voor een schaalset, kunt u az vmss show gebruiken:

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

De exacte presentatie van de uitvoer is afhankelijk van de opties die u aan de opdracht geeft. In het volgende voorbeeld ziet u verkorte voorbeelduitvoer van de 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"
    }
  }
}

U kunt az vmss update gebruiken om verschillende eigenschappen van uw schaalset bij te werken. Bijvoorbeeld het bijwerken van uw licentietype of het beveiligingsbeleid voor exemplaren van een VM. Houd er rekening mee dat de toegestane licentietypewaarde RHEL_BYOS is in plaats van 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

Als u de schaalset eerder met de az vmss create opdracht hebt geïmplementeerd, kunt u de az vmss create opdracht ook opnieuw uitvoeren om de schaalset bij te werken. Zorg ervoor dat alle eigenschappen in de az vmss create opdracht hetzelfde zijn als voorheen, met uitzondering van de eigenschappen die u wilt wijzigen. Hieronder verhogen we bijvoorbeeld het aantal exemplaren tot vijf.

Belangrijk

Vanaf november 2023 worden VM-schaalsets die zijn gemaakt met PowerShell en Azure CLI standaard ingesteld op de flexibele indelingsmodus als er geen indelingsmodus is opgegeven. Voor meer informatie over deze wijziging en welke acties u moet ondernemen, gaat u naar Belangrijke wijziging voor VMSS PowerShell/CLI-klanten - 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

Het bijwerken van afzonderlijke VM-exemplaren in een schaalset

Net als bij hoe een schaalset een modelweergave heeft, heeft elk VM-exemplaar in de schaalset een eigen modelweergave. Als u een query wilt uitvoeren op de modelweergave voor een bepaald VM-exemplaar in een schaalset, kunt u az vm show gebruiken.

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

De exacte presentatie van de uitvoer is afhankelijk van de opties die u aan de opdracht geeft. In het volgende voorbeeld ziet u verkorte voorbeelduitvoer van de 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"
  }
}

Deze eigenschappen beschrijven de configuratie van een VM-exemplaar in een schaalset, niet de configuratie van de schaalset als geheel.

U kunt updates toepassen voor afzonderlijke VM-exemplaren in een schaalset, net zoals u dat zou doen bij een zelfstandige virtuele machine. Als u bijvoorbeeld een nieuwe gegevensschijf koppelt aan exemplaar 1:

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

Als u az vm show opnieuw uitvoert , zien we nu dat de nieuwe schijf is gekoppeld aan het VM-exemplaar.

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

Een exemplaar toevoegen aan uw schaalset

Er zijn situaties waarin u mogelijk een nieuwe VIRTUELE machine aan uw schaalset wilt toevoegen, maar andere configuratieopties wilt gebruiken dan die in het schaalsetmodel worden vermeld. Vm's kunnen tijdens het maken aan een schaalset worden toegevoegd met behulp van de opdracht az vm create en de naam van de schaalset opgeven waaraan u het exemplaar wilt toevoegen.

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

Als we vervolgens onze schaalset controleren, zullen we zien dat de nieuwe instantie is toegevoegd.

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

Vm's up-to-date brengen met het meest recente schaalsetmodel

Opmerking

Upgrademodi worden momenteel niet ondersteund op virtuele machineschaalsets met de flexibele orkestratiemodus.

Schaalsets hebben een upgradebeleid dat bepaalt hoe VM's up-to-date worden bijgewerkt naar het meest recente schaalsetmodel. De drie modi voor het upgradebeleid zijn:

  • Automatisch – in deze modus biedt de schaalset geen garanties over de volgorde van VM's die worden uitgeschakeld. De schaalset kan alle VM's tegelijkertijd uitschakelen.
  • Rolling - in deze modus rolt de schaalset de update uit in batches, met een optionele pauze tussen de batches.
  • Handmatig: wanneer u het schaalsetmodel bijwerkt, gebeurt er in deze modus niets met bestaande VM's totdat een handmatige update wordt geactiveerd.

Als uw schaalset is ingesteld op handmatige upgrades, kunt u een handmatige upgrade activeren met behulp van az vmss update.

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

Opmerking

Service Fabric-clusters kunnen alleen de automatische modus gebruiken, maar de update wordt anders verwerkt. Zie Service Fabric-toepassingsupgrades voor meer informatie.

Een schaalset opnieuw instellen

Virtuele-machineschaalsets genereren een unieke naam voor elke virtuele machine in de schaalset. De naamconventie verschilt per indelingsmodus:

  • Flexibele orkestratiemodus: {scale-set-name}_{8-char-guid}
  • Uniforme orchestratiemodus: {scale-set-name}_{instance-id}

Gebruik az vmss reimage en geef de exemplaar-id op in de gevallen waarin u de installatiekopie van een specifiek exemplaar opnieuw moet instellen. Een andere optie is om az vm redeploy te gebruiken om de VM rechtstreeks opnieuw te maken. Deze opdracht is handig als u een virtuele machine opnieuw wilt installeren zonder de instance-id te hoeven opgeven.

# 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

De installatiekopieën van het besturingssysteem voor uw schaalset bijwerken

Mogelijk hebt u een schaalset waarop een oude versie van Ubuntu wordt uitgevoerd. U wilt bijwerken naar een nieuwere versie van Ubuntu, zoals de nieuwste versie. De eigenschap image reference version maakt geen deel uit van een lijst, dus u kunt deze eigenschappen rechtstreeks wijzigen met az vmss update.

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

U kunt ook de installatiekopieën wijzigen die door uw schaalset worden gebruikt. U kunt bijvoorbeeld een aangepaste installatiekopieën bijwerken of wijzigen die door uw schaalset worden gebruikt. U kunt de afbeelding wijzigen die door de schaalset wordt gebruikt door de eigenschap afbeeldingsreferentie-id bij te werken. De eigenschap image reference ID maakt geen deel uit van een lijst, dus u kunt deze eigenschap rechtstreeks wijzigen met az vmss update.

Als u Azure-platforminstallatiekopieën gebruikt, kunt u de installatiekopie bijwerken door de imageReference te wijzigen (zie de REST API-documentatie voor meer informatie).

Opmerking

Met platforminstallatiekopieën is het gebruikelijk om 'nieuwste' op te geven voor de referentieversie van de installatiekopieën. Wanneer u vm's maakt, uitschaalt en opnieuw maakt, worden vm's gemaakt met de nieuwste beschikbare versie. Het betekent echter niet dat de installatiekopieën van het besturingssysteem na verloop van tijd automatisch worden bijgewerkt wanneer nieuwe installatiekopieën worden uitgebracht. Een afzonderlijke functie biedt automatische upgrades van het besturingssysteem. Zie de documentatie voor automatische besturingssysteemupgrades voor meer informatie.

Als u aangepaste installatiekopieën gebruikt, kunt u de installatiekopie bijwerken door de imageReference-id bij te werken (zie de REST API-documentatie voor meer informatie).

De load balancer voor uw schaalset bijwerken

Stel dat u een schaalset hebt met een Azure Load Balancer en u de Azure Load Balancer wilt vervangen door een Azure-toepassing Gateway. De eigenschappen van de load balancer en Application Gateway voor een schaalset maken deel uit van een lijst, zodat u de opdrachten kunt gebruiken om lijstelementen te verwijderen of toe te voegen in plaats van de eigenschappen rechtstreeks te wijzigen.

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

Opmerking

Bij deze opdrachten wordt ervan uitgegaan dat er slechts één IP-configuratie en load balancer aanwezig is in de schaalset. Als er meerdere zijn, moet u mogelijk een andere lijstindex dan 0 gebruiken.

Volgende stappen

In deze handleiding hebt u geleerd hoe u verschillende aspecten van uw schaalset en afzonderlijke exemplaren kunt wijzigen.

  • Het schaalsetmodel bijwerken
  • Een afzonderlijk VM-exemplaar in een schaalset bijwerken
  • Een exemplaar toevoegen aan uw schaalset
  • Vm's up-to-date brengen met het meest recente schaalsetmodel
  • Een schaalset opnieuw instellen
  • De installatiekopieën van het besturingssysteem voor uw schaalset bijwerken
  • De load balancer voor uw schaalset bijwerken