May 062021
以前看书的时候,没有动手的习惯,也经常导致理解的有问题,这次为了深入学习kubernetes,把书上原理的东西,都动手验证一遍。
我是在CentOS 7.6,安装了Docker的最新版本来验证这本书里的内容。
mount -t cgroup
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cpu限制的目录
# ls /sys/fs/cgroup/cpu
cgroup.clone_children container cpu.cfs_period_us cpu.shares release_agent
cgroup.event_control cpuacct.stat cpu.cfs_quota_us cpu.stat system.slice
cgroup.procs cpuacct.usage cpu.rt_period_us docker tasks
cgroup.sane_behavior cpuacct.usage_percpu cpu.rt_runtime_us notify_on_release user.slice
下面就是操作的例子
cd /sys/fs/cgroup/cpu
mkdir container
ls container/
刚刚创建完的目录下,就已经一堆文件。运行一行代码,这是一个死循环,cpu占有 100%,看看如何通过cgoup来限制这种cpu占有。
# while : ; do : ; done &
[1] 25737
第一行代码是一个死循环,输出25737,是进程id号。通过top,你可以看到这个进程的cpu占用情况

可以很清楚看到 25737进程,已经95%。
查看当前的设置
# cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
-1
[root@devops ~]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us
100000
修改参数,就可以实现对cpu的控制
echo 2000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
把限制的进程id,写入tasks里,这里就是:25737
echo 25737 > /sys/fs/cgroup/cpu/container/tasks
这时候,你再使用top命令查看cpu占用情况。

看看cpu的限制的效果。
人生第一次做CPU限制,顺利完成。
收尾工程,杀死进程
kill 9 25737
这样你用top就无法看到这个进程。