我们目前有一个 kubernetes 集群(使用 calico),其中所有工作节点都通过 lacp 绑定(2x10GB 链路,带有 LACP 模式 4 - 802.3ad)连接在一起。
然而,我们在两个 Pod 之间实现的最大吞吐量为 10 GB/s。根据一些文档,我们应该能够实现 20 GB/s。根据维基百科,这似乎是一种正常的行为:
这将分别为每个目标 MAC 地址、IP 地址或 IP 地址和端口组合选择相同的 NIC 从属设备
由此可以理解,对于给定的目标 IP + 端口组合,只使用一个链接。
我的问题是:我们是否应该能够达到 20 GB/s 的 Pod 间吞吐量?还是停留在 10 GB/s 是正常的?
答案1
这不是 Kubernetes 独有的,这是 LACP 的正常行为。它不会提供真正的吞吐量增加,而是将其行为更好地描述为“确定性分布連接“(不是单个数据包)并且具有容错能力。
它从数据包中提取一些标头字段(由模式决定)并对其进行哈希处理。例如,哈希模式“layer3+4”采用 OSI 第 3 层和第 4 层信息,例如 IP 和端口。哈希直接决定从哪个 LACP 支路发出此数据包。无论您选择哪种哈希模式,属于同一连接的所有数据包都将被哈希到同一支路,因此任何单个连接不能超过单程吞吐量。
当出现另一个连接时,如果幸运的话,它可以利用另一个 LACP 支路。在这种情况下,两个连接将分布在支路之间,主机之间的总吞吐量将翻倍。这并不能保证:它们可能会通过同一条支路进行路由。但是,当您有许多连接时(当我们考虑收敛集群时通常如此),平均而言,两条支路都会被利用。
如果您愿意,我可以将其与 Kubernetes 进行比较。如果您添加节点(并相应地扩展部署),则可以增加集群可以服务的客户端数量。但是,您无法通过这种扩展来改善特定请求的响应延迟(服务时间)(如果集群没有过载)。