首页 > 其他分享 >Cilium系列-12-启用 Pod 的 BBR 拥塞控制

Cilium系列-12-启用 Pod 的 BBR 拥塞控制

时间:2023-08-04 10:07:44浏览次数:48  
标签:Kernel 12 启用 带宽 Cilium Pod BBR

系列文章

前言

将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:

  • 启用本地路由(Native Routing)
  • 完全替换 KubeProxy
  • IP 地址伪装(Masquerading)切换为基于 eBPF 的模式
  • Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行
  • 绕过 iptables 连接跟踪(Bypass iptables Connection Tracking)
  • 主机路由(Host Routing)切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)
  • 启用 IPv6 BIG TCP (需要 Linux Kernel >= 5.19)
  • 禁用 Hubble(但是不建议, 可观察性比一点点的性能提升更重要)
  • 修改 MTU 为巨型帧(jumbo frames) (需要网络条件允许)
  • 启用带宽管理器(Bandwidth Manager) (需要 Kernel >= 5.1)
  • 启用 Pod 的 BBR 拥塞控制 (需要 Kernel >= 5.18)
  • 启用 XDP 加速 (需要 支持本地 XDP 驱动程序)
  • (高级用户可选)调整 eBPF Map Size
  • Linux Kernel 优化和升级
    • CONFIG_PREEMPT_NONE=y
  • 其他:
    • tuned network-* profiles, 如: tuned-adm profile network-latencynetwork-throughput
    • CPU 调为性能模式
    • 停止 irqbalance,将网卡中断引脚指向特定 CPU

在网络/网卡设备/OS等条件满足的情况下, 我们尽可能多地启用这些调优选项, 相关优化项会在后续文章逐一更新. 敬请期待.

今天我们来调优 Cilium, 启用 Pod 的 BBR 拥塞控制, 以为互联网流量提供更高的带宽和更低的延迟.

测试环境

  • Cilium 1.13.4
  • K3s v1.26.6+k3s1
  • OS
    • 3 台 Ubuntu 23.04 VM, Kernel 6.2, x86

BBR 拥塞控制

Cilium 的带宽管理器提供的围绕 MQ/FQ 设置的基础架构还允许对 Pod 使用 TCP BBR 拥塞控制。当 Pod 被暴露在 Kubernetes 服务背后,面对来自互联网的外部客户端时,BBR 尤其适用。BBR 可为互联网流量提供更高的带宽和更低的延迟,例如,事实证明,BBR 的吞吐量可比目前最好的基于损耗的拥塞控制高出 2,700 倍,队列延迟可降低 25 倍。

为了让 BBR 在 Pod 上可靠运行,它需要 5.18 或更高版本的内核。

BBR 还需要 eBPF Host-Routing,以保留网络数据包的套接字关联,直到数据包进入主机命名空间物理设备上的 FQ 队列 discipline。

要求

  • 内核 >= 5.18
  • 带宽管理器
  • eBPF 主机路由

实施

启用带宽管理器和 Pod 的 BBR:

helm upgrade cilium cilium/cilium --version 1.13.4 \
  --namespace kube-system \
  --reuse-values \
  --set bandwidthManager.bbr=true

验证

要验证您的安装是否使用 Pods 的 BBR 运行,请在任何 Cilium pod 中运行 cilium status,并查找报告 "BandwidthManager" 状态的行,该行应显示 EDT with BPF 以及 [BBR]。具体如下:

$ kubectl -n kube-system exec ds/cilium -- cilium status | grep BandwidthManager
BandwidthManager:           EDT with BPF [BBR] [eth0]

总结

本文继续调优 Cilium, 启用 Pod 的 BBR 拥塞控制, 以为互联网流量提供更高的带宽和更低的延迟. 前提是 Kernel >= 5.18, 并启用带宽管理器和基于 eBPF 的主机路由.

至此,性能调优已完成实战验证:

  • ✔️ 启用本地路由 (Native Routing)
  • ✔️ 完全替换 KubeProxy
  • ✔️ IP 地址伪装 (Masquerading) 切换为基于 eBPF 的模式
  • ✔️ Kubernetes NodePort 实现在 DSR(Direct Server Return) 模式下运行
  • ✔️ 绕过 iptables 连接跟踪 (Bypass iptables Connection Tracking)
  • ✔️ 主机路由 (Host Routing) 切换为基于 BPF 的模式 (需要 Linux Kernel >= 5.10)
  • ❌ 启用 IPv6 BIG TCP (需要 Linux Kernel >= 5.19, 支持的 NICs: mlx4, mlx5)
    • 由于没有支持的网卡, 无法完成验证
  • ❌ 修改 MTU 为巨型帧 (jumbo frames) (需要网络条件允许)
  • ✔️ 启用带宽管理器 (Bandwidth Manager) (需要 Kernel >= 5.1)
  • ✔️ 启用 Pod 的 BBR 拥塞控制 (需要 Kernel >= 5.18)
  • 启用 XDP 加速 (需要 支持本地 XDP 驱动程序)

标签:Kernel,12,启用,带宽,Cilium,Pod,BBR
From: https://blog.51cto.com/ewhisper/6957117

相关文章

  • Cilium系列-12-启用 Pod 的 BBR 拥塞控制
    系列文章Cilium系列文章前言将Kubernetes的CNI从其他组件切换为Cilium,已经可以有效地提升网络的性能.但是通过对Cilium不同模式的切换/功能的启用,可以进一步提升Cilium的网络性能.具体调优项包括不限于:启用本地路由(NativeRouting)完全替换KubeProxyI......
  • k8s 学习笔记之 Pod——Pod 的调度
    Pod的调度在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些节点上,那么应该怎么做呢?这就要求了解kubernetes对Pod的调度规则......
  • [Ynoi2012] NOIP2015 充满了希望(扫描线+线段树)
    题目传送门solution简单题。我们正着做扫描线。设\(t_i\)表示位置\(i\)最后一次进行二操作的时间,那么一操作就是交换\(t_x,t_y\),二操作就是区间复制。对于三操作,开一个树状数组,如果查询的位置的\(t_x=j\),就在\(j\)的位置上加一。查询就是查询后缀和。#include<bit......
  • 1312:【例3.4】昆虫繁殖
    1312:【例3.4】昆虫繁殖时间限制:1000ms      内存限制:65536KB提交数:41168   通过数:20495【题目描述】科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x�个月产y�对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只......
  • ubuntu18.04安装nodejs最新版、指定版 12.x 14.x
    ubuntu18.04安装nodejs最新版、指定版12.x14.x 今天准备在ubuntu服务器里面安装nodejs版本,ubuntu18.04仓库nodejs默认是8.x版本。1.通过apt安装nodejs在Ubuntu18.04的默认仓库包含了一个Node.js的版本,截至当前,该仓库的node.js版本是8.10.0。要安......
  • 125.C++中的size_t
    125.C++中的size_t1.size_t●size_t是一些C/C++标准在stddef.h中定义的,size_t类型表示C中任何对象所能达到的最大长度,它是无符号整数●它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。size_t在32位系统上定义为unsignedint,也就是32位无符号整型。在64......
  • IU5530支持48V输入,输出12V-24V,3.5A异步降压DC-DC转换器
    IU5530E是一款具有集成型高侧MOSFET的48V、3.5A降压稳压器。能够耐受的抛负载脉冲高达50V。一个低纹波脉冲跳跃模式将无负载时的电源电流减小至180μA。当启用引脚被拉至低电平时,关断电源电流被减少至4μA。欠压闭锁在内部设定为4.3V,但可用使能引脚将之提高。可在内部控制输出电压......
  • 《Kali渗透基础》12. 无线渗透(二)
    @目录1:无线协议栈1.1:ifconfig1.2:iwconfig1.3:iw1.4:iwlist2:无线网卡配置2.1:查看无线网卡2.2:查看信道频率2.3:扫描附近AP2.4:侦听接口添加与删除3:RADIOTAP头部4:MPDU4.1:基本知识4.2:MPDU介绍4.3:Header4.3.1:FrameControl4.3.1.1:Type/SubType4.3.1.2:ToDS/FromDS4.3.2:Duration/I......
  • 12-面向对象-方法重载(OverLoad)
    基本介绍重载(Overload):指一个类中可以有多个方法具有相同的名字,但这些方法的参数不同(参数的类型和个数不同)即在Java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!publicclassOverLoad01{publicstaticvoidmain(String[]args){MyCalculatormc......
  • web渗透测试(12):命令注入
    命令注入来自缺乏对作为命令一部分使用的信息的过滤和编码。最简单的示例来自使用函数system(运行命令)并将HTTP参数作为此命令的参数。 有很多方法可以利用命令注入:例如,通过在反引号内注入命令 `id`通过将第一个命令的结果重定向到第二个命令 |id如果由第一个成功运行的......