前言

环境:centos7.9 kernel版本:3.10.0-1160.71.1.el7.x86_64 kernel内核的官网:https://www.kernel.org/ 一个linux社区的仓库源,ELRepo官网:http://elrepo.org/tiki/tiki-index.php

说明

因为安装k8s的需要,需要更高版本的内核,以便让docker和k8s更加的稳定,所以需要把centos7.9的内核从3.10升级到5.4版本。

#查看内核版本
[root@k8s-node-61 ~]# uname -r
3.10.0-1160.114.2.el7.x86_64
#有很多内核的包
[root@k8s-node-61 ~]# rpm -qa|grep kernel
kernel-3.10.0-1160.114.2.el7.x86_64
kernel-3.10.0-1160.el7.x86_64
kernel-tools-3.10.0-1160.114.2.el7.x86_64
kernel-tools-libs-3.10.0-1160.114.2.el7.x86_64

联网升级内核版本

使用yum 更新内核: 大多数 Linux 发行版提供自行维护的内核,可以通过 yum 或 rpm 等包管理系统升级。 ELRepo是一个为Linux提供驱动程序和内核映像的存储库,本篇内核升级方案就是采用ELRepo提供的内核通道。 ELRepo官网:http://elrepo.org/tiki/tiki-index.php

导入公钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

下载并安装elrepo仓库

[root@k8s-node-61 ~]# yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
已加载插件:fastestmirror
elrepo-release-7.el7.elrepo.noarch.rpm                                                                       | 8.7 kB  00:00:00     
正在检查 /var/tmp/yum-root-R_vadl/elrepo-release-7.el7.elrepo.noarch.rpm: elrepo-release-7.0-6.el7.elrepo.noarch
/var/tmp/yum-root-R_vadl/elrepo-release-7.el7.elrepo.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 elrepo-release.noarch.0.7.0-6.el7.elrepo 将被 安装
--> 解决依赖关系完成

依赖关系解决

====================================================================================================================================
 Package                    架构               版本                           源                                               大小
====================================================================================================================================
正在安装:
 elrepo-release             noarch             7.0-6.el7.elrepo               /elrepo-release-7.el7.elrepo.noarch             5.0 k

事务概要
====================================================================================================================================
安装  1 软件包

总计:5.0 k
安装大小:5.0 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : elrepo-release-7.0-6.el7.elrepo.noarch                                                                          1/1 
  验证中      : elrepo-release-7.0-6.el7.elrepo.noarch                                                                          1/1 

已安装:
  elrepo-release.noarch 0:7.0-6.el7.elrepo                                                                                          

完毕!

官网提示安装的,那就安装

[root@k8s-node-61 ~]# yum install -y yum-plugin-fastestmirror
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: hkg.mirror.rackspace.com
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
elrepo                                                                                                       | 3.0 kB  00:00:00     
elrepo/primary_db                                                                                            | 401 kB  00:00:00     
软件包 yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch 已安装并且是最新版本
无须任何处理
[root@k8s-node-61 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: mirror.rackspace.com
elrepo-kernel                                                                                                | 3.0 kB  00:00:00     
elrepo-kernel/primary_db                                                                                     | 2.2 MB  00:00:08     
可安装的软件包
kernel-lt.x86_64                                                  5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-devel.x86_64                                            5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-doc.noarch                                              5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-headers.x86_64                                          5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools.x86_64                                            5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools-libs.x86_64                                       5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                 5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-ml.x86_64                                                  6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-devel.x86_64                                            6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-doc.noarch                                              6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-headers.x86_64                                          6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-tools.x86_64                                            6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-tools-libs.x86_64                                       6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                 6.9.3-1.el7.elrepo                                   elrepo-kernel
perf.x86_64                                                       5.4.277-1.el7.elrepo                                 elrepo-kernel
python-perf.x86_64                                                5.4.277-1.el7.elrepo                                 elrepo-kernel

这里能离线下载到内核的rpm包,如果你的linux不联网,则可以离线下载安装包 https://elrepo.org/linux/kernel/el7/x86_64/RPMS/

查看elrepo源里可用内核版本,可以看到有长期支持的版本5.4.277和稳定的主线版本7.0.0

  • lt = long time 长期支持内核,采用长期支持版本(kernel-lt),更加稳定一些

  • ml=mainline 稳定主线内核

root@k8s-node-61 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: mirror.rackspace.com
elrepo-kernel                                                                                                | 3.0 kB  00:00:00     
elrepo-kernel/primary_db                                                                                     | 2.2 MB  00:00:08     
可安装的软件包
kernel-lt.x86_64                                                  5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-devel.x86_64                                            5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-doc.noarch                                              5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-headers.x86_64                                          5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools.x86_64                                            5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools-libs.x86_64                                       5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                 5.4.277-1.el7.elrepo                                 elrepo-kernel
kernel-ml.x86_64                                                  6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-devel.x86_64                                            6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-doc.noarch                                              6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-headers.x86_64                                          6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-tools.x86_64                                            6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-tools-libs.x86_64                                       6.9.3-1.el7.elrepo                                   elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                 6.9.3-1.el7.elrepo                                   elrepo-kernel
perf.x86_64                                                       5.4.277-1.el7.elrepo                                 elrepo-kernel
python-perf.x86_64                                                5.4.277-1.el7.elrepo                                 elrepo-kernel

安装长期稳定版本,稳定可靠,版本为5.4.277

[root@k8s-node-61 ~]# yum --enablerepo=elrepo-kernel install kernel-lt-5.4.277-1.el7.elrepo.x86_64
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: hkg.mirror.rackspace.com
 * elrepo-kernel: hkg.mirror.rackspace.com
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel-lt.x86_64.0.5.4.277-1.el7.elrepo 将被 安装
--> 解决依赖关系完成

依赖关系解决

====================================================================================================================================
 Package                     架构                     版本                                    源                               大小
====================================================================================================================================
正在安装:
 kernel-lt                   x86_64                   5.4.277-1.el7.elrepo                    elrepo-kernel                    50 M

事务概要
====================================================================================================================================
安装  1 软件包

总下载量:50 M
安装大小:230 M
Is this ok [y/d/N]: y
Downloading packages:
kernel-lt-5.4.277-1.el7.elrepo.x86_64.rpm                                                                    |  50 MB  00:00:02     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : kernel-lt-5.4.277-1.el7.elrepo.x86_64                                                                           1/1 
  验证中      : kernel-lt-5.4.277-1.el7.elrepo.x86_64                                                                           1/1 

已安装:
  kernel-lt.x86_64 0:5.4.277-1.el7.elrepo                                                                                           

完毕!

#安装5.4.277版本的这些依赖包

安装之前需要卸载低版本内核的kernel-tools和kernel-headers,不然会报冲突

[root@k8s-node-61 ~]# yum remove -y kernel-tools* kernel-headers*
已加载插件:fastestmirror
参数 kernel-headers* 没有匹配
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel-tools.x86_64.0.3.10.0-1160.114.2.el7 将被 删除
---> 软件包 kernel-tools-libs.x86_64.0.3.10.0-1160.114.2.el7 将被 删除
--> 解决依赖关系完成

依赖关系解决

====================================================================================================================================
 Package                            架构                    版本                                    源                         大小
====================================================================================================================================
正在删除:
 kernel-tools                       x86_64                  3.10.0-1160.114.2.el7                   @updates                  337 k
 kernel-tools-libs                  x86_64                  3.10.0-1160.114.2.el7                   @updates                   18 k

事务概要
====================================================================================================================================
移除  2 软件包

安装大小:355 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : kernel-tools-3.10.0-1160.114.2.el7.x86_64                                                                       1/2 
  正在删除    : kernel-tools-libs-3.10.0-1160.114.2.el7.x86_64                                                                  2/2 
  验证中      : kernel-tools-libs-3.10.0-1160.114.2.el7.x86_64                                                                  1/2 
  验证中      : kernel-tools-3.10.0-1160.114.2.el7.x86_64                                                                       2/2 

删除:
  kernel-tools.x86_64 0:3.10.0-1160.114.2.el7                    kernel-tools-libs.x86_64 0:3.10.0-1160.114.2.el7                   

完毕!

[root@k8s-node-61 ~]# yum --enablerepo=elrepo-kernel install kernel-lt-devel-5.4.277-1.el7.elrepo.x86_64 \
> kernel-lt-doc-5.4.277-1.el7.elrepo.noarch \
> kernel-lt-headers-5.4.277-1.el7.elrepo.x86_64 \
> kernel-lt-tools-5.4.277-1.el7.elrepo.x86_64 \
> kernel-lt-tools-libs-5.4.277-1.el7.elrepo.x86_64 \
> kernel-lt-tools-libs-devel-5.4.277-1.el7.elrepo.x86_64 -y
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: hkg.mirror.rackspace.com
 * elrepo-kernel: hkg.mirror.rackspace.com
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel-lt-devel.x86_64.0.5.4.277-1.el7.elrepo 将被 安装
---> 软件包 kernel-lt-doc.noarch.0.5.4.277-1.el7.elrepo 将被 安装
--> 正在处理依赖关系 perl(Data::Dumper),它被软件包 kernel-lt-doc-5.4.277-1.el7.elrepo.noarch 需要
---> 软件包 kernel-lt-headers.x86_64.0.5.4.277-1.el7.elrepo 将被 安装
---> 软件包 kernel-lt-tools.x86_64.0.5.4.277-1.el7.elrepo 将被 安装
---> 软件包 kernel-lt-tools-libs.x86_64.0.5.4.277-1.el7.elrepo 将被 安装
---> 软件包 kernel-lt-tools-libs-devel.x86_64.0.5.4.277-1.el7.elrepo 将被 安装
--> 正在检查事务
---> 软件包 perl-Data-Dumper.x86_64.0.2.145-3.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

====================================================================================================================================
 Package                                  架构                 版本                               源                           大小
====================================================================================================================================
正在安装:
 kernel-lt-devel                          x86_64               5.4.277-1.el7.elrepo               elrepo-kernel                13 M
 kernel-lt-doc                            noarch               5.4.277-1.el7.elrepo               elrepo-kernel               8.2 M
 kernel-lt-headers                        x86_64               5.4.277-1.el7.elrepo               elrepo-kernel               1.3 M
 kernel-lt-tools                          x86_64               5.4.277-1.el7.elrepo               elrepo-kernel               230 k
 kernel-lt-tools-libs                     x86_64               5.4.277-1.el7.elrepo               elrepo-kernel               119 k
 kernel-lt-tools-libs-devel               x86_64               5.4.277-1.el7.elrepo               elrepo-kernel                97 k
为依赖而安装:
 perl-Data-Dumper                         x86_64               2.145-3.el7                        base                         47 k

事务概要
====================================================================================================================================
安装  6 软件包 (+1 依赖软件包)

总下载量:23 M
安装大小:84 M
Downloading packages:
(1/7): kernel-lt-doc-5.4.277-1.el7.elrepo.noarch.rpm                                                         | 8.2 MB  00:00:01     
(2/7): kernel-lt-devel-5.4.277-1.el7.elrepo.x86_64.rpm                                                       |  13 MB  00:00:01     
(3/7): kernel-lt-headers-5.4.277-1.el7.elrepo.x86_64.rpm                                                     | 1.3 MB  00:00:00     
(4/7): kernel-lt-tools-5.4.277-1.el7.elrepo.x86_64.rpm                                                       | 230 kB  00:00:00     
(5/7): kernel-lt-tools-libs-5.4.277-1.el7.elrepo.x86_64.rpm                                                  | 119 kB  00:00:00     
(6/7): kernel-lt-tools-libs-devel-5.4.277-1.el7.elrepo.x86_64.rpm                                            |  97 kB  00:00:00     
(7/7): perl-Data-Dumper-2.145-3.el7.x86_64.rpm                                                               |  47 kB  00:00:00     
------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                 12 MB/s |  23 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : kernel-lt-tools-libs-5.4.277-1.el7.elrepo.x86_64                                                                1/7 
  正在安装    : kernel-lt-tools-5.4.277-1.el7.elrepo.x86_64                                                                     2/7 
  正在安装    : perl-Data-Dumper-2.145-3.el7.x86_64                                                                             3/7 
  正在安装    : kernel-lt-doc-5.4.277-1.el7.elrepo.noarch                                                                       4/7 
  正在安装    : kernel-lt-tools-libs-devel-5.4.277-1.el7.elrepo.x86_64                                                          5/7 
  正在安装    : kernel-lt-headers-5.4.277-1.el7.elrepo.x86_64                                                                   6/7 
  正在安装    : kernel-lt-devel-5.4.277-1.el7.elrepo.x86_64                                                                     7/7 
  验证中      : kernel-lt-tools-libs-5.4.277-1.el7.elrepo.x86_64                                                                1/7 
  验证中      : kernel-lt-tools-libs-devel-5.4.277-1.el7.elrepo.x86_64                                                          2/7 
  验证中      : kernel-lt-devel-5.4.277-1.el7.elrepo.x86_64                                                                     3/7 
  验证中      : perl-Data-Dumper-2.145-3.el7.x86_64                                                                             4/7 
  验证中      : kernel-lt-tools-5.4.277-1.el7.elrepo.x86_64                                                                     5/7 
  验证中      : kernel-lt-doc-5.4.277-1.el7.elrepo.noarch                                                                       6/7 
  验证中      : kernel-lt-headers-5.4.277-1.el7.elrepo.x86_64                                                                   7/7 

已安装:
  kernel-lt-devel.x86_64 0:5.4.277-1.el7.elrepo                 kernel-lt-doc.noarch 0:5.4.277-1.el7.elrepo                        
  kernel-lt-headers.x86_64 0:5.4.277-1.el7.elrepo               kernel-lt-tools.x86_64 0:5.4.277-1.el7.elrepo                      
  kernel-lt-tools-libs.x86_64 0:5.4.277-1.el7.elrepo            kernel-lt-tools-libs-devel.x86_64 0:5.4.277-1.el7.elrepo           

作为依赖被安装:
  perl-Data-Dumper.x86_64 0:2.145-3.el7                                                                                             

完毕!

查看内核是否载入到grub2

/etc/grub2.cfg文件是/boot/grub2/grub.cfg文件的软链接,grub.cfg文件是grub引导加载器的配置文件

注意:如果服务器使用efi模式启动,那么可能没有/boot/grub2/grub.cfg文件,其对应的配置文件可能是/boot/efi/EFI/centos/grub.cfg

[root@k8s-node-63 ~]# awk -F ' ' '$1=="menuentry " {print i++ " : " $2$3$4}' /boot/efi/EFI/centos/grub.cfg
0 : 'CentOSLinux(5.4.277-1.el7.elrepo.x86_64)
1 : 'CentOSLinux(3.10.0-1160.114.2.el7.x86_64)
2 : 'CentOSLinux(3.10.0-1160.el7.x86_64)
3 : 'CentOSLinux(0-rescue-12a7d83936a3437680716aca984029aa)

刚刚安装的内核即0 : CentOS Linux (5.4.257-1.el7.elrepo.x86_64) 7 (Core) 我们需要把grub默认设置为0 可以通过 grub2-set-default 0命令设置或编辑 vim /etc/default/grub 文件来设置

vim /etc/default/grub GRUB_DEFAULT=0 #这句改为GRUB_DEFAULT=0 意思是GRUB初始化页面的第一个内核将作为默认内核,保存退出

检查默认内核是不是5.4

grubby --default-kernel

[root@k8s-node-63 ~]# grubby --default-kernel
/boot/vmlinuz-5.4.277-1.el7.elrepo.x86_64

生成 grub 配置文件

[root@k8s-node-63 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.277-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.4.277-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.114.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.114.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-12a7d83936a3437680716aca984029aa
Found initrd image: /boot/initramfs-0-rescue-12a7d83936a3437680716aca984029aa.img
done

重启linux系统

reboot

重启完成,查看现在linux内核,已经变成5.4.257了

[root@k8s-node-61 ~]# uname -r
5.4.277-1.el7.elrepo.x86_64

查看系统中的全部内核,现在旧的3.10内核还在

[root@k8s-node-61 ~]# rpm -qa |grep kernel
kernel-3.10.0-1160.114.2.el7.x86_64
kernel-lt-5.4.277-1.el7.elrepo.x86_64
kernel-lt-doc-5.4.277-1.el7.elrepo.noarch
kernel-3.10.0-1160.el7.x86_64
kernel-lt-tools-libs-5.4.277-1.el7.elrepo.x86_64
kernel-lt-tools-libs-devel-5.4.277-1.el7.elrepo.x86_64
kernel-lt-devel-5.4.277-1.el7.elrepo.x86_64
kernel-lt-tools-5.4.277-1.el7.elrepo.x86_64
kernel-lt-headers-5.4.277-1.el7.elrepo.x86_64

可以选择移除全部旧内核版本的相关包(自行决定是否卸载)

补充一句,Linux是支持多版本内核共存的,无非是系统启动的时候应用哪个版本内核而已

[root@k8s-node-61 ~]# yum remove kernel-3.10.0-1160* -y
已加载插件:fastestmirror
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel.x86_64.0.3.10.0-1160.el7 将被 删除
---> 软件包 kernel.x86_64.0.3.10.0-1160.114.2.el7 将被 删除
--> 解决依赖关系完成

依赖关系解决

====================================================================================================================================
 Package                   架构                      版本                                        源                            大小
====================================================================================================================================
正在删除:
 kernel                    x86_64                    3.10.0-1160.el7                             @anaconda                     64 M
 kernel                    x86_64                    3.10.0-1160.114.2.el7                       @updates                      66 M

事务概要
====================================================================================================================================
移除  2 软件包

安装大小:130 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : kernel.x86_64                                                                                                   1/2 
  正在删除    : kernel.x86_64                                                                                                   2/2 
  验证中      : kernel-3.10.0-1160.el7.x86_64                                                                                   1/2 
  验证中      : kernel-3.10.0-1160.114.2.el7.x86_64                                                                             2/2 

删除:
  kernel.x86_64 0:3.10.0-1160.el7                               kernel.x86_64 0:3.10.0-1160.114.2.el7                              

完毕!
[root@k8s-node-61 ~]# rpm -qa |grep kernel
kernel-lt-5.4.277-1.el7.elrepo.x86_64
kernel-lt-doc-5.4.277-1.el7.elrepo.noarch
kernel-lt-tools-libs-5.4.277-1.el7.elrepo.x86_64
kernel-lt-tools-libs-devel-5.4.277-1.el7.elrepo.x86_64
kernel-lt-devel-5.4.277-1.el7.elrepo.x86_64
kernel-lt-tools-5.4.277-1.el7.elrepo.x86_64
kernel-lt-headers-5.4.277-1.el7.elrepo.x86_64

查看grub2已经没有3.10的内核了

[root@k8s-node-61 ~]# awk -F ' ' '$1=="menuentry" {print i++ " : " $2$3$4}' /boot/efi/EFI/centos/grub.cfg
0 : 'CentOSLinux(5.4.277-1.el7.elrepo.x86_64)
1 : 'CentOSLinux(0-rescue-12a7d83936a3437680716aca984029aa)

发现卸载3.10.0-1160版本内核的时候把这些依赖给卸载了,所以现在重新安装这些依赖

yum install  gcc   gcc-c++ glibc-devel  glibc-headers -y

查看现在的内核,都是5.4.257-1版本的了

[root@jump ~]# rpm -qa | grep kern
kernel-lt-tools-5.4.257-1.el7.elrepo.x86_64
kernel-lt-devel-5.4.257-1.el7.elrepo.x86_64
kernel-lt-tools-libs-5.4.257-1.el7.elrepo.x86_64
kernel-lt-tools-libs-devel-5.4.257-1.el7.elrepo.x86_64
kernel-lt-headers-5.4.257-1.el7.elrepo.x86_64
kernel-lt-5.4.257-1.el7.elrepo.x86_64
kernel-lt-doc-5.4.257-1.el7.elrepo.noarch

再次重启linux(可不用重启)

reboot

一切正常,Linux内核升级完成。