<p>If <code>limit</code> resources are greater than <code>request</code> resources, K8 will assign pod to <a href="https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/#create-a-pod-that-gets-assigned-a-qos-class-of-burstable" rel="nofollow noreferrer">QoS Burstable</a></p>
<p>Sample configuration:</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
  name: test-metadata
  namespace: demo
spec:
  containers:
  - name: test1
    image: nginx
    resources:
      limits:
        memory: &quot;14Gi&quot;
      requests:
        memory: &quot;4Gi&quot;
</code></pre>
<ul>
<li>Will Kubernetes <strong>always</strong> assign this pod on an instance that will have 14GB memory?</li>
<li>Will Kubernetes <strong>always</strong> reserve 14 GB memory for this pod? If yes, then how is it different than <code>QoS Guaranteed</code> class?</li>
</ul>
<p>I don't want to use <code>QoS Guaranteed</code> as the workload can vary.</p>

<p>By default Kubernetes takes only resource requests into account when trying to schedule the pods. This means that your pod will only be scheduled to some node which has at least so much resources available as requested by the pod.</p>
<p>To be even more precise the pod is going to be scheduled to one of the nodes such that sum of the resources requested by all the pods ( including the pod it is trying to schedule ) does not exceed the nodes allocatable resources. Here the operative words are <strong>allocatable resources</strong>.</p>
<p>Allocatable resources are those resources, which are available in excess of resources necesarry to operate system pods. How much of the hardware resources are reserved for system processes is configurable property of Kubernetes and is better described in <a href="https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable" rel="nofollow noreferrer">their documentation of node allocatable resources</a></p>
