1. 课程导入与协同运行全景
在传统数据中心里,虚拟化与容器往往被当作两条平行的技术路线:虚拟机负责承载完整操作系统与重型业务,容器负责快速交付微服务与弹性应用。但在 HPE ProLiant 平台上,这两者并不是互斥关系,而是可以协同运行、共享硬件资源、统一运维的互补体系。本课程的核心目标,就是帮助你在同一台 ProLiant 服务器上,理解并实践“虚拟机 + 容器”协同运行的完整技术栈。
要理解协同运行的价值,先要看清两者的资源边界。虚拟机通过 Hypervisor 抽象出完整的虚拟硬件,每个 VM 拥有独立内核,隔离性强、兼容性好,适合运行数据库、ERP、传统中间件等对操作系统版本敏感的业务。容器则共享宿主机内核,以命名空间和 cgroup 实现进程级隔离,启动快、密度高、镜像可移植,适合 Web 前端、API 网关、批处理任务等弹性负载。协同运行的本质,是让这两类负载在同一台 ProLiant 上各取所长:用 VM 承载“稳定但重”的业务,用容器承载“变化快但轻”的业务,并通过统一的网络、存储与监控层把它们连接起来。
从硬件视角看,HPE ProLiant 为这种协同提供了几个关键支撑。以 ProLiant DL380 Gen10 Plus 为例,它支持双路 Intel Xeon Scalable 处理器、最多 32 个 DDR4 DIMM 插槽、以及通过 iLO 5 实现的带外管理。虚拟化场景下,Intel VT-x 与 VT-d 提供硬件辅助虚拟化和设备直通;容器场景下,CPU 的 AVX-512 指令集和 NUMA 架构直接影响容器内计算密集型任务的性能。存储方面,ProLiant 的 Smart Array 控制器支持 RAID 与 HBA 模式切换,前者适合 VM 数据存储,后者适合 Ceph 或 Longhorn 等容器持久化方案。网络方面,FlexibleLOM 与 PCIe 网卡可分别分配给虚拟交换机和容器 CNI,实现流量隔离。
下面这张图展示了 ProLiant 平台上虚拟化与容器协同运行的整体技术栈分层关系。从底层的物理硬件,到中间的 Hypervisor 与容器运行时,再到上层的编排与运维,每一层都有明确的职责边界和交互接口。
这张图的关键在于“分层但不孤立”。物理硬件层提供 CPU、内存、存储和网络资源;虚拟化层和容器层分别从硬件层抽象出各自的计算单元;编排层负责把 VM 和容器调度到合适的节点;运维层则统一采集两套体系的指标和日志。实际部署时,你可以在同一台 ProLiant 上先安装 ESXi,再在 ESXi 的 VM 中运行 Kubernetes 节点,也可以直接在裸机上安装 KVM 和 containerd,让 VM 与容器共享同一个内核。两种路径的取舍,取决于业务对隔离性和性能损耗的敏感程度。
典型场景可以归纳为三类。第一类是“VM 承载数据库 + 容器承载应用”:例如在 ProLiant DL380 上运行一台 8 vCPU / 32 GB 的 SQL Server VM,同时在同一宿主机上运行 20 个 Nginx 容器作为前端。此时需要关注 NUMA 绑定,把 VM 和容器分别绑定到不同 CPU 插槽,避免跨 NUMA 访问内存导致延迟上升。第二类是“容器化传统应用 + VM 做兼容层”:把老旧的 .NET Framework 应用打包进 Windows 容器,运行在 Windows VM 中,而 Linux 容器运行在宿主机上,通过 vSwitch 互通。第三类是“边缘轻量协同”:在 ProLiant MicroServer 或 DL20 上,用 K3s 运行容器,同时用 KVM 运行一个轻量 VM 做本地 DNS 和 DHCP,资源占用控制在 16 GB 内存以内。
学习路径上,建议按“先分后合”的顺序推进。先分别掌握虚拟化的核心操作:在 ProLiant 上通过 iLO 挂载 ISO 安装 ESXi,配置 vSwitch 和数据存储,创建 VM 并安装 Guest OS。再掌握容器的核心操作:安装 containerd 和 Kubernetes,编写 Deployment 和 Service,配置 CNI 和持久卷。最后进入协同阶段:把 VM 和容器纳入同一个监控体系,用 Prometheus 同时抓取 node_exporter 和 kubelet 的指标;用 Ansible 同时管理 VM 模板和容器镜像的构建流水线;用 iLO 的 Redfish API 把硬件告警推送到 Kubernetes 的 Event 中。每一步都建议在实验环境中验证,例如用一台 DL380 Gen10 做宿主机,分配 2 个 CPU 插槽、128 GB 内存、4 块 SSD 做 RAID 10,先跑通一个 VM 加一个容器的混合负载,再逐步增加密度。
需要特别注意的是,协同运行会带来资源争抢。VM 的 vCPU 就绪时间与容器的 CPU throttling 可能同时出现,此时应优先检查 ProLiant 的 BIOS 中是否开启了 Turbo Boost 和 C-State,再检查 Hypervisor 的 CPU 调度策略是否与容器的 cgroup 限制冲突。存储方面,如果 VM 使用 RAID 卷而容器使用本地盘,建议把容器持久卷放在独立的 SSD 上,避免 VM 的快照操作影响容器 I/O。网络方面,VM 的 vSwitch 和容器的 CNI 应使用不同的物理网卡或 VLAN,防止广播风暴跨域传播。