If you schedule a large application in a node which has limited resources, then it will soon lead to OOM (out of memory) or others and will lead to downtime.
Requests and Limits are two ways in which we can control the amount of resource that can be assigned to a pod (resource like CPU and Memory)
Requests: Guaranteed
to get.
Limits: Makes sure that the container does not take node resources above a specific value.
i)Kubernetes
Scheduler decides the ideal node to run the pod depending on the requests and
limits.
ii)If your
POD requires 8GB of RAM, however, there are no nodes within your cluster which
has 8GB RAM, then your pod will never get scheduled.
1. default
pods for no limits.
# kubectl
get pods -o wide
# kubectl
describe node worker02
# vim requests-limits.yaml
apiVersion:
v1
kind: Pod
metadata:
name: labs-pod
spec:
containers:
- name: labs-container
image: nginx
resources:
requests:
memory: "640Mi"
cpu: "0.5"
limits:
memory: "12800Mi"
cpu: "1"
# kubectl
apply -f requests-limits.yaml
# kubectl
get pods -o wide
# kubectl
describe nodes worker01
Namespace: The Kubernetes namespace in which
the pod resides. In this case, the pod is in the default namespace.
Name: The name of the pod. Here, the pod
is named labs-pod.
CPU
Requests: The amount
of CPU resources that the pod requests from the cluster. In this case, the pod
requests 500 milliCPU (millicores), which is equivalent to 0.5 CPU cores or 50%
of a single CPU core.
CPU
Limits: The maximum
amount of CPU resources that the pod is allowed to consume. Here, the pod has a
CPU limit of 1 CPU core, which is equivalent to 100% of a single CPU core.
Memory
Requests: The amount
of memory resources that the pod requests from the cluster. In this case, the
pod requests 640 megabytes of memory.
Memory
Limits: The maximum
amount of memory resources that the pod is allowed to consume. Here, the pod
has a memory limit of 12800 megabytes.
Age: The age of the pod, indicating how
long it has been running.
No comments:
Post a Comment