Flannel #
Backends #
Flannel 可以与几种不同的后端配对。一旦设置,后端不应该在运行时更改。 VXLAN 是推荐的选择。host-gw 推荐给更高级的用户,他们想要性能提升并且其基础设施支持它(通常它不能在云环境中使用)。UDP 仅建议用于调试或非常旧的内核,不支持 VXLAN。
故障排除 #
性能 #
控制平面 #
Flannel以能够扩展到非常大量的主机而闻名。如果在与新创建的主机中的Pod联系时出现延迟,可能是控制平面存在问题。Flannel对CPU或RAM的需求较低,但首先要检查其是否有足够的资源可用。Flannel还依赖于数据存储的性能,无论是etcd还是Kubernetes API服务器,请检查它们的运行状况。
数据平面 #
Flannel依赖于底层网络,因此,如果看到数据平面性能不佳,首先应检查网络。
有两个与Flannel相关的选择可能会对性能产生重大影响:
- 后端类型(backend type)。例如,如果使用封装(encapsulation),vxlan的性能始终优于udp。为了获得最大的数据平面性能,应避免使用封装(encapsulation)。
- MTU的大小可能会产生很大影响。为了获得最大的原始带宽,应使用支持较大MTU的网络。Flannel将MTU设置写入
subnet.env
文件,该文件由Docker守护进程或CNI Flannel插件读取,后者负责为每个容器配置网络。故障排除时,首先确保Flannel使用的网络接口具有正确的MTU。然后,检查正确的MTU是否已写入subnet.env
文件。最后,检查容器的虚拟以太网设备是否具有正确的MTU。
防火墙 #
在使用UDP backend时,Flannel使用UDP端口8285
来发送封装数据包。
在使用VXLAN backend时,内核使用UDP端口8472
来发送封装数据包。
确保防火墙规则允许所有参与叠加网络的主机之间的流量。
确保防火墙规则允许来自Pod网络CIDR的流量访问Kubernetes主节点。