关于kubernetes:Kubernetes网络插件CNI的基准测试

49次阅读

共计 3062 个字符,预计需要花费 8 分钟才能阅读完成。

本文是对我之前的基准测试(2018 年和 2019 年)的更新,该基准测试基于 Kubernetes 1.19 和 Ubuntu 18.04,并于 2020 年 8 月更新了 CNI 版本。

1) 基准测试申明

1.1) 自 2019 年 4 月以来的变动 ?

  • 测试您本人的集群 :当初,您能够应用咱们的“Kubernetes 网络基准”工具公布的版本在您本人的集群上运行基准测试: knb (https://github.com/InfraBuilder/k8s-bench-suite)。
  • 欢送来到 CNI 战斗中的新挑战者 :VMware Tanzu 的“Antrea”和 alauda.io 的“Kube-OVN”
  • 新计划 :此基准测试涵盖“Pod-to-Pod”网络性能,但也波及到新的“Pod-to-Service”计划,该计划波及理论测试案例。实际上,您的 API 容器将通过服务而不是容器 IP 耗费服务中的数据库(当然,咱们会在两种状况下都测试 TCP 和 UDP)。
  • 资源耗费 :当初,每个测试都有本人的资源比拟。
  • 删除了某些测试 :咱们不再运行 HTTP,FTP 和 SCP 测试。咱们与社区和 CNI 维护者的行之有效的单干突显了 iperf TCP 后果与 curl 后果之间的差距,这是因为 CNI 启动的提早(在 Pod 启动的最后几秒钟,在理论应用案例中并不令人欣慰)。
  • 开源 :所有基准测试源(脚本,CNI yml 和原始后果)都能够在 github 上找到:https://github.com/InfraBuilder/benchmark-k8s-cni-2020-08。

1.2) 基准测试协定

整个协定在 https://github.com/InfraBuilder/benchmark-k8s-cni-2020-08/blob/master/PROTOCOL.md 中有具体阐明

请留神,以后文章仅关注具备默认内核的 Ubuntu 18.04。

1.3) 抉择 CNI 作为基准

该基准旨在比拟能够与单个 yaml 文件设置的 CNI(因而不包含所有基于脚本的装置,如基于 VPP 的 CNI 等)。

咱们将比拟的 CNI 如下:

  • Antrea v.0.9.1
  • Calico v3.16
  • Canal v3.16 (Flannel network + Calico Network Policies)
  • Cilium 1.8.2
  • Flannel 0.12.0
  • Kube-router latest (2020–08–25)
  • WeaveNet 2.7.0

2) CNI MTU tuning

首先,咱们将查看 MTU 检测对 TCP 性能的影响:

UDP 的影响更加显著:

思考到此处显示的对性能的微小影响,咱们心愿向所有 CNI 维护者传播有意义的信息:请在 CNI 中施行 MTU 自动检测。

然而,如果您的确必须抉择未实现主动 MTU 的 CNI,则须要本人对其进行调整以放弃性能。请留神,这实用于 Calico, Canal 和 Weavenet。

3) CNI 基准测试 : 原始数据

在本节中,咱们将比拟 CNI 与正确的 MTU(自动检测或手动调整)。这里的次要指标是在图表中显示原始数据。

  • Gray : Reference (aka Bare metal)
  • Green : bandwidth > 9 500 Mbit/s
  • Yellow : bandwidth > 9 000 Mbit/s
  • Orange : bandwidth > 8 000 Mbit/s
  • Red : bandwidth < 8 000 Mbit/s
  • Blue : neutral (not-bandwidth related)

3.1) Idle

第一件事是在整个集群处于闲暇时建设 CNI 消耗量?

3.2) Pod-to-Pod

在这种状况下,客户端 Pod 通过其 IP 地址间接连贯到服务器 Pod。

3.2.1) TCP

“Pod 到 Pod”TCP 的后果和相干资源耗费如下:

3.2.2) UDP

“Pod-to-Pod”UDP 和相干资源耗费的后果如下:

3.3) Pod-to-Service

在本节中,客户端 Pod 通过 ClusterIP 服务连贯到服务器 Pod。这与理论用例更相干。

3.3.1) TCP

“Pod 到服务”TCP 的后果和相干资源耗费如下:

3.3.2) UDP

“Pod 到服务”UDP 的后果和相干资源耗费如下:

3.4) 网络策略

在此基准测试中列出的所有 CNI 中,惟一不能齐全反对网络策略的是 Flannel。其余所有接口都正确地施行了网络策略,包含入口和进口。

4) CNI Encryption

在咱们测试的所有 CNI 中,以下可能加密 Pod 间的通信:

  • Antrea with IPsec
  • Calico with wireguard
  • Cilium with IPsec
  • WeaveNet with IPsec

4.1) Bandwidth

因为这场战斗中的 CNI 较少,因而让咱们在一张图中概括所有场景:

4.2) 资源耗费

在本节中,咱们将查看 Pod 到 Pod 通信应用的资源,包含 TCP 和 UDP。在此处显示 Pod 至服务图没有意义,因为它没有提供更多信息。

5) 总结

让咱们尝试回顾所有这些图表。咱们在这里通过用“very fast”,”low”等修饰符代替理论值来引入一些主观性。

6) 个人观点

最初一部分是主观的,传播了我对后果的解释。

我很快乐看到 CNI 的新成员退出。Antrea 提供了许多性能,甚至在晚期版本中也施展了杰出的作用:主动 mtu,加密选项和间接装置。

思考到性能,除 Kube-OVN 和 Kube-Router 外,所有 CNI 都体现良好。对于 Kube-Router,它无奈检测到 MTU,并且我在文档的任何中央都找不到调整它的办法(此处存在无关 MTU 配置的未解决问题)。

在资源耗费方面,Cilium 仍比竞争对手应用更多的 RAM,但该公司公开地针对大型集群,而这 3 个节点的基准状况并非如此。Kube-OVN 也是 RAM 和 CPU 密集型设施,它依然是一个年老的 CNI,它依赖于 Open vSwitch(Antrea 也是如此,但 Antrea 更轻便并且性能更好)。

网络策略由除 Flannel 之外的所有通过测试的 CNI 施行。Flannel 很可能永远不会(永远)实现它,因为他们的目标很明确:越轻越好。

此外,加密性能是这里真正的令人诧异的成果。Calico 是最古老的 CNI 之一,然而直到几周前它们才提供加密。他们更喜爱应用 wireguard,而不是 IPsec,至多能够说,它在该畛域中表现出色。当然,因为加密负载,它耗费了大量的 CPU,然而它们实现的带宽是齐全值得的(请记住,Calico 加密的性能大概是 Cilium 的 6 倍,后者排名第二)。此外,在集群上部署 Calico 之后,您还能够随时激活 Wireguard 加密,也能够在短期内或永恒禁用它。这是十分用户敌对的。然而!咱们提醒您,Calico 目前无奈自动检测 MTU(该性能打算在不久后公布),因而,如果您的网络反对巨型帧(MTU 9000),请不要遗记调整 MTU。

此外,请留神 Cilium 可能加密整个节点到节点的流量(不仅是 pod 流量),这对于面向公众的集群节点来说可能是一个十分吸引人的性能。

总结一下,这是我对以下用例的倡议:

  • 我须要一个 CNI 来包容额定的小型节点集群,或者我不在乎安全性
    而后应用 Flannel,这简直是最轻的稳固 CNI。
  • 我的规范集群须要一个 CNI
    好的,Calico 是您的抉择,如果须要,请不要遗记调整 MTU。您能够应用网络策略,轻松启用 / 禁用加密等。
  • 我的(十分)大型集群须要一个 CNI
    好吧,该基准测试无奈反映大型集群的行为。我很乐意为此工作,然而咱们没有数百台具备 10Gbit / s 连接性的服务器。因而,最好的抉择是至多应用 Calico 和 Cilium 在您的节点上运行自定义的基准测试。

PS: 本文属于翻译,原文

正文完
 0