A Kubernetes cluster has a limited amount of available hardware resources.
Hardware resources are measured based on worker nodes with a specific number of CPU cores or RAM allocation.
For every Pod in the namespace, each container must have a memory request, memory limit, cpu request, and cpu limit.
By default there is no limit on how much resource a pod and its container can consume.
Requests and Limits are the mechanism used by kubernetes to control CPU and Memory consumed by containers in pod.
Requests and Limits are set on a per container basis.
ResourceQuotas can also be set for Kubernetes Objects with in a Namespaces.

● Every Container in the Pod must have a memory limit and a memory request.
● For every Container in the Pod, the memory limit must equal the memory request.
● Every Container in the Pod must have a CPU limit and a CPU request.
● For every Container in the Pod, the CPU limit must equal the CPU request.

In Kubernetes cluster each Nodes have a set of Memory, CPU, Disk. So whenever a Pod is placed on a Node, then Pod will start consuming the resources that available to the Node.
So if the Nodes has no sufficient resources, schedular will avoid placing Pod on that Node will be in pending state.
The output error for ResourceQuotas will be "FailedScheduling  No nodes are available that match all of the following predicates:: Insufficient memory / cpu". 
The exist running Pod in the container consume to used more ResourceQuotas than limit will be terminated.

[Heapster]
It is a cluster-wide aggregator of monitoring and event data.
It aggregates monitoring data across all nodes in Kubernetes cluster.
Heapster runs as a pod in the cluster, similar to how any Kubernetes application would run.
Heapster pod discovers all nodes in the cluster and queries usage information from the nodes Kubelet.
It collects metrics and then shows resource usage statistics for your cluster so that you can monitor resource usage for each node and also for each pod.

[Metrics Server]
It is a resource metrics monitoring tool for Kubernetes.
It is a cluster-wide aggregator of resource usage data.
It measures CPU and Memory usage across the Kubernetes cluster.
It collects metrics and then shows resource usage statistics for your cluster so that you can monitor resource usage for each node and also for each pod.
It collects resource metrics from the kubelet running on each worker node and exposes them in the Kubernetes API server through the Kubernetes Metrics API.

So can monitor the resource usage with simple commands using the top command.
$ kubectl top pods
$ kubectl top nodes
