<p>I understand the use case of setting CPU request less than limit - it allows for CPU bursts in each container if the instances has free CPU hence resulting in max CPU utilization. 
However, I cannot really find the use case for doing the same with memory. Most application don't release memory after allocating it, so effectively applications will request up to 'limit' memory (which has the same effect as setting request = limit). The only exception is containers running on an instance that already has all its memory allocated. I don't really see any pros in this, and the cons are more nondeterministic behaviour that is hard to monitor (one container having higher latencies than the other due to heavy GC).
Only use case I can think of is a shaded in memory cache, where you want to allow for a spike in memory usage. But even in this case one would be running the risk of of one of the nodes underperforming. </p>

<p>Actually the topic you mention is interesting and in the meantime complex, just as Linux memory management is. As we know when the process is using more memory than the limit it will quickly move up on the potential "to-kill" process "ladder". Going further, the purpose of limit is to tell the kernel when it should consider the process to be potentially killed. Requests on the other hand are a direct statement "my container will need this much memory", but other than that they provide valuable information to the Scheduler about where can the Pod be scheduled (based on available Node resources). </p>

<p>If there is no memory request and high limit, Kubernetes will default the request to the limit (this might result in scheduling fail, even if the pods real requirements are met). </p>

<p>If you set a request, but not limit - container will use the default limit for namespace (if there is none, it will be able to use the whole available Node memory)</p>

<p>Setting memory request which is lower than limit you will give your pods room to have activity bursts. Also you make sure that a memory which is available for Pod to consume during boost is actually a reasonable amount. </p>

<p>Setting memory limit == memory request is not desirable simply because activity spikes will put it on a highway to be OOM killed by Kernel. The memory limits in Kubernetes cannot be throttled, if there is a memory pressure that is the most probable scenario (lets also remember that there is no swap partition). </p>

<p>Quoting <a href="https://medium.com/@will.tomlin" rel="nofollow noreferrer">Will Tomlin</a> and his interesting article on <a href="https://medium.com/hotels-com-technology/kubernetes-container-resource-requirements-part-1-memory-a9fbe02c8a5f" rel="nofollow noreferrer">Requests vs Limits</a> which I highly recommend:</p>

<blockquote>
  <p>You might be asking if there’s reason to set limits higher than
  requests. If your component has a stable memory footprint, you
  probably shouldn’t since when a container exceeds its requests, it’s
  more likely to be evicted if the worker node encounters a low memory
  condition.</p>
</blockquote>

<p>To summarize - there is no straight and easy answer. You have to determine your memory requirements and use monitoring and alerting tools to have control and be ready to change/adjust the configuration accordingly to needs.  </p>
