Kubespray max pods per node defaults to 110 pods which is fine for worker nodes with a relatively small amount of memory
If the node has 64GB memory or more I typically increase to 254 max pods per node and align it with calico by increasing its default pool blocksize from 26 to 24
If the node has significant memory >512GB then I would undertake large node tuning to accomodate up to 400 pods as other factors such as networking, conntrack, file descriptors and scheduling overhead become real limits before RAM
Determine MTU in the environment. From a node, send ICMP echo request packets to another node on the same network with the Don't Fragment (DF) set in the IP header and a payload size of 1472 bytes. Another 28 bytes will automatically be added by the headers) for a total packet size of 1500 bytes. ping -M do -s 1472 lab.reids.net.au
Calico pod veth MTU should be underlay NIC MTU − encapsulation overhead:
No encapsulation (pure BGP/direct): veth_mtu = 1500
If this ping fails with message too long then keep reducing the payload size until the ping succeeds. Add 28 bytes and that is the node's interface MTU
Note that some networks support jumbo frames which allow MTUs larger than 1500. This must be set consistently on all switches in the path, otherwise fragmentation or drops occur. Often used on storage networks (iSCSI, NFS over IP)