CentOS Linux升级内核kernel方法及启用cgroup v2
本文详细介绍了CentOS 7.9系统内核升级的全过程。首先说明了升级背景,当默认3.10.0内核无法满足Kubernetes等需求时需升级至4.x以上版本。重点内容包括:强烈推荐先升级systemd至234版本以支持cgroupv2;通过rpm方式安装6.9.7新版内核;配置grub2设置默认启动内核;完整的内核版本验证流程。此外还提供了内核回退方法,以及从cgroupv1切换到v2的具体操作步
目录
一、背景
某些情况需要对Linux发行版自带的内核kernel可能版本较低,需要对内核kernel进行升级。例如:CentOS 7.x 版本的系统默认内核是3.10.0,如果需要再操作系统上安装Kubernetes,通常,建议在安装Kubernetes前建议先对内核进行升级至5.x或者6.x
下文,以CentOS 7.9 64bit为例,展示升级内核kernel的过程。
二、准备工作
1、升级前,以root用户,检查当前内核版本:
uname -r

查询得到的版本号为:3.10.0-1160.el7.x86_64
-
第一组:3 主版本号
-
第二组:10 次版本号,当前为稳定版本,一般这个数字为偶数表示稳定,奇数表示在开发版本,通常开发版本不做生产使用
-
第三组:0 修订版本号
-
第四组:1160 表示发型版本的补丁版本
-
第五组:el7 该el7是Red Hat Enterprise Linux 7 的缩写,表示与 Red Hat Enterprise Linux 7 系列兼容的发行版或软件包
-
第六组:x86_64 对应的CPU硬件架构。
2、升级前,以root用户,查看内核列表及顺序、查看启动是默认内核:
awk -F \' '$1=="menuentry " {print $2}' /etc/grub2.cfg
grub2-editenv list

3、浏览以下网页,从中选择即将升级的新版内核(如果是Ubuntu等其他发行版则可从其他地方寻找内核)
https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/
其中kernel-ml中的ml是英文【mainline stable】稳定主线版本;kernel-lt 中的lt是英文【long term support】的缩写,长期支持版本。


三、(强烈推荐)升级systemd
由于systemd 版本≥232 才能支持 cgroup v2。而CentOS 7 默认版本219版本过低。 所以为了后续能使用cgroup v2,需要升级systemd版本。 而在升级systemd安装版本后,还需升级操作系统内核版本后才会启用新版systemd。因此步骤顺序应当为先升级systemd再升级内核。
虽然升级内核本身并不需要升级systemd,但是强烈建议先升级systemd,无论是否使用cgroup v2。
升级systemd的步骤如下:
1、以root用户,查看当前安装的systemd版本
systemctl --version
2、以root用户,对当前Linux配置获取新版systemd的yum源
wget https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/repo/epel-7/jsynacek-systemd-backports-for-centos-7-epel-7.repo -O /etc/yum.repos.d/jsynacek-systemd-centos-7.repo --no-check-certificate
3、以root用户,升级systemd安装版本(从原219版本升级至234版本)
yum -y update systemd
4、以root用户,升级systemd安装版本,查看当前操作系统正使用的版本(可以看到目前仍使用219版本,还需升级操作系统内核版本后才启用新版systemd)
dmesg | grep 'running in system mode'

五、升级内核
1、以root用户,选择新版内核,并通过rpm方式安装新内核:
rpm -ivh https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-ml-6.9.7-1.el7.elrepo.x86_64.rpm

2、 安装后,以root用户,查看内核列表:
awk -F \' '$1=="menuentry " {print $2}' /etc/grub2.cfg
列表中可以看到刚刚安装的新内核:

3、 升级后,以root用户,设置Linux启动时默认选择新内核:
grub2-set-default "CentOS Linux (6.9.7-1.el7.elrepo.x86_64) 7 (Core)"
grub2-editenv list
可以看到,Linux启动默认内核已经设置为新内核

4、 重启Linux,以root用户执行reboot重启
reboot
5、 重启Linux时,可看到在启动界面多了一个内核选择,且默认选了新内核

6、 重启后,以root用户,检查升级后的内核版本:

至此,内核升级完成。
另外,如按前文已升级systemd,此时在升级完内核并重启后,以root用户再次查看当前操作系统正使用的版本,可以看到已自动启用新的systemd版本:
systemctl --version
dmesg | grep 'running in system mode'

六、还原内核
若需回退选择为原内核版本,可通过命令“grub2-set-default”设置对应的内核版本名,然后重启即可。
附、切换使用cgroup v2
cgroup是Linux内核提供的重要机制。在Linux中,各类容器化技术均使用cgroup实现资源限制。 cgroup有两个版本v1和v2。由于 cgroup有两个版本v1和v2。v1功能相对零散,不方便维护,v2是未来的演进方向。在这种情况下。 目前操作系统对这两个版本支持模式有三种:
- legacy:只支持 cgroup v1
- hybrid:同时支持 cgroup v1 和 cgroup v2
- unified:只支持 cgroup v2
这三种模式在/etc/default/grub配置文件中GRUB_CMDLINE_LINUX里的配置内容分别为:
- legacy模式,只支持cgroup v1版本
cgroup_enable=memory systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller=1
- hybrid模式,同时支持cgroup v1和v2版本
cgroup_enable=memory systemd.unified_cgroup_hierarchy=1 systemd.legacy_systemd_cgroup_controller=1
- unified模式,只支持cgroup v2版本(注意多了cgroup_no_v1=all)
cgroup_enable=memory systemd.unified_cgroup_hierarchy=1 systemd.legacy_systemd_cgroup_controller=0 cgroup_no_v1=all
从cgroup v1切换至cgroup v2的步骤:
1、前置检查。使用root用户检查当前systemd版本,若不满足要求需参照前文升级systemd。
#查看当前安装的systemd版本。 版本必须≥232才支持cgroup v2
systemctl --version
#查看当前操作系统正使用的版本。 版本必须≥232才支持cgroup v2
dmesg | grep 'running in system mode'

2、查看当前cgroup情况:
#查看当前操作系统内核支持的cgroup版本范围
# 若输出为包含“cgroup”字样的一行,则表示只支持cgroup v1
# 若输出为既又“cgroup”和“cgroup2”字样的两行,则表示既支持cgroup v1也支持v2
grep cgroup /proc/filesystems
#查看当前已挂载的cgroup文件系统
# 若输出type仅包括tmpfs、cgroup,则表示已挂载v1版文件系统。
# 若输出type还包括cgroup2,则表示已挂载v2版文件系统。
mount | grep cgroup
#查看操作内核当前正使用的cgroup版本
# 若输出为tmpfs,则表示当前正使用v1版。
# 若输出为cgroup2fs,则表示当前正使用v2版。
stat -fc %T /sys/fs/cgroup/

3、使用root用户编辑/etc/default/grub文件,在其中的GRUB_CMDLINE_LINUX配置内容后面增加:systemd.unified_cgroup_hierarchy=1 (这样其他配置为默认值)。
建议按前文介绍的三种模式的选择配置内容,这里选择unified模式,配置增加内容如下:
cgroup_enable=memory systemd.unified_cgroup_hierarchy=1 systemd.legacy_systemd_cgroup_controller=0 cgroup_no_v1=all

4、保存完/etc/default/grub文件后,使用root用户执行以下命令
#由于CentOS使用的grub2,因此使用以下命令。 对于Ubuntu则使用update-grub命令
grub2-mkconfig -o /boot/grub2/grub.cfg
5、使用root用户重启
reboot
6、重启后,检查结果
grep cgroup /proc/filesystems
mount | grep cgroup
stat -fc %T /sys/fs/cgroup/

输出为cgroup2fs,则表示当前正使用cgroup v2版。
更多推荐
所有评论(0)