MTU (Maximum Transmission Unit) à tham số xác định kích thước lớn nhất của gói tin có thể truyền qua mạng. Trong môi trường Kubernetes sử dụng Calico như một plugin CNI, đều chỉnh MTU có thể giúp tối ưu hiệu suất mạng khi các gói tin di chuyển giữa các node và pod.
Bài viết này hướng dẫn bạn thay đổi MTU cho Calico trong Kubernetes, kèm theo một demo thực tế.
Note: Bài viết mang tính chất tham khảo dựa trên 1 tý hiểu biết sơ sơ network, nên sẽ có sai xót, hy vọng sẽ được mọi người góp ý thêm
1. Tại Sao Cần Đổi MTU?
Vì mình đang gặp tình huống khi setup 1 cụm kubernetes on premise, khi Calico được cấu hình với MTU = 1480 trong mạng overlay (sử dụng encapsulation), các gói tin sẽ được thêm header, làm tăng kích thước tổng của gói tin. Nếu node host có MTU = 1500, điều này dẫn đến:
Hiệu suất giảm: Nếu số lượng kết nối mạng lớn (như trường hợp sử dụng nhiều pods), việc phân mảnh gói tin sẽ gia tăng đáng kể, làm tăng độ trễ và giảm hiệu suất mạng tổng thể.
Fragmentation: Gói tin lớn hơn MTU của node (1500) sẽ bị phân mảnh.
SOS
Tiếp theo mình lần lược chạy kubectl exec -it <pod> -n <ns> ping -M do -s 1470 <Ip_worker_node>
thay 1470 lần lượt 1460, 1450,.. đến khi success và đổi Calico network theo số đã tìm được
2. Cách đổi trong Calico
- Tìm ConfigMap cho Calico trong namespace
kube-system
:kubectl edit configmap calico-config -n kube-system
- Trong ConfigMap, tìm dòng sau: FELIX_VXLANMTU, FELIX_WIREGUARDMTU, FELIX_IPINIPMTU
- Thay giá trị bằng MTU mong muốn.
- Lưu và thoát.
Tiếp đến là tunnel
kubectl patch installation.operator.tigera.io default --type merge -p '{"spec":{"calicoNetwork":{"mtu":1450}}}'
3. Xem giá trị MTU hiện tại
Rollout restart calico network phát, xong reboot server phát nữa đã nhé sau đó để xem kích thước hiện tại, sử dụng lệnh sau: ip link show
Chúc các bạn thành công!!
Ref: https://docs.tigera.io/calico/latest/networking/configuring/mtu