背景介紹
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掛載點是否已經成功掛載。即使DaemonSet已經成功拉起,還需要進一步確認容器是否正常啟動。
如圖中所示,點擊pod也可以展開容器信息,可以通過狀態或啟動日志判斷執行結果。
程序成功掛載后,網絡轉發是否生效可以通過日志確認
查看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