What are the minimum and recommended hardware and network requirements for running microk8s in production ? Any use case available ?
To really know what resources are going to be necessary, you will have to setup a testing environment and figure out what the requirements of your workloads are.
I have tested it to some extent but need more information like how does the Dqlite and overall the cluster performs under load or when used in a production environment in a long run. Otherwise, I liked the approach of microk8s, very similar to Swarm and lots of add-ons already built in.
IMHO and as far as i observed dqlite (same with any raft based system) needs fast disk storage SSD will be great.
The kubelite (all control plane components) memory consumes a good amount with about 500MB-1GB on an active cluster, meaning many kubernetes resources such as pods, deployments etc… with constant control loop of creating, destroying resources, not much about how your pod / workload uses resources.
A 3 or 5 node control plane is good fit for HA. Dont recommend having lots of control plane nodes. It just adds unnecessary load to dqlite.
How your workload uses the compute resources is not a particular concern of dqlite or control plane.
If i have my way an 8GB x 4 cpu server to host the control plane is a good start.
I also recommend going for v1.23 where it has the initial support of worker only nodes. I.e. it doesn’t contain dqlite, containerd and a subset of the kubelite (kubelet, kube-proxy and calico).
A worker node can use as little as few MBs about 200 i think.
You can then better gauge the compute resource according to your workload needs instead of factoring in dqlite, apiserver and others.
Oh in case you can afford having only 1 network interface, that will be easier to troubleshoot.
I hope this helps.
Thanks for your detailed response. So,
Does that mean that I still can have a HA cluster on Microk8s running the control plane and workloads together provided the servers have enough resources and faster disks like SSD or NVME ?
Yes you can. Again depending on your workloads, sometimes you dont want it to interfere with the control plane or the other way around.
I guess more info is required mainly the number of pods you will run on the cluster and the number of nodes you will have in the cluster (node size might help as well).
Personally I have measured peaks of up to ~3 cores on the control plane node in my microk8s deployment (2 nodes with 6 cores/4GB Mem and one node with 10 cores/6GB mem).
This is not a production cluster just a UAT one we use, I can send you some screenshots from the cluster profiling I’ve done if you wish -just message me.