本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用巢狀虛擬化在 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 執行個體上啟用巢狀虛擬化時:
-
安全責任 – 在 EC2 執行個體上使用巢狀虛擬化時, AWS 負責保護基礎基礎設施的「雲端安全性」,並維護 AWS Nitro 系統提供的 EC2 執行個體之間的強隔離界限。客戶負責「雲端安全」,其中包括保護 EC2 執行個體內的作業系統、Hypervisor、巢狀虛擬機器、訪客作業系統、應用程式和資料。
-
效能 – AWS 建議想要執行需要存取硬體虛擬化延伸模組的工作負載,且對效能敏感或具有嚴格延遲要求的客戶評估裸機執行個體。
在啟用巢狀虛擬化的情況下啟動新的執行個體
當您啟動新的執行個體時,您可以開啟巢狀虛擬化,在其上執行 Hypervisor 和虛擬機器。
- Console
-
在執行個體啟動期間啟用巢狀虛擬化
-
遵照 使用主控台中的啟動執行個體精靈,啟動 EC2 執行個體 程序並視需要設定執行個體。
-
確定已選取支援的執行個體類型。
-
展開進階詳細資訊,針對巢狀虛擬化,選擇啟用。
-
在 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
-
- 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。如果沒有,命令不會傳回任何輸出。