View a markdown version of this page

使用巢狀虛擬化在 Amazon EC2 執行個體中執行 Hypervisor - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用巢狀虛擬化在 Amazon EC2 執行個體中執行 Hypervisor

巢狀虛擬化可讓您在虛擬 Amazon EC2 執行個體內執行 Hyper-V 和 KVM 等 Hypervisor。虛擬 EC2 執行個體是非裸機執行個體。此功能透過將處理器層級虛擬化支援新增至虛擬 EC2 執行個體來擴展虛擬化彈性,讓執行個體中執行的 Hypervisor 能夠建立和管理虛擬機器。

當您在開發工作流程中執行 Docker Desktop、適用於 Linux 2 的 Windows 子系統 (WSL2)、Android Studio 模擬器或 QEMU 等開發工具時,巢狀虛擬化可協助您選擇符合特定效能和價格需求的各種標準虛擬 Amazon EC2 執行個體類型。

使用巢狀虛擬化無需額外費用。

運作方式

虛擬 EC2 執行個體會在具有 Nitro Hypervisor 的實體主機上執行。為了支援巢狀虛擬化,Nitro 系統會將 Intel VT-x 等處理器延伸模組傳遞至執行個體,以利執行巢狀虛擬機器。巢狀虛擬化架構包含三層:實體 AWS 基礎設施和 Nitro Hypervisor (L0)、執行 Hypervisor (L1) 的 EC2 執行個體,以及在該執行個體 (L2) 內建立的一或多個虛擬機器。

考量事項

開始使用巢狀虛擬化之前,請考慮下列事項:

  • 支援的執行個體類型 – 下列執行個體類型目前支援巢狀虛擬化:

    • 一般用途:M7i | M7i-flex | M8i | M8id | M8i-flex

    • 運算最佳化:C7i | C7i-flex | C8i | C8id | C8i-flex

    • 記憶體最佳化:R7i | R7iz | R8i | R8id | R8i-flex | X8i

    • 儲存最佳化:I7i | I7ie

  • 支援的 Hypervisor – 目前,KVM 和 Hyper-V 是支援的 L1 Hypervisor。

  • Windows 執行個體 – 在 Windows 執行個體上啟用巢狀虛擬化時:

    • Credential Guard – 虛擬安全模式 (VSM) 會自動停用。

    • 休眠 – 不支援執行個體休眠和繼續。

    • CPU 限制 – 不支援超過 192 個 CPUs Windows 執行個體,例如 m8i.96xl

  • 安全責任 – 在 EC2 執行個體上使用巢狀虛擬化時, AWS 負責保護基礎基礎設施「雲端安全性」,並維護 AWS Nitro 系統提供的 EC2 執行個體之間的強隔離界限。客戶負責「雲端安全」,其中包括保護 EC2 執行個體內的作業系統、Hypervisor、巢狀虛擬機器、訪客作業系統、應用程式和資料。

  • 效能 – AWS 建議想要執行需要存取硬體虛擬化延伸模組的工作負載,且對效能敏感或具有嚴格延遲要求的客戶評估裸機執行個體。

在啟用巢狀虛擬化的情況下啟動新的執行個體

當您啟動新的執行個體時,您可以開啟巢狀虛擬化,在其上執行 Hypervisor 和虛擬機器。

Console
在執行個體啟動期間啟用巢狀虛擬化
  1. 遵照 使用主控台中的啟動執行個體精靈,啟動 EC2 執行個體 程序並視需要設定執行個體。

  2. 確定已選取支援的執行個體類型。

  3. 展開進階詳細資訊,針對巢狀虛擬化,選擇啟用

  4. Summary (摘要) 面板中,檢閱您的執行個體組態,然後選擇 Launch instance (啟動執行個體)。

AWS CLI
在啟用巢狀虛擬化的情況下啟動執行個體

使用 run-instances 命令。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type r8i.4xlarge \ --cpu-options "NestedVirtualization=enabled" \ --key-name my-key-pair
PowerShell
在啟用巢狀虛擬化的情況下啟動執行個體

使用 New-EC2Instance 命令。

New-EC2Instance `     -ImageId ami-0abcdef1234567890 `     -InstanceType r8i.4xlarge `     -CpuOption @{NestedVirtualization='enabled'} `     -KeyName my-key-pair

設定現有執行個體以使用巢狀虛擬化

您可以在現有的 Amazon EC2 執行個體上開啟巢狀虛擬化。

先決條件
  • 執行個體必須處於 stopped 狀態。

  • 執行個體類型必須支援巢狀虛擬化。

Console
在現有執行個體上啟用巢狀虛擬化
  1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇執行個體

  3. 從執行個體資料表中選取您要修改的執行個體。

  4. 選擇動作執行個體設定變更 CPU 選項

  5. 變更 CPU 選項頁面上,針對巢狀虛擬化,選擇下列其中一個選項:

    • 啟用 – 開啟執行個體的巢狀虛擬化

    • 停用 – 關閉執行個體的巢狀虛擬化

  6. 檢閱您的變更,然後選擇變更以套用新的 CPU 選項。

AWS CLI
在現有執行個體上啟用巢狀虛擬化

首先停止執行個體,然後使用 modify-instance-cpu-options 命令。

aws ec2 modify-instance-cpu-options \ --instance-id i-1234567890abcdef0 \ --core-count 4 \ --threads-per-core 2 \ --nested-virtualization enabled
PowerShell
在現有執行個體上啟用巢狀虛擬化

首先停止執行個體,然後使用 Edit-EC2InstanceCpuOption 命令。

Edit-EC2InstanceCpuOption `     -InstanceId i-1234567890abcdef0 `     -CoreCount 4 `     -ThreadsPerCore 2 `     -NestedVirtualization enabled

尋找支援巢狀虛擬化的執行個體類型

您可以找到哪些 Amazon EC2 執行個體類型支援巢狀虛擬化。您可以查詢整個 AWS 區域 或檢查特定執行個體類型。

AWS CLI
列出支援區域中巢狀虛擬化的所有執行個體系列

使用 describe-instance-types 命令,並將processor-info.supported-features篩選條件設定為 的值nested-virtualization

aws ec2 describe-instance-types --region us-east-1 \ --filters "Name=processor-info.supported-features,Values=nested-virtualization" \ --query "InstanceTypes[].InstanceType" --output text \ | tr '\t' '\n' | cut -d. -f1 | sort -u
檢查特定執行個體類型是否支援巢狀虛擬化

使用 describe-instance-types 命令並查詢指定執行個體類型的ProcessorInfo.SupportedFeatures欄位:

aws ec2 describe-instance-types \ --instance-types m8i.2xlarge \ --query "InstanceTypes[].ProcessorInfo.SupportedFeatures"

如果執行個體類型支援巢狀虛擬化,則輸出會包含 nested-virtualization。如果沒有,命令會傳回空陣列 ([])。

PowerShell
列出支援區域中巢狀虛擬化的所有執行個體系列

使用 Get-EC2InstanceType 命令,並將processor-info.supported-features篩選條件設定為 的值nested-virtualization

Get-EC2InstanceType -Region us-east-1 -Filter @{ Name='processor-info.supported-features'; Values='nested-virtualization' } | ForEach-Object { ($_.InstanceType -split '\.')[0] } | Sort-Object -Unique
檢查特定執行個體類型是否支援巢狀虛擬化

使用 Get-EC2InstanceType 命令並查詢指定執行個體類型的 ProcessorInfo.SupportedFeatures 屬性:

(Get-EC2InstanceType -InstanceType m8i.2xlarge).ProcessorInfo.SupportedFeatures

如果執行個體類型支援巢狀虛擬化,則輸出會包含 nested-virtualization。如果沒有,命令不會傳回任何輸出。