有时候需要在安装 docker 的时候,系统内核不够,需要升级到内核版本多少以上,可以用 uname -r 查看。
用过 k8s 的同学应该知道,有时候在kubernetes集群中centos7.5低版本的内核中会出现一下很让人恼火的BUG,时不时来一下,发作时候会导致整个OS Hang住无法执行任何 命令。
并且会导致 k8s 集群中部署应用时无法部署,一直在 创建中。
根据官方说法确定为内核 bug,故模拟了一下内核升级。
问题现象如下:
一直不断刷,执行命令也无法执行且发布应用也无法发布。
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
本次升级是将内核版本从 3.10.0 升级到 4.9.11。
备:升级前磁盘至少保证在 10G 以上空间,以防在编译的时候中断。
yum install -y epel-release
yum -y install gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel bison flex perl
从前端网页手动下载然后上传到服务器上或者直接用 wget下载。
wget http://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.11.tar.gz
创建相关目录并解压:
cd /optmkdir kernelcd kernelmv /root/linux-4.19.11.tar.gz .tar -zxvf linux-4.19.11.tar.gz
清理内核编译源目录:
make mrproper
之后进入解压目录,开始进行内核菜单自定义:
make menuconfig
会弹出来一个内核菜单:
这里可以进行一些内核功能的自定义,如果有需要可以进行定制,如果没需要的话可以在弹窗直接选择 exit。
接下来进行编译:
make
可以再开一个窗口,观察磁盘的使用率:
watch -n 1 'df -h'
,1s刷新一次
编译完后后,进行内核模块的安装:
make modules_install
内核模块安装完毕后,查看/lib/modules ,可以在这个目录下看到内核的文件夹。
ll /lib/modules
执行 make install 安装内核相关文件 :make install 等待结束。
安装完成后修改默认内核启动项并查看可用内核。 cat /boot/grub2/grub.cfg | grep menuentry //查看系统可用内核 grub2-set-default 'CentOS Linux (4.19.11) 7 (Core)' //修改开机默认使用的内核 grub2-mkconfig -o /etc/grub2.cfg 等待完成后进行 reboot 。 重启的时候可以看到默认开启项的第一个内核是刚升级的 4.19.11了。 重启后,进行查看 uname -r ,可以看到内核版本此时已经成为新的版本了。 接下来需要清理旧版本的内核的相关安装包。rpm -qa | grep -i kernelrpm -e 将查出来老的kernel包全部移除掉。安装更新旧内核时被卸载的软件yum install -y compat-glibc compat-glibc-headers gcc gcc-c++ gcc-gfortran glibc-devel glibc-headers libquadmath-devel libtool systemtap systemtap-devel
查看默认内核
grub2-editenv list
saved_entry=Red Hat Enterprise Linux Server (4.19.11) 7.6 (Maipo)
这样就顺利完成了。
唯有热爱,方可持久。