The aim of this lab is to restrict system resource usage by utilizing cgroups. You need to limit the sum total usage of resources of containers to exactly 1 CPU. You also need to limit the sum total usage of resources of containers to 50% RAM. These limitations need to be imposed by creating a cgroup.
Learning Objectives
Successfully complete this lab by achieving the following learning objectives:
- Create my_limits.slice in /etc/systemd/system/ and Set Resource Limits CPU on 50% Compute Capacity and RAM to 500M
vim /etc/systemd/system/my_limits.slice
Description=my slice Before=slices.target [Slice] CPUAccounting=true CPUQuota=50% MemoryAccounting=true MemoryLimit=500M
ESC :wq ENTER
See more info at: http://man7.org/linux/man-pages/man5/systemd.resource-control.5.html
- Reload the Daemon and Run Two Python Containers for Testing with –cgroup-parent=my_limits.slice Parameter
sudo systemctl daemon-reload
This is when you will need to log into two extra terminals, so that you have three total. Two will be for interacting with two python containers, and one will be for monitoring the system resource usage.
In Terminal 1
[cloud_user@server1 ]$ sudo docker run -rm -it --cgroup-parent=my_limits.slice docker.io/python
In Terminal 2
[cloud_user@server2 ]$ sudo docker run --rm -it --cgroup-parent=my_limits.slice docker.io/python
In Terminal 3
[cloud_user@server3 ]$ htop
- Run a Stress Test in All of the Containers
In each of the two python containers run this code:
import threading def test(): while True: 1000*1000 threading.Thread(target=test).start() threading.Thread(target=test).start() threading.Thread(target=test).start() threading.Thread(target=test).start() threading.Thread(target=test).start()
Monitor the results in Terminal 3, and you will see that the sum total resource usage of the containers will not exceed the given limits.