Please enable Javascript to view the contents

Calico 下如何切换数据面到 eBPF

 ·  ☕ 1 分钟

1. 环境准备

1.1 Calico eBPF 要求

  • 系统要求

    • Ubuntu 18.04.4+
    • Red Hat v8.2
    • Linux kernel v5.3+

    如果 Calico 没有检测到兼容的内核,将会回退到标准模式。

  • 每个节点的 /sys/fs/bpf 都需要挂载有 BPF 文件系统

  • Calico 版本不低于 3.13

1.2 升级内核

这里使用的是 CentOS 7 操作系统:

1
2
3
uname -rv

3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018

内核版本不满足要求,因此需要升级内核。内核小版本更新很快,可以去 http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS/ 自行查找。

1
2
3
4
5
6
7
wget https://mirrors.nju.edu.cn/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-5.4.146-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-lt-5.4.146-1.el7.elrepo.x86_64.rpm
cat /boot/grub2/grub.cfg | grep menuentry
grub2-set-default 'CentOS Linux (5.4.146-1.el7.elrepo.x86_64) 7 (Core)'
grub2-editenv list
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

1.3 检查 BPF 文件系统

检查文件挂载:

1
2
3
mount | grep "/sys/fs/bpf"

none on /sys/fs/bpf type bpf (rw,relatime)

如果上面的结果为空,则需要挂载 BPF 文件系统,执行命令:

1
mount bpffs -t bpf /sys/fs/bpf

1.4 查看 Calico 版本

执行命令:

1
2
3
kubectl -n kube-system get deploy  calico-kube-controllers -o yaml |grep image

        image: calico/kube-controllers:v3.16.3

查看 Calico 版本不低于 3.13 即可。

2. 切换 Calico 数据面到 eBPF

2.1 关闭 kube-proxy

1
2
3
kubectl patch ds -n kube-system kube-proxy -p '{"spec":{"template":{"spec":{"nodeSelector":{"non-calico": "true"}}}}}'

daemonset.apps/kube-proxy patched

2.2 开启 eBPF 模式

calicoctl 是 Calico 提供的一个 CLI 工具。

1
2
3
calicoctl patch felixconfiguration default --patch='{"spec": {"bpfKubeProxyIptablesCleanupEnabled": false}}'
calicoctl patch felixconfiguration default --patch='{"spec": {"bpfEnabled": true}}'
calicoctl patch felixconfiguration default --patch='{"spec": {"bpfExternalServiceMode": "DSR"}}'

3. 参考


微信公众号
作者
微信公众号