容器启动提示cgroup异常
cgroup2是 Linux 内核中的一个特性,代表了统一的控制组(cgroup)层次结构,它在较新的内核版本中被引入,以解决 cgroup v1 版本中的一些限制和问题
env
- REDHAT_BUGZILLA_PRODUCT=“Red Hat Enterprise Linux 9”
- kernel 5.14.0-284.11.1.el9_2.x86_64
问题
Attaching to elasticsearch-node1, kibana-dashboards
Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:297: applying cgroup configuration for process caused \"open /sys/fs/cgroup/docker/28ebb87c42666bc4fd0e9a894801981466f97b9a4f9366edba496a61750ab91c/cpuset.cpus.effective: no such file or directory\"": unknown
关键信息:
/sys/fs/cgroup/docker/ not fount
分析:
当前镜像是基于cgroup1构建的,在高版本linux上默认启用cgroup2,因此需要降级cgroup
#在比较新的linux发型版本默认开启cgroup v2
cgroup v2早已在linux 4.5版本的时候就已经加入内核中了,而centos8默认也已经用了4.18作为其内核版本,但是系统中仍然默认使用的cgroup v1
本文主要介绍了在fedora 31系统,内核版本为5.5.15上的cgroup v2
mount
grubby --update-kernel=ALL --args=systemd.unified_cgroup_hierarchy=1
mount|grep cgroup
解决
cgroup2 -> cgroup1(降级处理)
m1.关闭unified_cgroup_hierarchy
sudo dnf install -y grubby
sudo grubby \
--update-kernel=ALL \
--args="systemd.unified_cgroup_hierarchy=0"
m2.通过grub2修改内核参数
open /etc/default/grub as admin,Append value of GRUB_CMDLINE_LINUX with systemd.unified_cgroup_hierarchy=0
sudo grub2-mkconfig > /boot/efi/EFI/fedora/grub.cfg or
sudo grub2-mkconfig > /boot/grub2/grub.cfg
sudo reboot now
[root@r240 ~]# docker info |grep -i cgroup
Cgroup Driver: cgroupfs
unified_cgroup_hierarchy特性
cgroups(控制组)是一种用于限制、记录和隔离进程组资源使用的技术。它允许管理员对进程进行分组,并对这些组的资源使用(如CPU、内存、磁盘I/O等)进行控制和监控。
在早期的Linux版本中,cgroups是以不同的子系统存在的,比如CPU子系统、内存子系统等,每个子系统都有自己的文件系统层次结构,这使得管理和使用cgroups变得相对复杂。
"unified_cgroup_hierarchy"是一个特性,它在Linux内核的较新版本中被引入,目的是简化cgroups的实现和使用。
"unified_cgroup_hierarchy"通过提供一个统一的文件系统层次结构来解决这个问题。在这个统一的层次结构中,所有的cgroup子系统都位于同一个层次结构下,使得创建、管理和监控cgroups变得更加简单和一致。