<p>Here is what I am working with. 
I have 3 nodepools on GKE </p>

<ol>
<li>n1s1 (3.75GB)</li>
<li>n1s2 (7.5GB) </li>
<li>n1s4 (15GB)</li>
</ol>

<p>I have pods that will require any of the following memory requests. Assume limits are very close to requests. </p>

<pre><code>1GB, 2GB, 4GB, 6GB, 8GB, 10GB, 12GB, 14GB
</code></pre>

<p>How best can I associate a pod to a nodepool for max efficiency?</p>

<p>So far I have 3 strategies.</p>

<p>For each pod config, determine the <strong><em>“rightful nodepool”</em></strong>. This is the smallest nodepool that can accommodate the pod config in an ideal world.
So for 2GB pod it's n1s1 but for 4GB pod it'd be n1s2.</p>

<ol>
<li>Schedule a pod only on its <em>rightful nodepool.</em> </li>
<li>Schedule a pod only on its <em>rightful nodepool</em> or one nodepool higher than that.</li>
<li>Schedule a pod only on any nodepool where it can currently go. </li>
</ol>

<p>Which of these or any other strategies will minimize wasting resources?</p>

<p>=======</p>

<p>Why would you have 3 pools like that in the first place? You generally want to use the largest instance type you can that gets you under 110 pods per node (which is the default hard cap). The job of the scheduler is to optimize the packing for you, and it's pretty good at that with the default settings.</p>
