持续贡献开源社区,麒麟软件方案修复K8s NUMA调度BUG

图灵汇官网

Kubernetes与麒麟云原生平台的深度定制与优化

引言

Kubernetes,简称“K8s”或“Kube”,是一个广泛应用于管理云平台中容器化应用的开源工具,旨在简化部署流程,提升效率。自2015年发布以来,Kubernetes迅速确立了在容器编排领域的领导地位。

项目背景与挑战

在实施基于Kubernetes的云原生解决方案过程中,麒麟云原生平台与特定客户合作,深入定制开发了具有NUMA感知调度功能的特性,以适应复杂的应用场景需求。然而,在开发与测试阶段,发现了一些与Kubernetes生态系统相关的潜在问题,这些问题影响了平台的稳定性和性能。

NUMA感知调度的局限性

  • Scheduler-plugins:这一Kubernetes调度扩展库在增强默认调度器功能的同时,暴露了在处理特定硬件配置时的不足。特别是在存在未插入内存条的NUMA节点的情况下,可能导致Pod在选择合适的NUMA节点组合时出现问题,进而影响Pod的正常运行。
  • Node-feature-discovery:负责收集节点硬件信息的项目同样遇到了挑战,尤其是在未能正确识别和处理缺失内存条的NUMA节点时,影响了节点信息的准确性,进而导致服务无法正常启动。

问题定位与分析

针对scheduler-plugins的问题,关键在于其算法逻辑中对NUMA节点组合的选择缺乏充分的过滤机制。在计算资源总和时,算法未能有效排除包含未插入内存条的节点组合,这导致了部分情况下,Pod的运行环境不符合预期需求。 对于node-feature-discovery的问题,核心在于数据处理函数在计算节点资源时的逻辑错误,未能正确区分和处理缺少硬件资源的节点信息,影响了服务的整体性能。

解决方案与改进

面对上述挑战,麒麟软件团队迅速响应,提出并实施了针对性的修复方案:

  1. scheduler-plugins:在调度算法中加入了一层有效性校验机制,确保在考虑NUMA节点组合时,能够剔除含有缺失硬件资源的组合,从而避免了因硬件配置不全导致的Pod运行异常。
  2. node-feature-discovery:对关键数据处理函数进行了优化,当遇到可能因硬件问题导致的数据异常时,系统能够智能地忽略这些无效数据,保证服务的稳定运行。

结语

这些优化措施不仅解决了当前的问题,也为未来在类似场景下的系统稳定性提供了保障。麒麟软件团队通过持续的技术创新与优化,不断推动着云原生技术的边界,以适应日益复杂和动态的业务需求。此项目案例展示了通过深入理解Kubernetes生态系统的内在机制,以及对特定应用场景的精准定制,能够显著提升云平台的可靠性和效能。

本文来源: 图灵汇 文章作者: 施应峰