目录

一、背景

二、准备工作

三、(强烈推荐)升级systemd

五、升级内核

六、还原内核

附、切换使用cgroup 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版。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐