kubernetes-onload

kubernetes-onload 是由 Xilinx-CNS(现为 AMD)维护的开源项目,旨在将 OpenOnload® 或 EnterpriseOnload® 网络加速栈集成到 Kubernetes 和 OpenShift 集群中。该项目通过部署 Onload Operator 和 Device Plugin,使容器化应用能够利用 Solarflare 网卡的硬件加速功能,从而提升网络性能,降低延迟。(GitHub)


✨ 项目概述

  • 目标:在 Kubernetes 或 OpenShift 集群中自动部署和管理 Onload 网络加速功能。
  • 核心组件
    • Onload Operator:负责在集群中部署和管理 Onload 相关资源。
    • Onload Device Plugin:向 Kubernetes 报告可用的加速设备,并协助调度使用这些设备的 Pod。
  • 支持的环境
    • OpenOnload 或 EnterpriseOnload 版本 ≥ 8.1
    • AMD Solarflare 网卡(驱动名为 sfc
    • OpenShift 4.10+(需安装 KMM Operator 1.1)
    • Kubernetes 1.23+(支持有限,完整实现细节尚未提供) (GitHub)

🚀 功能亮点

  • 自动化部署:Operator 自动完成 Onload 的安装、配置和升级,减少手动操作。
  • 多网络插件支持
    • OpenShift/Multus:支持使用 MACVLAN 或 IPVLAN 创建的多网络接口。
    • Kubernetes/Calico:支持无覆盖网络(non-overlay)配置,但不支持 Calico 的网络策略。
  • 性能优化:通过绕过内核的网络栈,直接在用户空间处理网络 I/O,提高吞吐量并降低延迟。
  • 兼容性:对现有使用 BSD sockets 的应用程序二进制兼容,无需修改应用代码即可获得加速效果。(AMD, GitHub)

⚙️ 部署要求与配置

  • 硬件要求:AMD Solarflare XtremeScale X2 系列网卡。
  • 软件要求
    • Linux 内核:支持 RHEL/RHCOS,需安装适配的内核模块。
    • SELinux:在 RHEL/RHCOS 上运行时,需应用特定的 SELinux 策略更新。
  • 网络配置
    • Calico:需配置为无封装模式(no encapsulation)。
    • Multus:用于 OpenShift 的多网络插件,支持创建多个网络接口。
  • 受限网络部署:在无法访问外部网络的环境中,可使用本地镜像部署 Operator 和 Device Plugin,具体步骤可参考官方文档。 (AMD, AMD 文档)

📦 项目结构

该项目主要使用 Go 语言编写,目录结构如下:

  • cmd/:主程序入口。
  • controllers/:Operator 的控制器逻辑。
  • api/v1alpha1/:自定义资源定义(CRD)。
  • pkg/:辅助库和工具函数。
  • config/:部署配置文件和样例。
  • docs/:项目文档,包括网络附件定义(NAD)等。(AMD 文档)

📚 相关资源