通过节点交换扩展Kubernetes工作负载
Kubernetes 集群往往在面临 CPU 限制之前先遭遇内存限制,而新的代理式 AI 工作负载进一步加剧了这一难题。这些 AI 工作负载需要大量内存来启动和运行不可信代码,随后便处于空闲状态。这种空闲内存成本高昂,并限制了单个节点可托管的 Pod 数量。交换内存(Swap),尤其是由高速 NVMe SSD 支持的交换内存,可以通过将休眠内存分页出去来解决这一问题。Kubernetes 现已普遍可用地支持交换内存,使节点能够托管更多 Pod。在 CI/CD 构建、沙箱化浏览器和 Python 运行时等场景下的基准测试表明,交换内存可将密度提升高达三倍,且对延迟的影响微乎其微。历史上,由于内存记账问题和高磁盘延迟,交换内存一直被避免使用。然而,cgroup v2 和高速 NVMe SSD 解决了这些顾虑,使交换内存成为可行的解决方案。传统工作负载(如内核构建)在启用交换内存时可以容忍降低的内存限制。高密度代理工作负载(如无头浏览器)在启用交换内存后,Pod 密度显著提升。沙箱化 Python 运行时同样受益于交换内存,可实现三倍的并发会话数。启用节点交换涉及配置 kubelet 并使用云提供商的本地磁盘。具有 Burstable QoS 的工作负载可利用交换内存进行动态内存平衡。最终,快速交换内存能够卸载空闲内存状态,从而提高代理式工作负载的 Pod 密度和节点利用率。