在亚马逊 EKS 上使用 DPDK 自动配置数据包加速

数据包加速是实现工作负载性能效率的关键组件。数据包加速可让您优化工作负载,以获得最大吞吐量、高网络带宽、最小延迟和降低成本。电信、媒体和娱乐、机器人和物联网 (IOT) 等行业一直是使用 SRIOV (单根 I/O 虚拟化)和 DPDK (数据平面开发套件)来满足其高计算要求的数据包加速的关键用户。

SRIOV 可在虚拟化环境中实现基于硬件的加速,从而提供更高的 I/O 性能、更低的 CPU 利用率、更高的每秒数据包数 (PPS) 性能和更低的延迟。DPDK 提供基于软件的开发套件,该套件绕过操作系统 (OS) 内核并减少了数据包处理开销,从而提高了性能并降低了延迟。

在这篇博客中,我们将详细解释如何在 亚马逊弹性 Kubernetes 服务(亚马逊 EKS)上为您的 Kubernetes 工作负载实现数据包加速。 我们还将详细讨论您的 Amazon EKS 工作节点的自动化流程。

概述

亚马逊 弹性计算云 ( 亚马逊 EC2) Linux 实例上的弹性网络适配器 (ENA) 支持 SRIO V。目前,除 T2 之外的所有 EC2 实例默认都支持 ENA 驱动程序。 基于@@ 亚马逊 Linux 2 亚马逊系统映像 (AMI),包括亚马逊 EKS 优化的 AMI,默认情况下启用 ENA 驱动程序。此外,其他供应商提供的许多其他流行的基于 Linux 的 AMI 也默认支持 ENA 驱动程序。有关更多详细信息 ,请参阅此 文档 。在这篇博客中,我们将使用经过亚马逊 EKS 优化的亚马逊 Linux 2 AMI。

现在您已经启用了 SRIOV 的 AMI 和实例,接下来是在您的 Amazon EKS 工作节点上启用 DPDK 的自动化步骤。

先决条件

git 存储库中包含的示例 亚马逊云科技 CloudFormation 模板 仅用于创建 Amazon EKS 节点组 。此外,必须事先创建以下资源,并将值用作用于创建 NodeGroup CloudFormation 堆栈的变量的一部分。

  • VPC ID
  • WokerNode 主接口 (eth0) 子网 ID :这是工作节点的主子网(用于 Kubernetes 主接口,即 aws-vpc-cni)。
  • 多子网组 ID: 用于创建 DPDK/Multus 接口的多子网列表。在工作节点上创建接口的顺序与子网列表的顺序相同。
  • DPDK S3 存储桶: 这是在用户数据初始化期间调用 DPDK 脚本的地方。 这些脚本可以在 git 存储库中包含的 s3-content/用户数据支持文件 文件夹中找到。
  • Multus S3 存储桶: 这是存储压缩的 Multus 亚马逊云科技 Lambda 函数代码 的地方。
  • EKS 集群: 所需的值是亚马逊 EKS 集群名称。
  • EKS 安全组: 与 Amazon EKS 集群一起创建的安全组 ID。

在工作节点上设置 DPDK

您的支持 DPDK 的工作负载拥有 DPDK 库来实现数据包加速。底层工作节点需要使用 Amazon EC2 用户数据 配置和自动执行以下步骤:

  1. 安装 Linux 库、与 ENA 兼容的驱动程序以及 DPDK 和大型页面设置所需的补丁
  2. 根据工作负载要求配置 Linux sysctl
  3. 配置任何大页面配置,并根据您的 NUMA 配置为系统设置 CPUAffinity
  4. 启用工作负载使用的辅助接口
  5. 将您的辅助接口与 DPDK 驱动程序绑定,例如 vfio-pci 驱动程序
  6. SRIOV-DP 插件准备配置文件 ,该插件 将接口的 PCIAddress 映射到资源名称

根据您的要求,您可以选择下一节中提到的两个选项之一来准备工作节点。

选项 1:使用 DPDK 设置的预构建 AMI

Figure 1: Create DPDK AMI from EKS Optimized AMI

图 1:从 EKS 优化的 AMI 创建 DPDK AMI

在此选项中,如上图所示,您将使用所有必需的补丁、配置和操作系统级别设置来准备自定义 AMI。你可以使用亚马逊 EKS 优化版 Amazon Linux AMI 或任何其他支持 ENA 驱动程序的 Linux AMI 作为基础 AMI,然后创建 EC2 实例。节点启动后,您可以手动或使用您的 EC2 实例的用户数据执行 DPDK 配置部分中提到的步骤 1-3。安装和配置步骤完成后,您可以从根磁盘( Amazon Elastic Block Store (Amazon EBS) 卷)准备一个新的 AMI,并将其用作需要 DPDK 的工作节点的自定义 AMI,如下图所示。

Figure 2: Create EKS Nodegroup with the pre-built DPDK AMI

图 2:使用预先构建的 DPDK AMI 创建 EKS 节点组

为了准备 Amazon EKS 工作节点,您可以使用这个预先构建的 AMI 并执行 DPDK 配置部分中提到的步骤 4-6。由于这些步骤只是配置步骤,因此用户数据执行速度很快。它仍然使您可以灵活地决定要绑定 DPDK 的接口数量,并且您可以通过 SRIOV-DP 插件使用工作负载使用的计划资源名称来构建它。

这种方法的优点是启动时间短,因为安装步骤 (1-3) 已经包含在预先构建的自定义 AMI 中。此外,它还预先下载了软件包,因此无需在 亚马逊简单存储服务(Amazon S3)存储桶 上管理/复制补丁。 这种方法的缺点是在多个账户之间共享预先构建的 AMI,并使用安全补丁使基础 AMI 保持最新状态。此外,对于不同的要求,例如大页面配置或 DPDK 版本,您必须管理多个独特的预建 AMI。

git 存储库中提供了构建示例自定义 AMI 的步骤。

选项 2:按需 DPDK 安装和配置

在此选项中,您将使用最新的亚马逊 EKS 优化版 Amazon Linux AMI 或任何其他支持 ENA 驱动程序的 Linux AMI,然后部署您的工作节点。您可以使用启动模板的用户数据自动执行上述 “DPDK 配置” 部分中提到的所有必要步骤。

您可以将软件包、补丁、帮助程序和配置脚本存储在私有 S3 存储桶中。在实例化期间,EKS Worker 节点从 S3 存储桶下载这些文件,并将其用于补丁安装、DPDK 设置和系统配置。此选项还使您可以灵活地决定要绑定 DPDK 的接口数量,并且您可以通过 SRIOV-DP 插件使用工作负载使用的计划资源名称来构建它。

Figure 3: Create EKS Nodegroup with EKS-Optimized AMI and install DPDK patches with userdata

图 3:使用 EKS 优化的 AMI 创建 EKS 节点组并使用用户数据安装 DPDK 补丁

这种方法的优点是您不需要自定义 AMI,并且您的系统是使用最新的基础 AMI 为每个不同的用例动态准备的。此外,您不必管理多个自定义 AMI、跨多个账户共享、使用基本 AMI 上的安全补丁保持最新状态或维护 AMI 的多个版本。不同的要求,例如大页面配置和 DPDK 版本,是通过自动化动态处理的。这种方法的缺点是,与定制的 AMI 相比,启动时间略有增加,因为补丁是在启动时安装的。

请参阅 git 存储库,了解 为支持 DPDK 的工作负载 创建 Amazon EKS 节点组的详细步骤、配置和示例 CloudFormation 模板。

适用于支持 DPDK 的工作负载的亚马逊 EKS 集群适应 NodeGroup 的
亚马逊云科技-Auth Configmap

工作节点的 CloudFormation 堆栈完成后,您必须将工作节点的实例角色添加到 Amazon EKS 集群 aws-auth 配置映射中。这是工作节点加入 Amazon EKS 集群所必需的。使用以下命令语法添加实例角色(您可以从 CloudFormation 堆栈的输出部分获取实例角色 ARN)。

cat <<EOF | kubectl apply -f-
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::xxxxxxxx:role/NG-workers-NodeInstanceRole-XXXXX
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
EOF 

SRIOV 设备插件设置

SRIOV 设备插件守护程序清单可以在 dpdk-cnf-deployment/sriovdp-ds.yaml 上找到。 请注意,sriov-device 插件配置不是作为配置映射提供的。取而代之的是,它作为 hostPath 安装在守护程序集清单中:

      - hostPath:
          path: /etc/pcidp/config.json
          type: ""
        name: config-volume

/etc/pcidp/config.json 是在创建节点组期间通过用户数据中的 /opt/dpdk/dpdk-resource-builder.py 脚本创建的。 你可以参考 git 存储库 中的 CloudFormation 模板了解更多细节 。

您可以通过在 SRIOV 设备插件守护程序集的定义中使用节点选择器来控制 SRIOV 设备插件守护程序集的部署。确保将该节点选择器作为标签应用于启用 DPDK 的工作节点。这在只有部分节点组启用了 DPDK 的情况下很有用。对于工作节点上没有 /etc/pcidp/config.json 的非基于 DPDK 的节点组,这会导致在该工作节点上运行的 SRIOV 设备守护程序集容器出现故障。

在 CloudFormation 示例中,示例节点选择器 sriov=enabled 被用作基于 DPDK 的工作节点组的额外 Kubernetes 标签。以下片段反映了 dpdk-cnf-deployment/sriov dp-ds.yaml 的节点选择器。

      nodeSelector:
        beta.kubernetes.io/arch: amd64
        sriov: enabled  

在 Amazon EKS 上部署 DPDK 工作负载
部署示例应用程序以验证设置

在下面的示例中,使用了 VPP(矢量数据包处理器)CNF。VPP 是一种流行的数据包处理软件,支持 DPDK 进行数据包处理。VPP CNF 如何在 Amazon EKS 集群上运行的架构如下图所示:

Figure 4: Sample VPP POD consuming DPDK enabled interfaces with SRIOV-DP Plugin

图 4:使用 SRIOV-DP 插件启用 DPDK 的接口的示例 VPP POD

已经创建了头盔图,其中包含部署示例 VPP POD 所需的参数。安装后 VPP Pod 的部署状态将在下一节中给出。

  • 以下命令显示了环境变量,这些变量确认 sriov-device 插件已从 DPDK 接口注入了相应的 PCI 接口地址。
kubectl -n dpdk exec -ti deploy/core-vpp-dpdk printenv | grep PCI

PCIDEVICE_INTEL_COM_INTEL_SRIOV_NETDEVICE_3=0000:00:08.0
PCIDEVICE_INTEL_COM_INTEL_SRIOV_NETDEVICE_1=0000:00:06.0
PCIDEVICE_INTEL_COM_INTEL_SRIOV_NETDEVICE_2=0000:00:07.0

部署 VPP CNF 的过程可以在 git 存储库的 dpdk-cn f-de ployment 文件夹中找到。

清理

为避免将来产生费用,请删除此博客中已部署的资源:

  • 从 EC2 控制台中删除私有 DPDK AMI。
  • 前往 CloudFormation 控制台并删除 EKS 节点组 CloudFormation 堆栈。

结论

在这篇博客中,我们提供了两个选项,可以自动配置 Amazon EKS 工作负载的 DPDK,从而在 Amazon EKS 上实现数据包加速。通过自动方法,您可以灵活地使用 DPDK 配置接口,或将其用作 Multus IPVLAN 接口。

试试来自 git repo 的示例应用程序 并给我们留言,我们很想听听你的反馈。联系您的 亚马逊云科技 账户团队和合作伙伴解决方案架构师,了解有关 5G 和 亚马逊云科技 电信领域的更多信息

Raghvendra Singh

Raghvendra Singh

Raghvendra Singh 是 亚马逊云科技 的 5G 和 亚马逊云科技 网络转型实践专家。他负责 亚马逊云科技 上的 5G 整体解决方案设计、端到端集成、网络架构、自动化和安全。他专门研究 4G/5G NFV 空间,帮助客户加入、整合 亚马逊云科技 上的云原生容器网络功能。

Christopher Adigun

克里斯托弗·阿迪贡

克里斯托弗·阿迪贡是 亚马逊云科技 业务发展和战略行业的电信解决方案架构师。他与电信客户合作,使用亚马逊云科技服务和云原生原生原则来架构他们的工作负载,重点是容器化和用户平面加速设计。

Ramu Akula

Ramu Akula

Ramu Akula 肩负着许多责任。他担任 亚马逊云科技 5G 和电信网络转型首席专家,领导创建包罗万象的 5G 解决方案、设计网络架构并推动 亚马逊云科技 环境中的自动化。此外,他在设计和实施自动化框架方面发挥着关键作用。该框架便于利用 亚马逊云科技 服务和 亚马逊云科技 EKS-Anywhere 在戴尔、惠普等商用现成 (COTS) 硬件上托管 O-RAN 工作负载 (CU/DU)。

Srini Velayudham

Srini Velayudham

Srini Velayudham 是 亚马逊云科技 Proserv 全球电信业务的高级顾问。他专门研究4G/5G/IMS网络功能,电信公司的物联网解决方案。他与客户合作,定义电信网络功能的解决方案设计、自动化、联网、集成和安全性。

Subbarao Duggisetty

Subbarao Duggisetty

Subbarao Duggisetty 在亚马逊网络服务担任全球账户的云基础设施架构师。在他的职位上,他与电信和汽车领域的客户密切合作,专注于其工作负载的开发和自动化。Subbarao 利用基础设施即代码语言和 CI/CD 管道,使客户能够利用先进的云基础设施服务。他的专业知识使客户能够增强和自动化其交付成果,从而提高项目的效率和创新。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。