由于K8S对于系统是CentOS7.x存在内核版本要求,所以在一切开始前,如果宿主机操作系统为CentOS7.x,则需要对其内核进行升级。1以下,以离线升级内核至4.4为例进行说明。

​ 1、查看当前操作系统内核版本

#root用户下
uname -r

#如输出结果不为3.10而是显示4.4或更高版本,则无需进行内核升级了

​ 2、内核包获取

​ 下载地址:https://linux.cc.iitk.ac.in/mirror/centos/elrepo/kernel/el7/x86_64/RPMS/

​ 包含kernel-lt-4.4.223-1.el7.elrepo.x86_64.rpm以及kernel-lt-devel-4.4.223-1.el7.elrepo.x86_64.rpm

​ 将该两文件压缩为kernel-4.4

​ 将kernel-4.4.tar.gz上传至linux系统

​ 进入对应目录解压

tar lkernel-4.4.tar.gz

​ 3、内核安装

cd kernel-4.4

#安装
rpm -ivh *.rpm

内核安装

4、检查内核安装情况

rpm -aq | grep kernel-lt

新内核已安装

​ 5、设置grub2

#查看系统上的所有可用内核(如果没有grub2.cfg,则使用grub2-efi.cfg)
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
或者
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2-efi.cfg

内核列表

​ 如上图,服务器上存在3 个内核,我们要使用 4.4 这个版本,通过 grub2-set-default命令进行设置,对应编号为0。

#选择编号0的4.4版本
grub2-set-default 0
#生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

​ 6、重启并验证

#重启
reboot
#内核验证
uname -r

​ 7、kernel参数调优

#
cat >> /etc/sysctl.conf<<EOF
net.ipv4.ip_forward=1
kernel.watchdog_thresh=30
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.conf.all.forwarding = 1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
EOF

##
#设置文件开启数量限制
cat >> /etc/security/limits.conf <<EOF
* soft nofile 65535
* hard nofile 65536
EOF

​ 8、关闭selinux

#检查sestatus
sestaus

​ 若打印出来的结果不为SELinux status: disabled则继续执行以下步骤,否则可以跳过本小节

#关闭SELinux 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
#关注打印出来的Mode from config file:     disabled

#需重启生效
reboot
#验证
setenforce 0


  1. 简单概括下原因是因为CentOS7.x系统自带的3.10.x内核存在一些bug会造成K8S或者docker在运行时不稳定或造成内存泄漏等问题
最后修改:2022 年 06 月 23 日 11 : 40 AM