1. 环境准备
1.1 Calico eBPF 要求
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. 参考
- https://ebpf.io/
- https://docs.projectcalico.org/maintenance/enabling-bpf
- https://docs.projectcalico.org/getting-started/clis/calicoctl/install