性能优化 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 Containers 通过在高度优化的虚拟机中运行每个容器,扩展了 Windows Server Containers 提供的隔离。 在此配置中,容器主机的内核不与 Hyper-V 容器共享。

Hyper-V 容器提供的额外隔离在很大程度上是通过容器和容器主机之间的 Hypervisor 隔离层实现的。 这会影响容器密度,因为与 Windows Server 容器不同,系统文件和二进制文件的共享可能会减少,从而导致总体存储和内存占用量更大。 此外,预计某些网络、存储 IO 和 CPU 路径还会产生进一步的开销。

Nano 服务器和服务器核心

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。

对于容器,在虚拟机中运行 Hyper-V 容器时,这会产生影响。 由于 Hyper-V 容器通过其自身与容器主机之间的虚拟机管理程序层提供隔离,因此当容器主机是基于 Hyper-V 的虚拟机时,在容器启动时间、存储 IO、网络 IO 和吞吐量以及 CPU 方面存在相关的性能开销。

储存

挂载的数据卷

容器提供了将容器主机系统驱动器用于容器暂存空间的功能。 但是,容器暂存空间的寿命等于容器的寿命。 也就是说,当容器停止时,暂存空间和所有相关数据都会消失。

但是,在许多情况下,需要独立于容器生命周期的数据持久化。 在这些情况下,我们支持将数据卷从容器主机挂载到容器中。 对于 Windows Server 容器,与挂载的数据卷相关的 IO 路径开销可以忽略不计(接近本机性能)。 但是,将数据卷挂载到 Hyper-V 容器中时,该路径中的 IO 性能会有所下降。 此外,在虚拟机内运行 Hyper-V 容器时,这种影响会被夸大。

暂存空间

默认情况下,Windows Server 容器和 Hyper-V 容器都为容器暂存空间提供 20GB 的动态 VHD。 对于这两种容器类型,容器作系统都会占用该空间的一部分,对于每个启动的容器都是如此。 因此,请务必记住,每个启动的容器都会对存储产生一些影响,并且根据工作负载,最多可以写入 20GB 的后备存储介质。 在设计服务器存储配置时,应考虑到这一点。

网络

Windows Server 容器和 Hyper-V 容器提供各种网络模式,以最好地满足不同网络配置的需求。 这些选项中的每一个都具有自己的性能特征。

Windows 网络地址转换 (WinNAT)

每个容器都将从内部私有 IP 前缀(例如 172.16.0.0/12)接收一个 IP 地址。 支持从容器主机到容器终结点的端口转发/映射。 默认情况下,Docker 会在 dockerd 首次运行时创建 NAT 网络。

在这三种模式中,NAT 配置是最昂贵的网络 IO 路径,但所需的配置量最少。

Windows Server 容器使用主机 vNIC 连接到虚拟交换机。 Hyper-V 容器使用合成 VM NIC(不公开到实用工具 VM)连接到虚拟交换机。 当容器与外部网络通信时,数据包将通过应用地址转换的 WinNAT 进行路由,这会产生一些开销。

透明

每个容器终端节点都直接连接到物理网络。 可以使用外部 DHCP 服务器静态或动态分配来自物理网络的 IP 地址。

就网络 IO 路径而言,透明模式的成本最低,外部数据包直接传递到容器虚拟 NIC,从而直接访问外部网络。

L2 桥接器

每个容器终端节点将与容器主机位于同一 IP 子网中。 IP 地址必须从与容器主机相同的前缀静态分配。 由于第 2 层地址转换,主机上的所有容器终端节点将具有相同的 MAC 地址。

L2 桥接模式的性能比 WinNAT 模式更高,因为它提供对外部网络的直接访问,但性能低于透明模式,因为它还引入了 MAC 地址转换。