背景介绍
istio服务网格默认通过iptables的方式劫持流量,一次请求会多次经过iptables和TCP/IP协议栈,增加请求的耗时。通过ebpf技术,可以绕过iptables和协议栈,加速同pod内业务容器和sidecar容器之间以及同节点的sidecar之间的通信,降低网络开销。
使用限制
开启条件:
操作系统发行版启用 cgroup v2。
Linux 内核为 5.8 或更高版本。公共镜像建议使用ctyunos 23.01以上版本,该版本内核为5.10。
cpu架构暂时只支持x86。
关于启用cgroup v2
需要进入对应节点,登录入口在ccse控制台->集群->节点->操作->更多->远程登录
登录后执行以下步骤:
- 修改/etc/default/grub的GRUB_CMDLINE_LINUX,增加一个参数systemd.unified_cgroup_hierarchy=1
- 重新生成grub.cfg文件,grub2-mkconfig -o /boot/grub2/grub.cfg(若使用了efi引导分区,则执行grub2-mkconfig -o /boot/efi/EFI/ctyunos/grub.cfg)
- 重启操作系统
注意开启cgroup v2有以下风险,请细致评估后再进行操作:
cgroup v2布局方式与v1完全不同,如果您已经有挂载v1的业务节点(非系统自带的节点),建议完全清空切换到v2。
有部分节点为cgroup v1部分节点为cgroup v2的情况下,可能会产生不可知的风险,建议整个集群都统一切换到一个版本。
cgroup v2依赖systemd进行配置分发,在一些极端场景下可能需要额外对system进行性能调优。
集群中已经存在pod使用 cgroup 特性时,重启节点后,存量pod未必会生效。
综上,建议在新开通的集群中进行cgroup切换,并保证后续扩容节点也要及时对齐cgroup版本。已有业务的存量集群不建议进行切换。
开启方法
登录服务网格控制台后,在 网格优化中心 -> 数据面ebpf中,选择集群后,点击“开启数据面ebpf加速”即可。
如果开启时存在节点不符合以上条件,页面会进行报错,您仍可以选择开启,开启后再升级内核或者切换cgroup为v2。在此之前,加速功能不生效,但是不会对原业务产生不良影响。
启用验证
开启成功后,会产生DaemonSet,查看DaemonSet状态可以确认ebpf挂载点是否已经成功挂载。
程序成功挂载后,网络转发是否生效可以通过日志确认
查看bpf日志方法:先到达相应的集群node上
sudo cat /sys/kernel/debug/tracing/trace_pipe(这个是管道)
sudo cat /sys/kernel/debug/tracing/trace(这个是有限文本)
转发是否成功,通过日志查看,出现以下关键字with eBPF successfully表示转发成功了。
python-552600 [007] d... 172606.097546: bpf_trace_printk: [debug] redirect 4183 bytes with eBPF successfully