Setting Pod Resource Limits and Requirements
Hello,
All is fine but still one point is unclear for me.
- step one
I set a container resource like it
resources:
limits:
cpu: "2" # with a limit of 2 cpu
memory: "2500Mi"
requests:
cpu: "1" # the container request 1cpu
memory: "1950Mi"
args:
- -cpus
- "1" # we set 1 cpu to the container
- -mem-total
- "1950Mi"
- -mem-alloc-size
- "100Mi"
- -mem-alloc-sleep
- "1s"
At run time i watch the describe of the worker node
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default stressmeout-797fb5bc6b-zqdwg 1 (50%) 2 (100%) 1950Mi (26%) 2500Mi (33%) 28s
kube-system calico-node-hzm52 250m (12%) 0 (0%) 0 (0%) 0 (0%) 25d
kube-system kube-proxy-mvwvk 0 (0%) 0 (0%) 0 (0%) 0 (0%) 25d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1250m (62%) 2 (100%)
memory 1950Mi (26%) 2500Mi (33%)
I can see that i use 50%/62% of the cpu, seems to make sens as there is 1 cpu requested and 1 set ('args:1') on a limit of 2 cpu
But when i run the top cmd on the worker node, i got 100% cpu used.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6913 root 20 0 2015532 1.918g 3116 S 99.7 26.3 7:01.63 stress
2.step 2
I drop down the cpu request of the container
resources:
limits:
cpu: "2" # with a limit of 2 cpu
memory: "2500Mi"
requests:
cpu: "0.5" # the container request only 500millicpu
memory: "1950Mi"
args:
- -cpus
- "1" # we attribute 1 cpu to the container
i watch the describe of the worker node
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default stressmeout-7569595655-wjd9h 500m (25%) 2 (100%) 1950Mi (26%) 2500Mi (33%) 2m56s
kube-system calico-node-hzm52 250m (12%) 0 (0%) 0 (0%) 0 (0%) 25d
kube-system kube-proxy-mvwvk 0 (0%) 0 (0%) 0 (0%) 0 (0%) 25d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 750m (37%) 2 (100%)
memory 1950Mi (26%) 2500Mi (33%)
ok, it's make sens the cpu is only 25% of the limit, and resource 750m
But here i don t understand:
i watch the process of the pod on the worker node running top, and it's still using 100% of the cpu... why ?
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6913 root 20 0 2015532 1.918g 3116 S 99 26.3 7:01.63 stress
Thank you.
Comments
-
Hi @djedje,
Exceeding resource limits does not guarantee a container's termination and/or a pod's eviction. Memory and CPU limits are treated differently. While consuming more memory that the Limit may trigger an OOMKill, consuming more CPU than the Limit will not trigger a kill of the container.
The documentation offers more details.
Regards,
-Chris0 -
Hello @chrispokorni ,
Thank you for the help. The link is interesting but still my question remain.
A few other exemple
1-----------------
resources: limits: cpu: "1" memory: "500Mi" requests: cpu: "0.5" memory: "200Mi" args: - -cpus - "0.5" - -mem-total - "350Mi"Here the pod does not even start, il report an Error status. Does the container need a minimum of 1 cpu tu run ?
2------------------
limits: cpu: "1" memory: "500Mi" requests: cpu: "0.5" memory: "200Mi" args: - -cpus - "1" - -mem-total - "350Mi"Here the container run as expected. But when i 'top' the worker node, the pod process use 100% of cpus
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13313 root 20 0 324332 320464 3116 S 99.0 4.2 0:09.51 stress3------------------
resources: limits: cpu: "2" memory: "500Mi" requests: cpu: "1" memory: "200Mi" args: - -cpus - "1" - -mem-total - "350Mi"Instead of requesting 500mcpu, i request 1cpu (but the args: is still 1 as previous), the 'top' still report 100%cpus
I feel that strange as even i request 500mcpus or 1 cpu, the 'top' still monitor 100% of cpu consuming ???4-------------------
resources: limits: cpu: "2" memory: "500Mi" requests: cpu: "1" memory: "200Mi" args: - -cpus - "2" - -mem-total - "350Mi"I increase the attribution of cpus to 2, which now match the cpu's limit of the container, run 'top' and get 200% of consuming
cpus (the pod still run without issues).PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21720 root 20 0 324332 320724 3120 S 188.4 4.2 0:42.43 stressSo in my case the minimum cpu the pod is using is 100% (what ever the cpu's requests) ...?
and under an 'args[-cpus]' of 1 the pod report an error status...?
Reading the link does not answer it. What am i missing ?
Thank you.
0 -
Hi @djedje,
It seems that the
stressimage does not like decimal CPU arguments, such as "0.5" and "1.5", but works well with integers like "1" and "2".
But once the container is running, thekubectl topcommand returns the expected CPU and memory utilization for both the node and the pod.Regards,
-Chris0 -
Thank you.
0
Categories
- All Categories
- 177 LFX Mentorship
- 177 LFX Mentorship: Linux Kernel
- 754 Linux Foundation IT Professional Programs
- 374 Cloud Engineer IT Professional Program
- 170 Advanced Cloud Engineer IT Professional Program
- 74 DevOps IT Professional Program - Discontinued
- 5 DevOps & GitOps IT Professional Program
- 100 Cloud Native Developer IT Professional Program
- 7.6K Training Courses & Learning Paths
- 2 AI & ML Training
- 1 Blockchain & Decentralized Identity Training
- 5 Cloud & Containers Training
- 1 Cybersecurity Training
- 2 DevOps & Site-Reliability Training
- 1 Linux Kernel Development Training
- 1 Networking Training
- 2 Open Source Best Practice Training
- 2 System Administration Training
- 1 System Engineering Training
- 1 Web & Application Development Training
- 794 Hardware
- 202 Drivers
- 68 I/O Devices
- 37 Monitors
- 95 Multimedia
- 173 Networking
- 91 Printers & Scanners
- 89 Storage
- 769 Linux Distributions
- 81 Debian
- 68 Fedora
- 22 Linux Mint
- 13 Mageia
- 24 openSUSE
- 150 Red Hat Enterprise
- 31 Slackware
- 13 SUSE Enterprise
- 356 Ubuntu
- 465 Linux System Administration
- 31 Cloud Computing
- 73 Command Line/Scripting
- Github systems admin projects
- 98 Linux Security
- 78 Network Management
- 101 System Management
- 46 Web Management
- 112 Mobile Computing
- 20 Android
- 77 Development
- 1.2K New to Linux
- 1K Getting Started with Linux
- 393 Off Topic
- 121 Introductions
- 182 Small Talk
- 29 Study Material
- 977 Programming and Development
- 310 Kernel Development
- 649 Software Development
- 990 Software
- 382 Applications
- 182 Command Line
- 5 Compiling/Installing
- 68 Games
- 317 Installation
- Archived
- 2 LFD140 Class Forum
- 1.4K LFS258 Class Forum
Upcoming Training
-
August 20, 2018
Kubernetes Administration (LFS458)
-
August 20, 2018
Linux System Administration (LFS301)
-
August 27, 2018
Open Source Virtualization (LFS462)
-
August 27, 2018
Linux Kernel Debugging and Security (LFD440)