使用自訂的縮減原則搭配 Azure 虛擬機器擴展集

虛擬機器擴展集部署可以根據計量陣列進行擴充或縮減,這些計量包括平台和使用者定義的自訂計量。 相應放大會根據擴展集模型建立新的虛擬機器,相應縮小則會影響執行中的虛擬機器,而隨著擴展集工作負載的發展,可能會有不同的設定和/或功能。

相應縮小原則功能可讓使用者透過三個相應縮小設定,設定虛擬機器進行相應縮小的順序:

  1. 預設
  2. NewestVM
  3. OldestVM

Default 相應縮小原則

彈性協調流程

使用此原則時,虛擬機會在平衡可用性區域之後縮減,(如果擴展集處於區域性設定中),且最舊的虛擬機會依 createdTime 先縮減。 在具有彈性協調流程模式的預設原則中,無法使用跨容錯網域平衡。

統一協調流程

依預設,虛擬機器擴展集會套用此原則來決定要縮減哪些執行個體。 使用 Default 原則時,會依下列順序選取要相應縮小的 VM:

  1. 平衡可用性區域之間的虛擬機器 (如果擴展集是以區域設定部署的)
  2. 平衡容錯網域之間的虛擬機器 (盡力)
  3. 刪除具有最高執行個體識別碼的虛擬機器

如果使用者只想要遵循預設的順序,則不需要指定縮減原則。

在可用性區域或容錯網域之間平衡,不會跨可用性區域或容錯網域移動執行個體。 達到平衡的方法是從不平衡的可用性區域或容錯網域刪除虛擬機器,直到虛擬機器的分佈達到平衡為止。

NewestVM 相應縮小原則

在平衡跨可用性區域之間的虛擬機器之後,此原則會刪除擴展集中最新或最近建立的虛擬機器 (適用於區域性部署)。 啟用此原則需要在虛擬機擴展集模型的設定變更。

OldestVM 相應縮小原則

此原則會在平衡跨可用性區域之間的 VM 之後,刪除擴展集中最早建立的虛擬機器 (適用於區域性部署)。 啟用此原則需要在虛擬機擴展集模型的設定變更。

啟用相應縮小原則

縮減原則定義於虛擬機器擴展集模型中。 如上方各節所述,使用「NewestVM」和「OldestVM」原則時需要縮減原則的定義。 如果擴展集模型中找不到縮減原則的定義,虛擬機器擴展集就會自動使用「預設」縮減原則。

您可以利用下列方法,在虛擬機器擴展集模型上定義縮減原則:

Azure 入口網站

下列步驟會在建立新擴展集時定義相應縮小原則。

  1. 移至 [虛擬機器擴展集]
  2. 選取 [+ 新增],建立新的擴展集。
  3. 移至 [調整] 索引標籤。
  4. 找到 [相應縮小原則] 區段。
  5. 從下拉式清單中選取相應縮小原則。
  6. 完成建立新的擴展集之後,選取 [檢閱 + 建立] 按鈕。

使用 API

使用 API 2019-03-01 在該虛擬機器上執行 PUT:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["OldestVM"]  
        } 
    }    
} 

Azure PowerShell

重要

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

建立資源群組,然後建立新擴展集以及設定為 OldestVM 的相應縮小原則。

New-AzResourceGroup -ResourceGroupName "myResourceGroup" -Location "<VMSS location>"
New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "<VMSS location>" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -ScaleInPolicy “OldestVM”

Azure CLI

重要

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

下列範例會在建立新擴展集時新增相應縮小原則。 首先,建立資源群組,然後建立新擴展集以及設定為 OldestVM 的相應縮小原則。

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --orchestration-mode flexible \
  --image Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --scale-in-policy OldestVM

使用範本

在範本的 [屬性] 下新增 scaleInPolicy 屬性:

"scaleInPolicy": {  
      "rules": ["OldestVM"]  
}

這些程式碼區塊會指定當觸發縮減時 (透過自動調整或手動刪除),虛擬機器擴展集會刪除區域平衡擴展集中最舊的虛擬機器。

若虛擬機器擴展集未達到區域平衡,擴展集會先刪除不平衡區域之間的虛擬機器。 在不平衡區域內,擴展集會使用指定的縮減原則來判斷要縮減的虛擬機器。 在此情況下,在不平衡區域中,擴展集會選取該區域中最舊的 VM 進行刪除。

若是非區域性虛擬機器擴展集,該原則會選取橫跨整個擴展集中最舊的虛擬機器進行刪除。

使用 ‘NewestVM’ 相應縮小原則時,會套用相同的程式。

修改相應縮小原則

修改相應縮小原則與套用相應縮小原則的程序相同。 例如,如果您想要將原則從 ‘Oldest虛擬機器' 變更為 ‘Newest虛擬機器',您可以執行下列動作:

Azure 入口網站

您可以透過 Azure 入口網站修改現有擴展集的相應縮小原則。

  1. 在現有虛擬機器擴展集中,從左側功能表中選取 [調整]
  2. 選取 [相應縮小原則] 索引標籤。
  3. 從下拉式清單中選取相應縮小原則。
  4. 完成時,選取儲存

使用 API

使用 API 2019-03-01 在該虛擬機器上執行 PUT:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01 

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["NewestVM"]  
        } 
    }    
}

Azure PowerShell

更新現有擴展集的相應縮小原則:

Update-AzVmss `
 -ResourceGroupName "myResourceGroup" `
 -VMScaleSetName "myScaleSet" `
 -ScaleInPolicy “OldestVM”

Azure CLI

以下範例示範更新現有擴展集的相應縮小原則:

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --scale-in-policy OldestVM

使用範本

在您的範本中,在 “properties” 底下,如下修改範本並重新部署:

"scaleInPolicy": {  
      "rules": ["NewestVM"]  
} 

如果您決定將 ‘NewestVM’ 變更為 ‘Default’ 或 ‘OldestVM’,則適用相同的程序

執行個體保護和相應縮小原則

虛擬機器擴展集提供兩種類型的執行個體保護

  1. 防止相應縮小
  2. 防止擴展集動作

無論套用的縮減原則為何,都無法透過縮減動作刪除受保護的虛擬機器。 例如,如果 VM_0 (擴展集中最舊的虛擬機器) 有防止縮減的保護,而擴展集已啟用 ‘OldestVM’ 縮減原則,則即使 VM_0 是擴展集中最舊的虛擬機器,也不會考慮對其進行縮減。

無論擴展集上是否啟用相應縮小原則,使用者隨時都可以手動刪除受保護的虛擬機器。

使用範例

下列範例示範虛擬機器擴展集在縮減事件遭觸發時如何選取要刪除的虛擬機器。 具有最高執行個體識別碼的虛擬機器會假設為擴展集中最新的 VM,具有最小執行個體識別碼的 VM 則會假設為擴展集中最舊的 VM。

OldestVM 相應縮小原則

事件 區域 1 中的執行個體識別碼 區域 2 中的執行個體識別碼 區域 3 中的執行個體識別碼 相應縮小的選擇
Initial 3、4、5、10 2、6、9、11 1、7、8
相應縮小 3、4、5、10 2、6、9、11 1、7、8 在區域 1 和 2 之間選擇,即使區域 3 有最舊的 VM。 從區域 2 中刪除虛擬機器 2,因為該虛擬機器是該區域中最舊的虛擬機器。
相應縮小 3、4、5、10 6、9、11 1、7、8 選擇區域 1,即使區域 3 有最舊的 VM。 從區域 1 中刪除虛擬機器 3,因為該虛擬機器是該區域中最舊的虛擬機器。
相應縮小 4、5、10 6、9、11 1、7、8 區域已達到平衡。 刪除區域 3 中的虛擬機器 1,因為該虛擬機器是擴展集中最舊的虛擬機器。
相應縮小 4、5、10 6、9、11 7、8 在區域 1 和區域 2 之間選擇。 刪除區域 1 中的虛擬機器 4,因為該虛擬機器是兩個區域中最舊的虛擬機器。
相應縮小 5、10 6、9、11 7、8 選擇區域 2,即使區域 1 有最舊的 VM。 刪除區域 1 中的虛擬機器 6,因為該虛擬機器是該區域中最舊的虛擬機器。
相應縮小 5、10 9、11 7、8 區域已達到平衡。 刪除區域 1 中的虛擬機器 5,因為該虛擬機器是擴展集中最舊的虛擬機器。

若是非區域性虛擬機器擴展集,此原則會選取橫跨整個擴展集中最舊的虛擬機器進行刪除。 任何「受保護」的 VM 都會被略過而不刪除。

NewestVM 相應縮小原則

事件 區域 1 中的執行個體識別碼 區域 2 中的執行個體識別碼 區域 3 中的執行個體識別碼 相應縮小的選擇
Initial 3、4、5、10 2、6、9、11 1、7、8
相應縮小 3、4、5、10 2、6、9、11 1、7、8 在區域 1 和 2 之間選擇。 從區域 2 中刪除虛擬機器 11,因為該虛擬機器是兩個區域中最新的虛擬機器。
相應縮小 3、4、5、10 2、6、9 1、7、8 選擇區域 1,因為該區域擁有比其他兩個區域更多的 VM。 從區域 1 中刪除虛擬機器 10,因為該虛擬機器是該區域中最新的虛擬機器。
相應縮小 3、4、5 2、6、9 1、7、8 區域已達到平衡。 刪除區域 2 中的虛擬機器 9,因為該虛擬機器是擴展集中最新的虛擬機器。
相應縮小 3、4、5 2、6 1、7、8 在區域 1 和區域 3 之間選擇。 從區域 3 中刪除虛擬機器 8,因為該虛擬機器是該區域中最新的虛擬機器。
相應縮小 3、4、5 2、6 1, 7 選擇區域 1,即使區域 3 有最新的 VM。 從區域 1 中刪除虛擬機器 5,因為該虛擬機器是該區域中最新的虛擬機器。
相應縮小 3, 4 2、6 1、7 區域已達到平衡。 刪除區域 3 中的虛擬機器 7,因為該虛擬機器是擴展集中最新的虛擬機器。

若是非區域性虛擬機器擴展集,此原則會選取橫跨整個擴展集中最新的虛擬機器進行刪除。 任何「受保護」的 VM 都會被略過而不刪除。

疑難排解

  1. 如果您收到 ‘BadRequest’ 錯誤,錯誤訊息說明「在 ‘properties' 類型的物件上找不到成員 'scaleInPolicy'」,因而無法啟用 scaleInPolicy,則請檢查用於虛擬機器擴展集的 API 版本。 此功能需要 API 版本 2019-03-01 或更新版本。

  2. 針對縮減的虛擬機器選取錯誤 請參閱本文件中的範例。 如果您的虛擬機器擴展集是一個區域部署,則會先將縮減原則套用至不平衡區域,該區域達到平衡後,接著才橫跨擴展集進行套用。 如果縮減的順序與此處文件不一致,請向虛擬機器擴展集小組提出查詢,以進行疑難排解。

下一步

了解如何在虛擬機器擴展集上部署您的應用程式