I am trying to deploy a web application using Kubernetes and google container engine. My application requires different types of machine. In my understanding, in GKE, I can only have single type (instance template) of machines in each cluster, and it reduces to wasting resource or money to mix different pods in single cluster because I need to match machine type with maximum requirement.
Let's say database requires 8 CPUs and 100GB ram, and application servers needs 2 CPUs and 4GB ram. I have to have at least 8 cpu / 100GB machine in the cluster for database pods to be scheduled. Kubernetes will schedule 4 application pods on each machine, and it will waste 84GB of ram of the machine.
Is it correct? If it is, how can I solve the problem? Do I need to run separate clusters for different requirement? Connecting services between different clusters doesn't seem to be s trivial problem either.
Google appears to be working on this:
Added node pool support to enable heterogeneous clusters (alpha).
This is from recent release notes of the gcloud sdk.
In my understanding, in GKE, I can only have single type (instance template) of machines in each cluster.... Do I need to run separate clusters for different requirement?
Yes, this is currently true. We are working on relaxing this restriction, but in the mean time you can copy the instance template to create another set of nodes with a different size.