CentOS内核升级方法
根据实验记录,不同环境会有差异,但基本过程方法类似。
CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如:
- 高版本的 docker(1.13 以后) 启用了 3.10 kernel 实验支持的 kernel memory account 功能(无法关闭),当节点压力大,如频繁启动和停止容器时会导致 cgroup memory leak。
- 网络设备引用计数泄漏,会导致类似于报错:“kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1”。
一、升级内核到 4.4.X 以上
查看当前内核:
[root@vms33 kernel]# uname -sr
Linux 3.10.0-693.el7.x86_64
[root@vms33 ~]# ls -l /boot/config*
-rw-r--r--. 1 root root 140894 8月 23 2017 /boot/config-3.10.0-693.el7.x86_64
[root@vms33 ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-2d7c33c76c954ad28141d7ce515d455a) 7 (Core)
方法一:使用官网源码包编译安装
==此方法时间较长,但可以按指定版本升级。==这里升级到长期维护稳定版本longterm:5.4.77
[root@vms33 ~]# xz -d linux-5.4.77.tar.xz
[root@vms33 ~]# tar -xf linux-5.4.77.tar
[root@vms33 ~]# yum install gcc make ncurses-devel openssl-devel flex bison elfutils-libelf-devel -y
...
[root@vms33 ~]# yum upgrade -y
...
[root@vms33 ~]# ls -l /boot/config*
-rw-r--r-- 1 root root 153595 10月 21 00:57 /boot/config-3.10.0-1160.2.2.el7.x86_64
-rw-r--r--. 1 root root 140894 8月 23 2017 /boot/config-3.10.0-693.el7.x86_64
[root@vms33 ~]# cd linux-5.4.77/
[root@vms33 linux-5.4.77]# cp /boot/config-3.10.0-693.el7.x86_64 .config
[root@vms33 linux-5.4.77]# make menuconfig
- 选项采用默认,选择
Save
,选择Ok
即可,最后Exit
退出。
- 编译,完毕后,
echo $?
查看下,看看是否正常,如返回0,重启机器,如别的数字,根据报错更正即可。
[root@vms33 linux-5.4.77]# make -j `nproc` && make modules_install && make install
...
[root@vms33 linux-5.4.77]# echo $?
0
方法二:下载内核升级包进行安装
此方法升级快、简单,只能按已有的内核升级包进行升级。
~]# wget https://mirror.rc.usf.edu/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-5.9.8-1.el7.elrepo.x86_64.rpm --no-check-certificate
~]# wget https://mirror.rc.usf.edu/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-5.9.8-1.el7.elrepo.x86_64.rpm --no-check-certificate
~]# yum -y install kernel-ml-5.9.8-1.el7.elrepo.x86_64.rpm && yum -y install kernel-ml-devel-5.9.8-1.el7.elrepo.x86_64.rpm
二、修改grub中默认的内核版本,重启系统,并查看内核
操作命令:
~]# grub2-set-default 0
~]# reboot
~]# uname -sr
针对编译升级
[root@vms33 ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.77) 7 (Core)
1 : CentOS Linux 7 Rescue 52ddad69761d4cdeb2be190717e0c395 (3.10.0-1160.2.2.el7.x86_64)
2 : CentOS Linux (3.10.0-1160.2.2.el7.x86_64) 7 (Core)
3 : CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
4 : CentOS Linux (0-rescue-2d7c33c76c954ad28141d7ce515d455a) 7 (Core)
[root@vms33 ~]# grub2-set-default 0
...
[root@vms33 ~]# uname -sr
Linux 5.4.77
针对升级包安装
[root@vms32 ~]# uname -sr
Linux 3.10.0-693.el7.x86_64
[root@vms32 ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux 7 Rescue 74b76b31501d48fd8c66ab518d23a0bf (5.9.8-1.el7.elrepo.x86_64)
1 : CentOS Linux (5.9.8-1.el7.elrepo.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-2d7c33c76c954ad28141d7ce515d455a) 7 (Core)
[root@vms32 ~]# grub2-set-default 0
[root@vms32 ~]# reboot
...
[root@vms32 ~]# uname -sr
Linux 5.9.8-1.el7.elrepo.x86_64
–210214 广州–