Установка CentOS 8 Cgroup (или версии 2) без CWP

#centos8 #cgroups

Вопрос:

Мы пытаемся установить cgroup v2 на наши виртуальные серверы CentOS 8, но после всех настроек мы можем ограничить память, но мы не можем ограничить процессор. Мы не видим cpu.max (sys/fs/cgroup/user.slice)

Есть ли у cgroup v2 полная поддержка на CentOS 8 ? , мы об этом понятия не имеем. (Мы должны использовать CentOS 8 , не может быть Rhel 8)

У вас есть какие-либо идеи или решения о том, как cgroup V2 работает на CentOS 8 без CWP ?

Спасибо Вам за Все

Ответ №1:

##https://www.redhat.com/en/authors/marc-richter
#https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/pdf/managing_monitoring_and_updating_the_kernel/Red_Hat_Enterprise_Linux-8-Managing_monitoring_and_updating_the_kernel-en-US.pdf

  1. выкапывать

 grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="cgroup_no_v1=all"
reboot
 
  1. /usr/bin/configure_cgroups.sh

 #!/bin/bash

touch /var/tmp/configure_cgroups.sh.ok

mkdir -p /mnt/cgroupv2

if [ ! -f /mnt/cgroupv2/cgroup.subtree_control ]
then
    mount -t cgroup2 none /mnt/cgroupv2
    echo " cpu" > /mnt/cgroupv2/cgroup.subtree_control
    echo " cpuset" > /mnt/cgroupv2/cgroup.subtree_control
    echo " memory" > /mnt/cgroupv2/cgroup.subtree_control
fi

##cpuNo=0
numberfCpus=$(nproc --all)
numberOfUsers=$(ls /home| wc -l)
cpuShare=$((numberfCpus*100000/numberOfUsers))
totalMemory=$(cat /proc/meminfo | grep MemTotal| awk '{print $2}')
memoryShare=$((totalMemory/numberOfUsers*1024))
for username in $(ls /home)
do
  if [ ! -d /mnt/cgroupv2/user.$username ]
  then
      mkdir -p /mnt/cgroupv2/user.$username
      ##echo "$cpuNo" > /mnt/cgroupv2/user.$username/cpuset.cpus
      ##echo "$cpuNo" > /mnt/cgroupv2/user.$username/cpuset.mems
      echo "$cpuShare 100000" > /mnt/cgroupv2/user.$username/cpu.max
      echo "$memoryShare" > /mnt/cgroupv2/user.$username/memory.max
      ##cpuNo=$((cpuNo 1))
  fi

done

for username in $(ls /home)
do
      for pid in $(ps -ef |  grep -i "^$username" | awk '{print $2}')
      do
         grep $pid /mnt/cgroupv2/user.$username/cgroup.procs >/dev/null
         if [ $? != 0 ]
         then
             echo $pid > /mnt/cgroupv2/user.$username/cgroup.procs
         fi
      done
done
 
  1. СЕРВИС : /usr/lib/systemd/система/настройка-cgroupsv2.service

 [Unit]
Description=Configure CGroups V2

[Service]
Type=oneshot
ExecStart=/usr/bin/configure_cgroups.sh
 

  1. СЕРВИС : /usr/lib/systemd/система/настройка-cgroupsv2.таймер

 [Unit]
Description=Configure CGroups V2 Timer

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target
 

 systemctl daemon-reload
systemctl enable configure-cgroupsv2.timer
systemctl start configure-cgroupsv2.timer

systemctl list-timers --all| grep configure

systemctl start configure-cgroupsv2.service
systemctl status configure-cgroupsv2.service
journalctl -xe
 
  1. Тестирование :

 CPU: "while true; do   echo > /dev/null; done"  then  top
                                                   
RAM :  "cat /dev/zero | head -c 20000M | tail " then top
 

Ответ №2:

Кроме того , вы должны выполнить следующие действия, чтобы иметь возможность запускать образы docker :

 1. yum install crun -y

2. cp  /usr/share/containers/containers.conf /etc/containers/

3. edit  /etc/containers/containers.conf 
   cgroups="disabled"
   runtime="crun"