Share via


教學課程:使用 Azure CLI 修改虛擬機器擴展集

在應用程式的整個生命週期中,您可能需要修改或更新您的虛擬機器擴展集。 這些更新可能包括如何更新擴展集的組態,或者變更應用程式組態。 本文說明如何使用 Azure CLI 修改現有的擴展集。

更新擴展集模型

擴展集具有「擴展集模型」,可擷取擴展集整體的「預期」狀態。 若要查詢擴展集的模型,您可以使用 az vmss show

az vmss show --resource-group myResourceGroup --name myScaleSet

確切的輸出呈現內容取決於您提供給命令的選項。 下列範例會示範 Azure CLI 的扼要範例輸出:

{
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
  "location": "eastus",
  "name": "myScaleSet",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": 2,
    "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/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                  "resourceGroup": "myResourceGroup"
                }
              ],
              "name": "mysca2215IPConfig",
              "privateIpAddressVersion": "IPv4",
              "subnet": {
                "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
                "resourceGroup": "myResourceGroup"
              }
            }
          ],
          "name": "mysca2215Nic",
          "networkSecurityGroup": {
            "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
            "resourceGroup": "myResourceGroup"
          },
          "primary": true
        }
      ]
    },
    "osProfile": {
      "allowExtensionOperations": true,
      "computerNamePrefix": "myScaleS",
      "linuxConfiguration": {
        "disablePasswordAuthentication": true,
        "enableVmAgentPlatformUpdates": false,
        "patchSettings": {
          "assessmentMode": "ImageDefault",
          "patchMode": "ImageDefault"
        },
        "provisionVmAgent": true,
      },
    },
    "storageProfile": {
      "imageReference": {
        "offer": "0001-com-ubuntu-server-jammy",
        "publisher": "Canonical",
        "sku": "22_04-lts",
        "version": "latest"
      },
      "osDisk": {
        "caching": "ReadWrite",
        "createOption": "FromImage",
        "deleteOption": "Delete",
        "diskSizeGb": 30,
        "managedDisk": {
          "storageAccountType": "Premium_LRS"
        },
        "osType": "Linux",
      }
    },
  },
}

您可以使用 az vmss update 來更新擴展集的各種屬性。 例如,更新您的授權類型或 VM 執行個體保護原則。

az vmss update --name MyScaleSet --resource-group MyResourceGroup --license-type windows_server
az vmss update --name MyScaleSet --resource-group MyResourceGroup --instance-id 4 --protect-from-scale-set-actions False --protect-from-scale-in

此外,如果您先前已使用 az vmss create 命令來部署擴展集,則可以再次執行 az vmss create 命令來更新擴展集。 請確保 az vmss create 命令中的所有屬性都與之前相同,除了您想要修改的屬性之外。 例如,下面我們會將執行個體計數增加到五個。

重要

自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請移至 針對 VMSS PowerShell/CLI 客戶的中斷性變更 - Microsoft 社群中樞 (英文)

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5

更新擴展集中的個別 VM 執行個體

就像擴展集有模型檢視一樣,擴展集內的每個 VM 執行個體也有自己的模型檢視。 若要查詢擴展集中特定 VM 執行個體的模型檢視,您可以使用 az vm show

az vm show --resource-group myResourceGroup --name myScaleSet_Instanace1

確切的輸出呈現內容取決於您提供給命令的選項。 下列範例會示範 Azure CLI 的扼要範例輸出:

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2",
  },
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "eastus",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
    },
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "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/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
      "osType": "Linux",
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

這些屬性會描述擴展集內 VM 執行個體的設定,而非整個擴展集的設定。

您可以像對獨立虛擬機器一樣,對擴展集中的個別虛擬機器執行個體執行更新。 例如,將新的資料磁碟連結至執行個體 1:

az vm disk attach --resource-group myResourceGroup --vm-name myScaleSet_Instance1 --name disk_name1 --new

再次執行 az vm show,我們現在會看到 VM 執行個體已連結至新的磁碟。

  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/49d84582-7207-4a4f-824e-044e83c71887/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroup",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false,
      }
    ],

將執行個體新增至擴展集

有時候您可能會想要將新的 VM 新增至擴展集,但又想要不同於擴展集模型中所列的組態選項。 建立虛擬機器時,可以使用 az vm create 命令並指定要新增執行個體的擴展集名稱,將虛擬機器新增至擴展集。

az vm create --name myNewInstance --resource-group myResourceGroup --vmss myScaleSet --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance",
  "location": "eastus",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroup",
  "zones": ""

如果我們接著檢查擴展集,就會看到新增的執行個體。

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location
-------------------  ---------------  ----------
myNewInstance         myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus

使用最新的擴展集模型將 VM 更新至最新狀態

注意

使用彈性協調流程模式的虛擬機器擴展集目前不支援升級模式。

擴展集具有「升級原則」,可決定藉由最新擴展集模型將 VM 更新至最新狀態的方式。 升級原則的三個模式為:

  • 自動 - 在此模式下,擴展集不保證虛擬機器的關閉順序。 擴展集可能同時關閉所有 VM。
  • 輪流 - 在此模式下,擴展集會分批進行更新,批次之間會有選擇性的暫停時間。
  • 手動 - 在此模式下,當您更新擴展集模型時,除非觸發手動更新,否則現有的虛擬機器將不受影響。

如果您的擴展集設定為手動升級,則您可以使用 az vmss update 觸發手動升級。

az vmss update --resource-group myResourceGroup --name myScaleSet

注意

Service Fabric 叢集只能使用「自動」模式,但處理更新的方式不同。 如需詳細資訊,請參閱 Service Fabric 應用程式升級

重新安裝映像擴展集

虛擬機器擴展集將會為擴展集中的每個 VM 產生唯一的名稱。 命名慣例會因協調流程模式而有所不同:

  • 彈性協調流程模式: {scale-set-name}_{8-char-guid}
  • 統一協調流程模式: {scale-set-name}_{instance-id}

在您需要重新安裝映像特定執行個體的情況下,請使用 az vmss reimage 並指定執行個體名稱。

az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id myScaleSet_Instance1

更新擴展集的 OS 映像

您可能有執行舊版 Ubuntu 的擴展集。 您想要更新為較新版本的 Ubuntu LTS 16.04 (例如,版本 22.04.202204200)。 映像參考版本屬性不是清單的一部分,因此您可以使用 az vmss update 直接修改這些屬性。

az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=22.04.202204200

或者,您可能想要變更擴展集使用的映像。 例如,您可能要更新或變更擴展集使用的自訂映像。 您可以藉由更新映像參考識別碼屬性,來變更擴展集使用的映像。 映像參考識別碼屬性不是清單的一部分,因此您可以使用 az vmss update 直接修改此屬性。

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage

如果您使用 Azure 平台映像,您可以修改 imageReference (如需詳細資訊,請參閱 REST API 文件) 來更新映像。

注意

使用平台映像時,通常會指定 "latest" 作為映像參考版本。 當您建立、擴增及重新安裝映像時,會使用最新可用版本來建立虛擬機器。 不過,這並不意謂著作業系統映像會隨著時間在新映像版本發行時自動更新。 獨立功能可提供自動作業系統升級。 如需詳細資訊,請參閱 自動作業系統升級文件

如果您使用自訂映像,您可以更新 imageReference 識別碼 (如需詳細資訊,請參閱 REST API 文件) 來更新映像。

更新擴展集的負載平衡器

假設您有一個含有 Azure Load Balancer 的擴展集,而您想要以「Azure 應用程式閘道」取代 Azure Load Balancer。 擴展集的負載平衡器和應用程式閘道屬性是清單的一部分,因此您可以使用命令來移除或新增清單元素,而不需直接修改屬性。

# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

注意

這些命令會假設擴展集上只有一個 IP 設定和負載平衡器。 如果有多個,您可能需要使用清單索引而不是 0

下一步

在本教學課程中,您已了解如何修改擴展集和個別執行個體的各個層面。

  • 更新擴展集模型
  • 更新擴展集中的個別 VM 執行個體
  • 將執行個體新增至擴展集
  • 使用最新的擴展集模型將 VM 更新至最新狀態
  • 重新安裝映像擴展集
  • 更新擴展集的 OS 映像
  • 更新擴展集的負載平衡器