Kubernetes 集羣嘗試基於 Calico 啓用 eBPF

之前基於 Kubernetes 1.23.5 + calico 3.22 嘗試過,但沒有成功,遇到的問題詳見 K8s 網絡切換到 Calico eBPF 後 service node port 與 ingress nginx 不能正常工作

現在基於 Kubernetes 1.24 + calico 3.23 再次嘗試啓用 eBPF,官方幫助文檔 Enable the eBPF dataplane

前提條件:Ubuntu 版本至少 20.04,確認 BPF 文件系統是否已掛載

# mount | grep "/sys/fs/bpf"
none on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)

創建 ConfigMap,配置 api-server 的主機名與端口號,calico 通過這個 ConfinMap 獲取 api-server 的地址

kubectl create cm kubernetes-services-endpoint -n kube-system
kind: ConfigMap
apiVersion: v1
metadata:
  name: kubernetes-services-endpoint
  namespace: kube-system
data:
  KUBERNETES_SERVICE_HOST: "k8s-api"
  KUBERNETES_SERVICE_PORT: "6443"

如果不知道 api-server 的地址,可以通過下面的命令獲取

kubectl get configmap -n kube-system kube-proxy -o yaml | grep server

重新部署 calico pod

kubectl delete pod -n kube-system -l k8s-app=calico-node
kubectl delete pod -n kube-system -l k8s-app=calico-kube-controllers

檢查 calico pod 是否運行正常

kubectl get pods -n kube-system | grep calico 

禁用 kube-proxy

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

啓用 eBPF

calicoctl patch felixconfiguration default --patch='{"spec": {"bpfEnabled": true}}'

確認 eBPF 是否已啓用

calicoctl get felixConfiguration -o yaml | grep bpfEnabled
    bpfEnabled: true

在 node 服務器上用 tc 命令檢查 eBPF 是否正常啓用

tc -s qdisc show dev eth0 | grep clsact 
qdisc `clsact` ffff: parent ffff:fff1 

出現 clsact 說明已經啓用。

但問題依舊,NodePort 依然無法正常工作。

算了,不折騰了,改用 cilium

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章