Azure 虛擬機器擴展集常見問題集

取得關於 Azure 中虛擬機器擴展集常見問題集的解答。

擴展集的主要常見問題集

擴展集內可以有多少部 VM?

擴展集可以有 0 到 1,000 台以平台映像為基礎的虛擬機器 (VM),或 0 到 600 台以自訂映像為基礎的 VM。

在擴展集內是否支援資料磁碟?

是。 擴展集可以定義套用至集合中所有 VM 的連結資料磁碟設定。 如需詳細資訊,請參閱 Azure 擴展集和連結的資料磁碟。 其他用於儲存資料的選項包括:

  • Azure 受控磁碟 (進階 v2、進階、標準、Ultra)
  • Azure 檔案儲存體 (SMB 或 NFS 共用磁碟機)
  • Azure Netapp Files
  • Azure 共用磁碟
  • 作業系統磁碟機
  • 暫存磁碟機 (本機,未受 Azure 儲存體支援)
  • Azure 資料服務 (例如 Azure 表格儲存體或 Azure Blob 儲存體)
  • 外部資料服務 (例如遠端資料庫)

哪些 Azure 區域支援擴展集?

所有區域都支援擴展集。

虛擬機器擴展集支援哪種 SKU?

虛擬機器擴展集支援所有 SKU。

如何使用自訂映像建立擴展集?

建立並擷取 VM 映像,然後使用該映像作為擴展集的來源。 如需關於如何建立及使用自訂 VM 映像的教學課程,您可以使用 Azure CLIAzure PowerShell

OS 映射升級與重新映像之間的差異為何?

OS 映像升級是一個漸進且非干擾性的程式,可逐步更新整個虛擬機器擴展集的 OS 映像,確保讓執行工作負載的影響降到最低。

重新安裝映像是一個更立即且干擾性的動作,只會影響選取的 VM 執行個體、暫時停止並重新安裝 OS。

深入了解 OS 映像升級與重新安裝映像之間的差異

如果我將擴展集容量從 20 減少為 15,哪些 VM 會被移除?

依預設,虛擬機器會在可用性區域 (如果擴展集是以區域設定部署的) 和容錯網域之間平均地從擴展集移除,以將可用性最大化。 系統會先移除具有最高識別碼的 VM。

您可以針對擴展集指定縮減原則,藉此變更虛擬機器的移除順序。

如果我後續又將容量從 15 增加到 18 呢?

如果您將容量增加到 18,則會建立 3 個新的 VM。 每次 VM 執行個體識別碼都會從上一個最高值遞增 (例如 20、21、22)。 虛擬機器在各容錯網域之間是平衡的。

在擴展集內使用多個延伸模組時,是否可以強制執行「執行順序」?

是,您可以使用擴展集擴充功能排序

擴展集是否可與 Azure 可用性設定組組搭配使用?

區域 (非區域) 擴展集會使用「放置群組」,其可作為隱含的可用性設定組,並具有五個容錯網域和五個更新網域。 具有 100 部以上 VM 的擴展集會跨越多個放置群組。 如需放置群組的詳細資訊,請參閱使用大型的虛擬機器擴展集。 VM 的可用性設定組可以存在於與 VM 擴展集相同的虛擬網路中。 常見組態是在可用性設定組中放入控制節點 VM (其通常需要唯一組態),以及在擴展集中放入資料節點。

擴展集是否可與 Azure 可用性區域搭配使用?

是。 如需詳細資訊,請參閱擴展集區域文件

Autoscale

什麼是 Azure 自動調整的最佳作法?

哪裡可以找到使用主機型計量自動調整的計量名稱?

是否有任何根據 Azure 服務匯流排主題和佇列長度自動調整的範例?

是。 如需這些範例,請參閱 Azure 監視器自動調整的常用計量

如需服務匯流排佇列,請使用下列 JSON:

"metricName": "MessageCount",
"metricNamespace": "",
"metricResourceUri": "/subscriptions/s1/resourceGroups/rg1/providers/Microsoft.ServiceBus/namespaces/mySB/queues/myqueue"

如需儲存體佇列,請使用下列 JSON:

"metricName": "ApproximateMessageCount",
"metricNamespace": "",
"metricResourceUri": "/subscriptions/s1/resourceGroups/rg1/providers/Microsoft.ClassicStorage/storageAccounts/mystorage/services/queue/queues/mystoragequeue"

以您資源的統一資源識別項 (URI) 取代範例值。

我應該使用主機型計量或診斷擴充功能進行自動調整?

您可以在 VM 上建立自動調整設定,以使用主機層級計量或客體作業系統型計量。

如需支援的計量資訊,請參閱 Azure 監視器的自動調整常見計量

如需虛擬機器擴展集的完整範例,請參閱使用虛擬機器擴展集的 Resource Manager 範本進行進階自動調整設定

此範例使用主機層級 CPU 計量及訊息計數計量。

如何設定虛擬機器擴展集的警示規則?

您可以透過 PowerShell 或 Azure CLI 來建立虛擬機器擴展集計量的警示。 如需詳細資訊,請參閱 Azure 監視器 PowerShell 快速入門範例Azure 監視器跨平台 CLI 快速入門範例

虛擬機器擴展集的 TargetResourceId 如下所示:

/subscriptions/yoursubscriptionid/resourceGroups/yourresourcegroup/providers/Microsoft.Compute/virtualMachineScaleSets/yourvmssname

您可以選擇任何 VM 效能計數器做為要設定警示的計量。 如需詳細資訊,請參閱 Azure 監視器的自動調整常用計量一文中的 Resource Manager 型 Windows VM 的客體作業系統計量Linux VM 的客體作業系統計量

如何使用 PowerShell 在虛擬機器擴展集上設定自動調整?

請參閱自動調整虛擬機器擴展集。 您也可以透過 Azure CLIAzure 範本設定自動調整規模。

如果我已停止 (已取消配置) VM,該 VM 是否在自動調整作業中啟動?

否。 如果自動調整規則需有更多的 VM 執行個體作為擴展集的一部分,則會建立新的 VM 執行個體。 已停止 (已取消配置) 的 VM 執行個體不會在自動調整事件中啟動。 不過,這些已停止 (已取消配置) 的 VM 可能會在執行個體數目相應縮小的自動調整事件中遭到刪除,同樣地系統可以根據 VM 執行個體識別碼的順序刪除任何 VM 執行個體。

憑證

如何安全地將憑證送至 VM?

若要安全地將憑證送至 VM,您可以將客戶憑證直接安裝至客戶金鑰保存庫中的 Windows 憑證存放區。

使用下列 JSON:

"secrets": [
    {
        "sourceVault": {
            "id": "/subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1"
        },
        "vaultCertificates": [
            {
                "certificateUrl": "https://mykeyvault1.vault.azure.net/secrets/{secretname}/{secret-version}",
                "certificateStore": "certificateStoreName"
            }
        ]
    }
]

程式碼支援 Windows 和 Linux。

如需詳細資訊,請參閱建立或更新虛擬機器擴展集

如何使用為 Azure Service Fabric 叢集佈建的自我簽署憑證?

如需最新的範例,請在 Azure shell 中使用下列 Azure CLI 陳述式,這將會列印至 stdout:

az sf cluster create -h

自我簽署的憑證無法用於憑證授權單位所提供的分散式信任,也不應該用於任何要裝載企業生產解決方案的 Service Fabric 叢集。 如需其他安全性指導,請參閱 Azure Service Fabric 安全性最佳做法Service Fabric 叢集安全性案例

是否可指定 SSH 金鑰組以便透過 Resource Manager 範本中的 Linux 虛擬機器擴展集來進行 SSH 驗證?

是。 osProfile 的 REST API 類似於標準 VM REST API。

osProfile 納入您的範本中:

"osProfile": {
    "computerName": "[variables('vmName')]",
    "adminUsername": "[parameters('adminUserName')]",
    "linuxConfiguration": {
        "disablePasswordAuthentication": "true",
        "ssh": {
            "publicKeys": [
                {
                    "path": "[variables('sshKeyPath')]",
                    "keyData": "[parameters('sshKeyData')]"
                }
            ]
        }
    }
}

此 JSON 區塊可用於 Azure 快速入門範本

如需詳細資訊,請參閱建立或更新虛擬機器擴展集

如何移除已被取代的憑證?

若要移除已被取代的憑證,請從保存庫憑證清單中移除舊的憑證。 將您想要的所有憑證保留在清單中的電腦上。 此動作不會從所有的 VM 移除憑證。 但也不會將憑證新增至虛擬機器擴展集中所建立的新 VM。

若要從現有的虛擬機器中移除憑證,請使用自訂指令碼擴充功能,以從您的憑證存放區中手動移除憑證。

如何在佈建期間將現有的 SSH 公開金鑰插入至虛擬機器擴展集 SSH 層?

如果您只透過 SSH 公開金鑰提供 VM,則不需要將公開金鑰放在 Azure Key Vault 中。 公開金鑰不是秘密。

您可以在建立 Linux VM 時以純文字提供 SSH 公開金鑰:

"linuxConfiguration": {
    "ssh": {
        "publicKeys": [
            {
                "path": "path",
                "keyData": "publickey"
            }
        ]
    }
}
linuxConfiguration 元素名稱 必要 類型​ 描述
ssh No 集合 指定 Linux 作業系統的 SSH 金鑰設定。
path Yes String 指定 SSH 金鑰或憑證應位於的 Linux 檔案路徑。
keyData Yes String 指定 Base64 編碼的 SSH 公開金鑰。

例如,請參閱 vm-sshkey GitHub 快速入門範本

當我從相同的金鑰保存庫新增一個以上的憑證之後,執行 `Update-AzVmss` 時,為什麼會收到錯誤訊息?

如果您嘗試重新新增相同的保存庫,而不是對現有的來源保存庫使用新的保存庫憑證,就會發生此錯誤。 如果您要新增其他秘密,則 Add-AzVmssSecret 命令無法正常運作。

若要從相同的金鑰保存庫新增更多秘密,請更新下列清單:$vmss.properties.osProfile.secrets[0].vaultCertificates

如需預期的輸入結構,請參閱建立或更新虛擬機器擴展集

在金鑰保存庫中的虛擬機器擴展集物件中尋找密碼。 然後,將憑證參考 (URL 及密碼存放區名稱) 新增至與保存庫相關聯的清單。

注意

目前,您無法使用虛擬機器擴展集 API 從 VM 中移除憑證。

新的 VM 不會有舊的憑證。 不過,具有憑證且已經部署的 VM 會有舊的憑證。

當憑證位於密碼存放區時,可以將憑證推送至虛擬機器擴展集而無須提供密碼?

您不需要將密碼硬式編碼在指令碼中。 您可以使用您用來執行部署指令碼的權限動態擷取密碼。 如果您的指令碼會從密碼存放區金鑰保存庫移動憑證,則密碼存放區 get certificate 命令也會輸出 pfx 檔案的密碼。

虛擬機器擴展集的 `virtualMachineProfile.osProfile` 的 `Secrets` 屬性如何運作? 當我必須使用 `certificateUrl` 屬性來指定憑證的絕對 URI 時,為什麼需要 `sourceVault` 值?

必須在作業系統設定檔的 Secrets 屬性中顯示 Windows 遠端管理 (WinRM) 憑證參考。

指出來源保存庫的目的是要強制執行使用者的 Azure 雲端服務模型中存在的存取控制清單 (ACL) 原則。 如果未指定來源保存庫,則沒有權限可存取密碼或將密碼部署至金鑰保存庫的使用者便能夠透過計算資源提供者 (CRP)。 甚至不存在的資源也會有 ACL。

如果您提供不正確的來源保存庫識別碼,但為有效的金鑰保存庫 URL,則系統會在您輪詢作業時報告錯誤。

如果我將密碼新增至現有虛擬機器擴展集,則新的密碼會插入現有的 VM,或只會插入新的 VM?

憑證會新增至所有 VM,甚至是既有的 VM。 如果虛擬機器擴展集 upgradePolicy 屬性設定為 manual,當您在 VM 上執行手動更新時,憑證會新增至 VM。

將 Linux VM 的憑證放在哪裡?

若要了解如何部署 Linux VM 的憑證,請參閱將憑證從客戶管理的金鑰保存庫部署到 VM

如何將新的保存庫憑證新增至新的憑證物件?

若要將保存庫憑證新增至現有的密碼,請參閱下列 PowerShell 範例。 只使用一個密碼物件。

$newVaultCertificate = New-AzVmssVaultCertificateConfig -CertificateStore MY -CertificateUrl https://sansunallapps1.vault.azure.net:443/secrets/dg-private-enc/55fa0332edc44a84ad655298905f1809

$vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Add($newVaultCertificate)

Update-AzVmss -VirtualMachineScaleSet $vmss -ResourceGroup $rg -Name $vmssName

如果我重新安裝映像 VM,憑證會發生什麼事?

如果您重新安裝 VM 映像,則會刪除憑證。 重新安裝映像會刪除整個作業系統磁碟。

如果我從金鑰保存庫中刪除憑證會發生什麼事?

如果從金鑰保存庫中刪除密碼,然後您對所有 VM 執行 stop deallocate 而後再次啟動它們,您會發生失敗。 發生失敗的原因是 CRP 需要從金鑰保存庫擷取密碼,但無法這麼做。 在此案例中,您可以從虛擬機器擴展集模型刪除憑證。

CRP 元件不會讓客戶秘密持續存在。 如果您對虛擬機器擴展集中的所有 VM 執行 stop deallocate,則會刪除快取。 在此案例中會從金鑰保存庫中擷取密碼。

您不會在相應放大時遇到此問題,因為 Azure Service Fabric 中有一個快取的密碼副本 (在單一網狀架構租用戶模型中)。

使用 Key Vault 時,為什麼必須指定憑證版本?

目的在於讓使用者清楚了解其 VM 上所部署的憑證。

如果您建立 VM,然後更新金鑰保存庫中的密碼,新的憑證不會下載至您的 VM。 但您的 VM 似乎會參考它,且新的 VM 會取得新的密碼。 若要避免這個問題,您必須參考密碼版本。

我的小組會使用發佈給我們做為 .cer 公開金鑰的多個憑證。 將這些憑證部署至虛擬機器擴展集的建議方法為何?

若要將 .cer 公開金鑰部署至虛擬機器擴展集,您可以產生僅包含 .cer 檔案的 .pfx 檔案。 若要這樣做,請使用 X509ContentType = Pfx。 例如,載入 .cer 檔案作為 C# 或 PowerShell 中的 x509Certificate2 物件,然後呼叫此方法。

如需詳細資訊,請參閱 X509Certificate.Export 方法 (X509ContentType, String)

如何以 base64 字串的形式傳遞憑證?

若要模擬傳入憑證做為 base64 字串,您可以在 Resource Manager 範本中擷取最新版的 URL。 在 Resource Manager 範本中包含下列 JSON 屬性︰

"certificateUrl": "[reference(resourceId(parameters('vaultResourceGroup'), 'Microsoft.KeyVault/vaults/secrets', parameters('vaultName'), parameters('secretName')), '2015-06-01').secretUriWithVersion]"

我們必須在金鑰保存庫的 JSON 物件中包裝憑證嗎?

在虛擬機器擴展集和 VM 中,憑證必須包裝在 JSON 物件中。

我們也支援內容類型 application/x-pkcs12

我們目前不支援 .cer 檔案。 若要使用 .cer 檔案,請將它們匯出到 .pfx 容器。

合規性與安全性

虛擬機器擴展集符合 PCI 規範嗎?

虛擬機器擴展集是以 CRP 為基礎的精簡 API 層。 這兩個元件都在 Azure 服務樹狀目錄中計算平台的一部分。

就相容性的觀點而言,虛擬機器擴展集是 Azure 計算平台的基本部分。 其會與 CRP 本身共用下列項目:小組、工具、程序、部署方法、安全性控制、Just-In-Time (JIT) 編譯、監控和警示。 虛擬機器擴展集符合支付卡產業 (PCI) 規範,因為 CRP 是目前 PCI 資料安全標準 (DSS) 證明的一部分。

如需詳細資訊,請參閱 Microsoft 信任中心

Azure 資源的受控識別是否可以與虛擬機器擴展集搭配運作?

是。 如需詳細資訊,請參閱受控識別概觀。 您可以在適用於 LinuxWindows 的 Azure 快速入門範本中,看到某些範例 MSI 範本。

刪除中

當我刪除執行個體時,是否會遵守我在虛擬機器擴展集執行個體上設定的鎖定?

在 Azure 入口網站中,您可以藉由選取多個執行個體來刪除個別執行個體或大量刪除。 如果您嘗試刪除已就地鎖定的單一執行個體,則會遵循鎖定,而且您無法刪除該執行個體。 但是,如果您大量選取多個執行個體,且其中任何一個執行個體都有鎖定,則不會遵守鎖定。 系統將刪除所有選取的執行個體。

在 Azure CLI 中,您只能刪除個別執行個體。 如果您嘗試刪除已就地鎖定的單一執行個體,則會遵循鎖定,而且您無法刪除該執行個體。

擴充

如何刪除虛擬機器擴展集擴充功能?

若要刪除虛擬機器擴展集擴充功能,請使用下列 PowerShell 範例:

$vmss = Get-AzVmss -ResourceGroupName "resource_group_name" -VMScaleSetName "vmssName"

$vmss=Remove-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "extensionName"

Update-AzVmss -ResourceGroupName "resource_group_name" -VMScaleSetName "vmssName" -VirtualMacineScaleSet $vmss

您可以在 $vmss 中找到 extensionName 值。

是否有與 Azure 監視器記錄整合的虛擬機器擴展集範本範例?

如需與 Azure 監視器記錄整合的虛擬機器擴展集範本範例,請參閱部署 Azure Service Fabric 叢集並使用 Azure 監視器記錄來啟用監視中的第二個範例。

如何將擴充功能新增至虛擬機器擴展集中的所有 VM?

如果將更新原則設定為自動,使用新的擴充屬性重新部署範本便會更新所有 VM。

如果將更新原則設定為手動,請先更新擴充功能,然後手動更新 VM 中的所有執行個體。

如果更新與現有虛擬機器擴展集相關聯的擴充功能,現有的 VM 是否會受影響?

如果已更新虛擬機器擴展集模型中的擴充定義且 upgradePolicy 屬性設定為 automatic,則會更新 VM。 如果 upgradePolicy 屬性設定為 manual,則會將擴充功能標示為不符合模型。

當現有機器為服務修復或重新安裝映像時,是否會再次執行擴充功能?

如果現有的 VM 為服務修復,則會呈現重新開機狀態,且不會重新執行擴充功能。 如果 VM 已重新安裝映像,則該流程類似於以來源映像取代作業系統磁碟機。 系統會再次執行最新模型的任何特製化,例如擴充功能。

如何將虛擬機器擴展集加入至 Active Directory 網域?

若要將虛擬機器擴展集加入至 Active Directory 網域,您可以定義擴充功能。

若要定義擴充功能,請使用 JsonADDomainExtension 屬性:

"extensionProfile": {
    "extensions": [
        {
            "name": "joindomain",
            "properties": {
                "publisher": "Microsoft.Compute",
                "type": "JsonADDomainExtension",
                "typeHandlerVersion": "1.3",
                "settings": {
                    "Name": "[parameters('domainName')]",
                    "OUPath": "[variables('ouPath')]",
                    "User": "[variables('domainAndUsername')]",
                    "Restart": "true",
                    "Options": "[variables('domainJoinOptions')]"
                },
                "protectedsettings": {
                    "Password": "[parameters('domainJoinPassword')]"
                }
            }
        }
    ]
}

我的虛擬機器擴展集擴充功能正嘗試安裝需要重新開機的項目。 我該怎麼做?

您可以使用 Azure 自動化 Desired State Configuration 擴充功能。 如果作業系統是 Windows Server 2012 R2,Azure 會提取 Windows Management Framework (WMF) 5.0 安裝程式,重新開機,然後繼續進行設定。

如何執行裝載於私人儲存體帳戶的自訂指令碼?

使用儲存體帳戶金鑰和名稱來設定受保護的設定。 如需詳細資訊,請參閱自訂指令碼擴充功能

密碼

如何重設虛擬機器擴展集中 VM 的密碼?

您可以:

  • 直接變更虛擬機器擴展集模型。 此選項僅適用於 API 2017-12-01 和更新版本。

    直接在擴展集模型中更新系統管理員認證 (例如,透過使用 Azure 資源總管、PowerShell 或 Azure CLI)。 擴展集更新之後,所有的新 VM 就會有新的認證。 現有的虛擬機器則要在重新安裝映像後,才會擁有新的認證。

  • 使用 VM 存取擴充功能以重設密碼。 請務必遵循密碼需求,如常見問題集中所述。

    使用 VM 存取擴充功能不需要重新安裝映像,因為擴充功能不會更新模型中的密碼。 擴充功能會執行指令碼,將密碼附加至密碼或 SSH 金鑰檔案。 擴充功能不會移除原始 SSH 金鑰。 更新延伸模組之後,請升級執行個體,以將更新套用至所有 VM 執行個體的使用者名稱和密碼。

    注意

    如果自動升級原則設定為 manual,請手動選取執行個體,以在個別 VM 執行個體上執行升級作業。 如果自動升級設定為 Auto,則延伸模組會自動升級。 如需詳細資訊,請參閱延伸模組自動升級

    針對 Windows 虛擬機器擴展集,請使用下列 PowerShell 範例:

    $vmssName = "myvmss"
    $vmssResourceGroup = "myvmssrg"
    $publicConfig = @{"UserName" = "newuser"}
    $privateConfig = @{"Password" = "********"}
    
    $extName = "VMAccessAgent"
    $publisher = "Microsoft.Compute"
    $vmss = Get-AzVmss -ResourceGroupName $vmssResourceGroup -VMScaleSetName $vmssName
    $vmss = Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name $extName -Publisher $publisher -Setting $publicConfig -ProtectedSetting $privateConfig -Type $extName -TypeHandlerVersion "2.0" -AutoUpgradeMinorVersion $true
    Update-AzVmss -ResourceGroupName $vmssResourceGroup -Name $vmssName -VirtualMachineScaleSet $vmss
    

    針對 Linux 虛擬機器擴展集,請使用下列 Azure CLI 範例:

    az vmss extension set \
      --resource-group myResouceGroup \ 
      --vmss-name myScaleSet \
      --publisher Microsoft.OSTCExtensions \
      --name VMAccessForLinux \
      --version 1.5 \
      --protected-settings "{'username': 'newUser', 'password': 'newPassword'}"
    

網路

是否可以將網路安全性群組 (NSG) 指派給擴展集,以便將它套用至擴展集中的所有 VM NIC?

是。 您可以在網路設定檔的 networkInterfaceConfigurations 區段中參考它,將 NSG 直接套用至擴展集。 以下是範例:

"networkProfile": {
    "networkInterfaceConfigurations": [
        {
            "name": "nic1",
            "properties": {
                "primary": "true",
                "ipConfigurations": [
                    {
                        "name": "ip1",
                        "properties": {
                            "subnet": {
                                "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'), '/subnets/subnet1')]"
                            },
                            "loadBalancerInboundNatPools": [
                                {
                                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/inboundNatPools/natPool1')]"
                                }
                            ],
                            "loadBalancerBackendAddressPools": [
                                {
                                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/backendAddressPools/addressPool1')]"
                                }
                            ]
                        }
                    }
                ],
                "networkSecurityGroup": {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/networkSecurityGroups/', variables('nsgName'))]"
                }
            }
        }
    ]
}

如何在相同訂用帳戶和相同區域中進行虛擬機器擴展集的虛擬 IP VIP 交換?

如果您擁有兩個含 Azure Load Balancer 的虛擬機器擴展集,且都位於相同的訂用帳戶和區域,則您可以解除配置其中一個擴展集的公用 IP 位址,並指派給另一個。 如需詳細資訊,請參閱 VIP 交換:Azure Resource Manager 中的藍綠部署。 您可能會遇到延遲,因為在網路層級解除配置/配置資源。 更快的選項是搭配兩個後端集區和一個路由規則來使用 Azure 應用程式閘道。 或者,您可以透過 Azure App Service 裝載應用程式,以支援在預備與生產位置之間快速切換。

如何指定要用於靜態私人 IP 位址配置的私人 IP 位址範圍?

系統會從您指定的子網路選取 IP 位址。

虛擬機器擴展集 IP 位址的配置方法永遠是「動態」,但這並不表示可以變更這些 IP 位址。 在此情況下,動態只表示您不會在 PUT 要求中指定 IP 位址。 使用子網路指定靜態設定。

如何將虛擬機器擴展集部署至現有的 Azure 虛擬網路?

我可以搭配加速網路使用擴展集嗎?

是。 若要使用加速網路,請在擴展集的 networkInterfaceConfigurations 設定中將 enableAcceleratedNetworking 設定為 true。 例如:

"networkProfile": {
    "networkInterfaceConfigurations": [
        {
            "name": "niconfig1",
            "properties": {
                "primary": true,
                "enableAcceleratedNetworking" : true,
                "ipConfigurations": [
                ]
            }
        }
    ]
}

如何設定擴展集所使用的 DNS 伺服器?

若要使用自訂 DNS 設定來建立虛擬機器擴展集,請將 dnsSettings JSON 封包新增至擴展集 networkInterfaceConfigurations 區段。 以下是範例:

    "dnsSettings":{
        "dnsServers":["10.0.0.6", "10.0.0.5"]
    }

如何設定擴展集以將公用 IP 位址指派給每部 VM?

若要建立虛擬機器擴展集以將公用 IP 位址指派給每部 VM,請確定 Microsoft.Compute/virtualMachineScaleSets 資源的 API 版本為 2017-03-30,並將 publicipaddressconfiguration JSON 封包新增至擴展集 ipConfigurations 區段。 以下是範例:

    "publicipaddressconfiguration": {
        "name": "pub1",
        "properties": {
        "idleTimeoutInMinutes": 15
        }
    }

我可以設定擴展集以搭配多個應用程式閘道使用嗎?

是。 您可以將多個應用程式閘道後端位址集區的資源識別碼新增至擴展集網路設定檔 ipConfigurations 區段的 applicationGatewayBackendAddressPools 清單。

調整

在何種情況下,我會建立具有兩部以下 VM 的虛擬機器擴展集?

建立具有兩台以下 VM 的虛擬機器擴展集的原因之一,就是要使用虛擬機器擴展集的彈性屬性。 例如,您可部署沒有任何 VM 的虛擬機器擴展集來定義您的基礎結構,而不必支付 VM 執行成本。 然後,當您準備好要部署 VM 時,可以將虛擬機器擴展集的容量增加至生產執行個體計數。

建立具有兩台以下 VM 的虛擬機器擴展集的另一個原因,就是相較於使用具有離散 VM 的可用性設定組,您可能比較不擔心可用性。 虛擬機器擴展集能讓您使用可替代的無差異計算單位。 這種一致性是虛擬機器擴展集與可用性設定組的關鍵區別指標。 許多無狀態的工作負載都不會追蹤個別的單位。 如果工作負載減少,您可以縮小為一個計算單位,然後在工作負載增加時擴大為許多計算單位。

如何變更虛擬機器擴展集中的 VM 數目?

若要在 Azure 入口網站中變更虛擬機器擴展集中的虛擬機器數目,請在虛擬機器擴展集 [屬性] 區段中,選取 [調整] 窗格並使用滑桿。

如何定義觸達特定臨界值時的自訂警示?

您在處理指定之臨界值的警示時有一些彈性。 例如,您可以定義自訂的 webhook。 下列 webhook 範例來自 Resource Manager 範本:

{
    "type": "Microsoft.Insights/autoscaleSettings",
    "apiVersion": "[variables('insightsApi')]",
    "name": "autoscale",
    "location": "[parameters('resourceLocation')]",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]"
    ],
    "properties": {
        "name": "autoscale",
        "targetResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]",
        "enabled": true,
        "notifications": [
            {
                "operation": "Scale",
                "email": {
                    "sendToSubscriptionAdministrator": true,
                    "sendToSubscriptionCoAdministrators": true,
                    "customEmails": [
                        "youremail@address.com"
                    ]
                },
                "webhooks": [
                    {
                        "serviceUri": "<service uri>",
                        "properties": {
                            "key1": "custommetric",
                            "key2": "scalevmss"
                        }
                    }
                ]
            }
        ]
    }
}

修補和作業

是否可以在現有資源群組中建立擴展集?

是的,可以。

是否可以將擴展集移至另一個資源群組?

是,您可以將擴展集資源移至新的訂用帳戶或資源群組。

如何將虛擬機器擴展集更新為新的映像? 如何管理修補?

若要將虛擬機器擴展集更新為新的映像,以及管理修補,請參閱升級虛擬機器擴展集

是否可以使用重新安裝映像作業來重設 VM,而不變更映像? (也就是,我想要將 VM 重設為原廠設定,而不是新的映像。)

是,您可以使用重新安裝映像作業來重設 VM,而不需變更映像。 不過,如果虛擬機器擴展集參考 version = latest 的平台映像,當您呼叫 reimage 時,您的 VM 可以更新為較新版本的作業系統映像。

是否有可能將擴展集與 Azure 監視器記錄整合?

是,您可以藉由在擴展集 VM 上安裝 Azure 監視器擴充功能以進行整合。 以下是使用 Azure CLI 的範例:

az vmss extension set --name MicrosoftMonitoringAgent --publisher Microsoft.EnterpriseCloud.Monitoring --resource-group Team-03 --vmss-name nt01 --settings "{'workspaceId': '<your workspace ID here>'}" --protected-settings "{'workspaceKey': '<your workspace key here'}"

您可以在 Azure 入口網站的 Log Analytics 工作區中找到需要的 workspaceIdworkspaceKey。 在 [概觀] 頁面上,選取 [設定] 磚。 選取頂端的 [連線來源] 索引標籤。

注意

如果您的擴展集 upgradePolicy 設為手動,則必須透過呼叫升級,將擴充功能套用至集合中的所有虛擬機器。 在 Azure CLI 中,這是 az vmss update-instances

注意

本文最近有所更新,改為使用「Azure 監視器記錄」一詞,而非 Log Analytics。 記錄資料仍儲存在 Log Analytics 工作區中,並仍由相同的 Log Analytics 服務收集和分析。 我們會持續更新術語,以更精確地反映 Azure 監視器記錄的角色。 如需詳細資料,請參閱 Azure 監視器遙測變更

疑難排解

如何開啟開機診斷?

若要開啟開機診斷,首先建立儲存體帳戶。 然後,將此 JSON 區塊放在虛擬機器擴展集 virtualMachineProfile 中,並更新此虛擬機器擴展集:

"diagnosticsProfile": {
    "bootDiagnostics": {
        "enabled": true,
        "storageUri": "http://yourstorageaccount.blob.core.windows.net"
    }
}

建立新的 VM 時,VM 的 InstanceView 屬性會顯示螢幕擷取畫面的詳細資料。 以下是範例:

"bootDiagnostics": {
    "consoleScreenshotBlobUri": "https://o0sz3nhtbmkg6geswarm5.blob.core.windows.net/bootdiagnostics-swarmagen-4157d838-8335-4f78-bf0e-b616a99bc8bd/swarm-agent-9574AE92vmss-0_2.4157d838-8335-4f78-bf0e-b616a99bc8bd.screenshot.bmp",
    "serialConsoleLogBlobUri": "https://o0sz3nhtbmkg6geswarm5.blob.core.windows.net/bootdiagnostics-swarmagen-4157d838-8335-4f78-bf0e-b616a99bc8bd/swarm-agent-9574AE92vmss-0_2.4157d838-8335-4f78-bf0e-b616a99bc8bd.serialconsole.log"
}

要如何針對其他問題進行疑難排解?

虛擬機器屬性

如何取得每部 VM 的屬性資訊,而不進行多次呼叫? 例如,如何針對虛擬機器擴展集中的 100 部 VM 取得各自的容錯網域?

您可以藉由在下列資源 URI 上進行 REST API GET 來呼叫 ListVMInstanceViews

/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/virtualMachineScaleSets/<scaleset_name>/virtualMachines?$expand=instanceView&$select=instanceView

請注意,當擴展集使用擴張上限 (platformFaultDomainCount = 1) 時,不會傳回容錯網域,因為無法保證此設定會使用多少容錯網域。

是否可以將不同的擴充引數傳遞至虛擬機器擴展集中的不同 VM?

否,您無法進行這項操作。 不過,擴充功能可以根據它們執行所在 VM 的唯一屬性來行動,例如根據電腦名稱。 擴充功能也可以在 http://169.254.169.254 上查詢執行個體中繼資料,以取得 VM 詳細資訊。

為何我的虛擬機器擴展集 VM 電腦名稱與 VM 識別碼之間會有間隙 (例如 0、1、3)?

間隙是因為您的虛擬機器擴展集 overprovision 屬性已設定為預設值 true。 如果超額佈建設定為 true,則會建立超過要求數目的 VM。 然後會刪除額外的 VM。 在此情況下,您會取得更高的部署可靠性,但代價是連續的命名和連續的網路位址轉譯 (NAT) 規則。

您可以將此屬性設定為 false。 若為小型虛擬機擴展集,部署可靠性不會受到重大影響。

刪除虛擬機器擴展集中的 VM 與解除配置 VM 之間的差異為何? 我何時應該選擇優先其中一個?

主要差異在於 deallocate 不會刪除虛擬硬碟 (VHD)。 執行 stop deallocate 會產生相關的儲存體成本。 基於下列原因之一,您可能會採用其中一種做法:

  • 您想要停止支付計算成本,但又想要保留 VM 的磁碟狀態。
  • 您想要更快速地啟動一組 VM,則可擴增虛擬機器擴展集。
    • 關於這種情況,您可能已建立自己的自動調整引擎,並想要更快速的端對端擴展。
  • 您的虛擬機器擴展集並未平均分散於各容錯網域或更新網域。 這種不平均散佈可能是因為您選擇性地刪除 VM,或是因為 VM 在過度佈建之後遭到刪除。 在虛擬機器擴展集上接續執行 stop deallocatestart,可讓 VM 平均分散於各容錯網域或更新網域。

如何取得虛擬機器擴展集執行個體的快照集?

從虛擬機器擴展集的執行個體建立快照集。 以下是範例:

$rgname = "myResourceGroup"
$vmssname = "myVMScaleSet"
$Id = 0
$location = "East US"

$vmss1 = Get-AzVmssVM -ResourceGroupName $rgname -VMScaleSetName $vmssname -InstanceId $Id
$snapshotconfig = New-AzSnapshotConfig -Location $location -AccountType Standard_LRS -OsType Windows -CreateOption Copy -SourceUri $vmss1.StorageProfile.OsDisk.ManagedDisk.id
New-AzSnapshot -ResourceGroupName $rgname -SnapshotName 'mySnapshot' -Snapshot $snapshotconfig

從快照集建立受控磁碟。 以下是範例:

$snapshotName = "mySnapshot"
$snapshot = Get-AzSnapshot -ResourceGroupName $rgname -SnapshotName $snapshotName
$diskConfig = New-AzDiskConfig -AccountType Premium_LRS -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id
$osDisk = New-AzDisk -Disk $diskConfig -ResourceGroupName $rgname -DiskName ($snapshotName + '_Disk')