前段时间,遇到了多个用户在使用iManager for K8S的过程出现K8S节点宕机,或者是使用无法使用任何命令的情况。通过了解之后发现这些客户都存在一个共同点,服务节点的文件系统类型都是XFS,并且使用的NFS作为存储。本篇文章将讲解如何解决此问题。
问题现象:服务节点的文件系统类型为XFS,使用SuperMap iManager for K8S一段时间后,出现K8S节点掉线,节点宕机,或者是df等命令都不可用。查看系统日志有cpu soft lockup错误,或者是类似报错:
在查阅了相关资料后,发现这个其实Linux内核的BUG(https://forums.centos.org/viewtopic.php?t=52412),在低版本的内核环境下使用XFS会导致这些现象,而解决此类问题的办法就是升级内核。按照资料中所说需要将内核版本升级到3.10.0-1062.el7或者以上。另外这些客户还有个共同点就是使用的操作系统为Centos7.5,这个版本的内核版本为3.10.0-862.el7,是低于要求的版本的
升级内核
准备,可以在这里下载我们准备好的升级所需包
- 停止K8S,NFS(如果nfs也在服务节点)服务。建议从子节点开始升级
systemctl stop kubelet
systemctl stop nfs
- 如果是服务器是联网状态,可以不用下载升级包
sudo yum list kernel #查询当前所有的内核版本
sudo yum update -y kernel #更新到3.10.0-1062.el7或者以上
- 如果是离线环境,将升级包拷贝解压到节点任意位置。进入解压的目录中
yum --disablerepo=* localinstall -y --nogpgcheck *.rpm #此脚本升级3.10.0-1160.36.2.el7.x86_64
中途可能会遇到依赖冲突
解决办法:卸载冲突的依赖包
rpm -e policycoreutils --nodeps
rpm -e libsemanage --nodeps
然后在升级包的目录下再次执行
yum --disablerepo=* localinstall -y --nogpgcheck *.rpm
- 查看已有的内核版本和顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
可以看到升级的内核已经安装成功了 顺序为0
编辑/etc/default/grub,找到GRUB_DEFAULT=saved,将saved修改为内核位置,此处为0,则改为GRUB_DEFAULT=0
vi /etc/default/grub
运行grub2-mkconfig命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启机器,reboot
- 重启后查看当前内核版本,可以看到已经升级成功
然后依次升级其他的服务节点,都升级完成后,运行K8S就不会再出现类似的问题了。目前已经有多个客户都已经升级内核,并且没有再出现此问题。
注意:如果有其他的环境需要安装K8S并且都要使用NFS和XFS文件系统的话,建议使用CentOS7.9版本