<p>If I have a multi - tier application (say web / logic / database), where each tier having it's own container, and I need to deploy all of these en - bloc, do they all have to go into the same pod?</p>

<p>And if they are in the same pod, does this have any implications in terms of the maximum size of application that can be run?</p>

<p>Or is there some higher level abstraction that I can use to start all three layers, but have them running on different minions?</p>

<p>Why do you need to deploy all of the components together? In a micro services architecture, you would want to reduce the dependencies between each layer to a clean interface and then allow each layer to be deployed and scaled separately from the others. </p>

<p>If you need to deploy them together (e.g. they share local disk or localhost networking) then you need to deploy them as a single pod. A single pod is an atomic scheduling unit, so it will be deployed onto a single host machine. Since it lands on a single host, this limits the scalability of your application to the size of a single host (not allowing you to scale out as your traffic increases). </p>

<p>If your three layers are not tightly coupled, then you can run them in different pods, which allows them to be scheduled across multiple hosts (or on the same host if, for example, you are doing local development). To connect the pods together, you can define <a href="https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/services.md" rel="nofollow">services</a>. </p>

<p>You should take a look at the <a href="https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples/guestbook" rel="nofollow">guestbook example</a> which illustrates how to define pods and services for a simple multi-tier web application running on Kubernetes. </p>
