跳转至

Spiderpool 性能测试

Spiderpool 是一个适用于 underlay 网络的高性能 IPAM CNI 插件,此文将对比其与市面上主流的 underlay IPAM CNI 插件(如 WhereaboutsKube-OVN)以及被广泛使用的 overlay IPAM CNI 插件 calico-ipam 在 ”1000 Pod“ 场景下的性能表现。

背景

为什么要做 underlay IPAM CNI 插件的性能测试?

  1. IPAM 分配 IP 地址的速度,很大程度上的决定了应用发布的速度。
  2. 大规模的 Kubernetes 集群在故障恢复时,underlay IPAM 往往会成为性能瓶颈。
  3. underlay 网络下,私有的 IPv4 地址有限。在有限的 IP 地址范围内,并发的创建 Pod 会涉及 IP 地址的抢占与冲突,能否快速的调节好有限的 IP 地址资源具有挑战。

环境

  • Kubernetes: v1.25.4
  • container runtime: containerd 1.6.12
  • OS: CentOS Linux 8
  • kernel: 4.18.0-348.7.1.el8_5.x86_64
Node Role CPU Memory
master1 control-plane 4C 8Gi
master2 control-plane 4C 8Gi
master3 control-plane 4C 8Gi
worker4 3C 8Gi
worker5 3C 8Gi
worker6 3C 8Gi
worker7 3C 8Gi
worker8 3C 8Gi
worker9 3C 8Gi
worker10 3C 8Gi

测试对象

本次测试基于 0.3.1 版本的 CNI Specification,以 macvlan 搭配 Spiderpool 作为测试方案,并选择了开源社区中其它几种对接 underlay 网络的方案作为对比:

Main CNI Main CNI 版本 IPAM CNI IPAM CNI 版本 特点
macvlan v1.1.1 Spiderpool v0.4.0 集群中存在多个 IP 池,每个池中的 IP 地址都可以被集群中的任意一个节点上的 Pod 所使用,当集群中的多个 Pod 并发的从同一个池中分配 IP 地址时,存在竞争。支持托管 IP 池的全生命流程,使其同步的与工作负载创建、扩缩容、删除,弱化了过大的共享池所带来的并发或存储问题。
macvlan v1.1.1 Whereabouts (CRD backend) v0.6.1 各节点可以定义各自可用的 IP 池范围,若节点间存在重复定义的 IP 地址,那么这些 IP 地址上升为一种共享资源。
Kube-OVN (underlay) v1.11.3 Kube-OVN v1.11.3 以子网来组织 IP 地址,每个 Namespace 可以归属于特定的子网, Namespace 下的 Pod 会自动从所属的子网中获取 IP 地址。子网也是一种集群资源,同一个子网的 IP 地址可以分布在任意一个节点上。
Calico v3.23.3 calico-ipam (CRD backend) v3.23.3 每个节点独享一个或多个 IP block,各节点上的 Pod 仅使用本地 IP block 中的 IP 地址,节点间无任何竞争与冲突,分配的效率非常高。

方案

测试期间,我们会遵循如下约定:

  • IPv4/IPv6 双栈场景。
  • 测试 underlay IPAM CNI 插件时,尽最大可能的确保可用的 IP 地址数量与 Pod 数量为 1:1。例如,接下来我们计划创建 1000 个 Pod,那么应当限制可用的 IPv4/IPv6 地址数量均为 1000 个。

具体的,我们会尝试以如下两种方式在上述 Kubenetes 集群上来启动总计 1000 个 Pod,并记录所有 Pod 均达到 Running 的耗时:

  • 仅创建一个 Deployment,其副本数为 1000。
  • 创建 100 个 Deployment,每个 Deployment 的副本数为 10。

接下来,我们会使用如下命令一次性的删除这 1000 个 Pod,记录被重建的 1000 个 Pod 再次全部达到 Running 的耗时:

kubectl get pod | grep "prefix" | awk '{print $1}' | xargs kubectl delete pod

最后,我们删除所有的 Deployment,记录所有 Pod 完全消失的耗时。

结果

单个 1000 副本的 Deployment

CNI 创建 重建 删除
macvlan + Spiderpool 2m35s 9m50s 1m50s
macvlan + Whereabouts 25m18s 失败 3m5s
Kube-OVN 3m55s 7m20s 2m13s
Calico + calico-ipam 1m56s 4m6s 1m36s

在测试 macvlan + Whereabouts 这个组合期间,创建的场景中 922 个 Pod 在 14m25s 内以较为均匀的速率达到 Running 状态,自此之后的 Pod 增长速率大幅降低,最终 1000 个 Pod 花了 25m18s 达到 Running 状态。至于重建的场景,在 55 个 Pod 达到 Running 状态后,Whereabouts 就基本不工作了,耗时类比于正无穷。

100 个 10 副本的 Deployment

CNI 创建 重建 删除
macvlan + Spiderpool 1m37s 3m27s 1m22s
macvlan + Whereabouts 21m49s 失败 2m9s
Kube-OVN 4m6s 7m46s 2m8s
Calico + calico-ipam 1m57s 3m58s 1m35s

小结

虽然 Spiderpool 是一种适用于 underlay 网络的 IPAM CNI 插件,其相较于主流的 overlay IPAM CNI 插件,面临着更多的复杂的 IP 地址抢占与冲突的问题,但它在大多数场景下的性能表现亦不逊色于后者。

评论