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

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

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

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

Спасибо тебе за все


person Mert Can Girgin    schedule 01.04.2021    source источник


Ответы (2)


##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. GRUB

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/system/configure-cgroupsv2.service

[Unit]
Description=Configure CGroups V2

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

  1. СЛУЖБА: /usr/lib/systemd/system/configure-cgroupsv2.timer

[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
person Mehmet Pekmezci    schedule 11.05.2021

Кроме того, вы должны сделать следующее, чтобы иметь возможность запускать свои образы 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"
person Mehmet Pekmezci    schedule 11.05.2021