共用方式為


Windows Server 容器的效能調整

簡介

從 Windows Server 2022 開始,有兩種類型的容器可供使用:Windows Server 容器和 Hyper-V 容器。 每個容器類型都支援 Windows Server 2022 的 Server Core 或 Nano Server SKU。

這些組態有不同的效能影響,我們會詳述以下內容,以協助您瞭解哪一個適合您的案例。 此外,我們會詳細說明影響效能的配置,並描述每個選項的取捨。

Windows Server 容器和Hyper-V 容器

Windows Server 容器和 Hyper-V 容器提供許多相同的可移植性和一致性優點,但在隔離保證和效能特性方面有所不同。

Windows Server 容器 透過進程和命名空間隔離技術提供應用程式隔離。 Windows Server 容器會與容器主機和主機上執行的所有容器共用核心。

Hyper-V 容器 會藉由在高度優化的虛擬機中執行每個容器,來擴充 Windows Server 容器所提供的隔離。 在此設定中,容器主機的核心不會與 Hyper-V 容器共用。

Hyper-V 容器所提供的額外隔離,大部分是由容器與容器主機之間隔離的 Hypervisor 層所達成。 這會影響容器密度,因為與 Windows Server 容器不同,系統檔案和二進位檔的共用可能會減少,因而造成整體較大的記憶體和記憶體使用量。 此外,某些網路、記憶體 IO 和 CPU 路徑預期會有進一步的額外負荷。

Nano Server 和 Server Core

Windows Server 容器和 Hyper-V 容器支援 Server Core,深入瞭解 容器基底映射選項

Nano Server 是針對私人雲端和數據中心優化的遠端管理伺服器作系統。 它類似於 Server Core 模式中的 Windows Server,但明顯較小,沒有本機登入功能,而且只支援 64 位應用程式、工具和代理程式。 它佔用的磁碟空間要少得多、設定速度明顯更快,而且需要比 Windows Server 少得多的更新和重新啟動。 當重新啟動時,重新啟動的速度會更快。

容器 Start-Up 時間

容器啟動時間是容器提供最大優點的許多案例中的重要計量。 因此,瞭解如何優化容器啟動時間非常重要。 以下是一些需要理解的調整取捨,以改善啟動時間為目標。

第一次登入

Microsoft 提供適用於 Nano Server 和 Server Core 的基礎映像。 Server Core 隨提供的基礎映像檔已透過移除與第一次登入 (OOBE) 相關的啟動時間負擔來優化。 這不是 Nano Server 基礎映像檔的情況。 不過,您可以將至少一個層級提交至容器映像,藉此從以 Nano Server 為基礎的映像中移除此成本。 後續容器將從映像啟動,不會產生首次登入成本。

臨時空間位置

根據預設,容器會在執行中的容器存留期內,使用容器主機系統磁碟驅動器媒體上的暫存空間來儲存。 這可作為容器的系統磁碟驅動器,因此容器作業中完成的許多寫入和讀取都會遵循此路徑。 對於系統磁碟驅動器存在於旋轉磁碟磁媒體 (HDD) 上的主機系統,但可以使用更快的儲存媒體(更快速的 HDD 或 SSD),可以將容器臨時空間移至不同的磁碟驅動器。 這是使用 dockerd –g 命令達成的。 此命令是全域的,而且會影響系統上執行的所有容器。

巢狀 Hyper-V 容器

適用於 Windows Server 2022 的 Hyper-V 提供巢狀 Hypervisor 支援。 也就是說,具備在一個虛擬機器內執行另一個虛擬機器的能力。 這會開啟許多有用的案例,但也誇大 Hypervisor 所產生的一些效能影響,因為有兩個層級的 Hypervisor 在實體主機上方執行。

對於容器,當在虛擬機內執行 Hyper-V 容器時,這會產生影響。 由於 Hyper-V 容器透過本身與容器主機之間的 Hypervisor 層提供隔離,因此當容器主機是 Hyper-V 型虛擬機時,容器啟動時間、記憶體 io、網路 io 和輸送量以及 CPU 方面會有相關聯的效能額外負荷。

存儲

掛接的數據磁碟區

容器可讓您使用容器主機的磁碟來作為容器的臨時儲存空間。 不過,容器暫存空間的生命週期等於容器的生命週期。 也就是說,當容器停止時,暫存空間和所有相關的數據都會消失。

然而,在許多情境下,希望資料的持續性能夠獨立於容器的生命週期。 在這些情況下,我們支援將資料卷從容器主機掛載至容器。 針對 Windows Server 容器,與掛接的資料磁碟區相關的 IO 路徑額外負荷可以忽略不計(接近原生效能)。 不過,將數據磁碟區掛接至 Hyper-V 容器時,該路徑會有一些 IO 效能降低。 此外,在虛擬機內執行 Hyper-V 容器時,這種影響會誇大。

暫存空間

Windows Server 容器和 Hyper-V 容器預設都會為容器臨時空間提供 20GB 的動態 VHD。 針對這兩種容器類型,容器OS會佔用該空間的一部分,而且每個啟動的容器都是如此。 因此,請務必記住,每個啟動的容器都有一些記憶體影響,而且視工作負載而定,最多可以寫入 20 GB 的備份儲存媒體。 伺服器記憶體組態的設計應該考慮到這一點。

網路

Windows Server 容器和 Hyper-V 容器提供各種網路模式,以最符合不同網路設定的需求。 這些選項各有各自的效能特性。

Windows 網路地址轉換 (WinNAT)

每個容器都會從內部的私人IP前綴接收IP位址(例如172.16.0.0/12)。 支援從容器主機到容器端點的埠轉送/對應。 Docker 預設會在 Dockerd 第一次執行時建立 NAT 網路。

在這三種模式中,NAT 組態是最昂貴的網路 IO 路徑,但所需的設定量最少。

Windows Server 容器會使用主機 vNIC 連結至虛擬交換器。 Hyper-V 容器會使用合成 VM NIC(不會公開到公用程式 VM)來連結至虛擬交換器。 當容器與外部網路通訊時,封包會透過 WinNAT 路由傳送,並套用地址轉譯,這會產生一些額外負荷。

透明

每個容器端點都會直接連線到實體網路。 實體網路的IP位址可以使用外部 DHCP 伺服器,以靜態方式或動態方式指派。

透明模式在網路 IO 路徑方面成本最低,而外部封包會直接傳遞至容器虛擬 NIC,以直接存取外部網路。

L2 網橋

每個容器端點都會位於與容器主機相同的IP子網中。 IP 位址必須從與容器主機相同的前置詞靜態指派。 由於第 2 層地址轉譯,主機上的所有容器端點都會有相同的 MAC 位址。

L2 網橋模式比 WinNAT 模式更有效能,因為它提供對外部網路的直接存取,但效能低於透明模式,因為它也引進 MAC 位址轉譯。