阿里云Kubernetes集群使用IPVlan加速Pod网络-阿里云开发者社区

开发者社区> 阿里云容器服务 ACK> 正文

阿里云Kubernetes集群使用IPVlan加速Pod网络

简介: 随着各种类型的应用的容器化,除了无状态的微服务应用,越来越多像数据库、机器学习等对网络性能和延时非常敏感的应用也逐渐跑在了Kubernetes上。对于这种网络性能和延时特别敏感的应用,阿里云Kubernetes集群的网络方案Terway在之前提供了Pod独占ENI(弹性网卡)的网络模式,让Pod可以拥有和ECS完全一样的一张弹性网卡,性能相对ECS完全没有损失。

阿里云Kubernetes集群使用IPVlan加速Pod网络

背景

随着各种类型的应用的容器化,除了无状态的微服务应用,越来越多像数据库、机器学习等对网络性能和延时非常敏感的应用也逐渐跑在了Kubernetes上。对于这种网络性能和延时特别敏感的应用,阿里云Kubernetes集群的网络方案Terway在之前提供了Pod独占ENI(弹性网卡)的网络模式,让Pod可以拥有和ECS完全一样的一张弹性网卡,性能相对ECS完全没有损失。但ECS可以绑定的弹性网卡数量有限,使用独占ENI(弹性网卡)的模式的机器只能运行个位数的Pod数,应用没办法部署太密集。 所以Terway在ENI多IP的模式中推出了基于IPVlan的Pod网络,每个ENI可以供多达10个Pod共享,并且IPVlan的内核技术也能将损耗降到最低,在实际测试中网络延时可以媲美独占ENI模式。

原理概要

IPVlan是一种Linux内核的网络虚拟化技术,从Linux 3.19版本开始支持,通过IPVlan可以将一个网络接口创建出多个子虚拟接口。这些子虚拟接口可以设置不同的IP地址,父网卡会根据包中的IP地址决定把包转发到哪个子虚拟网卡。这些子虚拟网卡可以供k8s的每个Pod使用,从而让多个Pod可以共用一张弹性网卡。而对于Aliyun的ENI(弹性网卡),支持在网卡上额外再分配10-20个辅助VPC IP,可以动态分配辅助IP用于IPVlan子虚拟网卡配置。
image

适用场景和要求

由于IPVlan是比较新的内核版本才支持的虚拟化技术,所以有一定的要求和试用场景:

适用场景:

  • Pod和Pod直接通信的需求更多时,由于IPVlan访问k8s service需要额外走SNAT,所以pod访问Service的场景性能差一些(具体可参考https://kernel.taobao.org/2019/11/ipvlan-for-kubernete-net/)
  • 对网络延时敏感的应用,比如游戏、数据库、机器学习等
  • 独占ENI的模式没办法满足规模需求时
  • IPVlan模式目前还不支持Kubernetes NetworkPolicy

要求:

  • 阿里云Kubernetes集群Terway网络ENI多IP模式,并且Terway组件升级到最新版本
  • 节点使用Aliyun Linux2的操作系统(内核版本4.19,满足IPVlan模式需求)

使用方法

1. 创建阿里云Kubernetes集群

  • 选择操作系统为AliyunLinux2

image

  • 选择Terway网络插件

image

2. 修改Terway转发模式为IPVlan

  • 创建好集群后,通过kubectl连接到该集群,然后修改Terway的configmap:
kubectl edit cm eni-config -n kube-system
  • 增加转发模式配置:

image

  • 修改kube-proxy中集群网段到169.254.1.1/32来强制SNAT Service的流量
kubectl edit cm -n kube-system kube-proxy-worker
(如果有master节点的话)kubectl edit cm -n kube-system kube-proxy-master

修改其中clusterCIDR从Pod网段到169.254.1.1/32

  • 重启集群的每个节点

3. 验证重启节点能正常启动Pod

性能对比

时延

时延采用ping,netperf做了测试。ping测试了普通模式和洪泛模式,netperf测试了tcp_rr, udp_rr两种模式。结果如下: image
其中IPVlan, ENI模式较为接近。策略路由普通ping模式下约有20ns增加,洪泛ping模式7ns增加;udp_rr下降约8%、tcp_rr下降约10%。

带宽

带宽测试采用netperf测试了tcp_stream和不同包长下的udp_stream, 结果如下: image

其中udp stream模式下ENI,IPVlan较为接近约0.02%以下,策略路由约7%左右。吞吐IPVlan比ENI约有25%下降,策略路由相比ENI约有50%下降。 tcp stream模式下由于gso, gro的加速,吞吐较为接近。

参考文档:

阿里云系统组技术博客--Kubernetes网络的IPVlan方案 https://kernel.taobao.org/2019/11/ipvlan-for-kubernete-net/ (感谢阿里云系统组贡献了Kubernetes IPVlan的网络模式)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云容器服务 ACK
使用钉钉扫一扫加入圈子
+ 订阅

云端最佳容器应用运行环境,安全、稳定、极致弹性

官方博客
官网链接