今天看到群里有个朋友报错如下

Failed create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "dev-node-buyer-7d76bcd67c-qwjxg": Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"write sysctl key net.ipv4.tcp_max_syn_backlog: open /proc/sys/net/ipv4/tcp_max_syn_backlog: no such file or directory\"": unknown

pod不能获取到主机net.ipv4.tcp_max_syn_backlog 系统内核是3.10 docker info 18.09 docker run –runtime=runc –sysctl net.ipv4.tcp_max_syn_backlog=20480 先测试一波还是不行 需要注意的是,如果内核版本过低(<3.12), 有些参数是无法修改的于是升级内核解决问题mark一下

#1. 更新 yum 仓库为 EL 仓库:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#2. 查看可供更新的版本:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml
#查看系统已经安装的内核版本
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
#4. 修改默认版本:
grub2-set-default 0
vim /etc/default/grub
GRUB_DEFAULT=0
#5. 生成配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
#6.卸载旧的内核
rpm -qa | grep kernel
yum -y remove 

#内核配置建议
cat << EOF >> /etc/sysctl.conf

# SWAP settings
vm.swappiness=0
vm.overcommit_memory=1

# Have a larger connection range available
net.ipv4.ip_local_port_range=1024 65000

# Increase max connection
net.core.somaxconn = 10000

# Reuse closed sockets faster
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15

# The maximum number of "backlogged sockets".  Default is 128.
net.core.somaxconn=4096
net.core.netdev_max_backlog=4096

# 16MB per socket - which sounds like a lot,
# but will virtually never consume that much.
net.core.rmem_max=16777216
net.core.wmem_max=16777216

# Various network tunables
net.ipv4.tcp_max_syn_backlog=20480
net.ipv4.tcp_max_tw_buckets=400000
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_wmem=4096 65536 16777216

# ARP cache settings for a highly loaded docker swarm
net.ipv4.neigh.default.gc_thresh1=8096
net.ipv4.neigh.default.gc_thresh2=12288
net.ipv4.neigh.default.gc_thresh3=16384

# ip_forward and tcp keepalive for iptables
net.ipv4.tcp_keepalive_time=600
net.ipv4.ip_forward=1

# needed for host mountpoints with RHEL 7.4
fs.may_detach_mounts=1

# monitor file system events
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
EOF
sysctl -p

#升级脚本
#!/bin/bash

#############################################################################################
# 用途:CentOS7.5 内核版本升级
# 作者:Dy1an<1214966109@qq.com>
# 时间:2019-12-09
#############################################################################################

#############################################################################################
# 导入系统变量
#############################################################################################
. /etc/init.d/functions
source /etc/profile

#############################################################################################
# 服务变量定义
#############################################################################################
# 线条
LINE='---------------------------------------------------------------------------------------'

# 进程用户
USER_PROCESS='root'


#############################################################################################
# 颜色输出函数
#############################################################################################
function FUNC_COLOR_TEXT() {
  echo -e " \e[0;$2m$1\e[0m"
}

function FUNC_ECHO_RED() {
  echo $(FUNC_COLOR_TEXT "$1" "31")
}

function FUNC_ECHO_GREEN() {
  echo $(FUNC_COLOR_TEXT "$1" "32")
}

function FUNC_ECHO_YELLOW() {
  echo $(FUNC_COLOR_TEXT "$1" "33")
}

function FUNC_ECHO_BLUE() {
  echo $(FUNC_COLOR_TEXT "$1" "34")
}

#############################################################################################
# 颜色通知输出函数
#############################################################################################
# 通知信息
function FUNC_ECHO_INFO() {
  echo $(FUNC_COLOR_TEXT "${LINE}" "33")
  echo $(FUNC_COLOR_TEXT "$1" "33")
  echo $(FUNC_COLOR_TEXT "${LINE}" "33")
}

# 完成信息
function FUNC_ECHO_SUCCESS() {
  echo $(FUNC_COLOR_TEXT "${LINE}" "32")
  echo $(FUNC_COLOR_TEXT "$1" "32")
  echo $(FUNC_COLOR_TEXT "${LINE}" "32")
}

# 错误信息
function FUNC_ECHO_ERROR() {
  echo $(FUNC_COLOR_TEXT "${LINE}" "31")
  echo $(FUNC_COLOR_TEXT "$1" "31")
  echo $(FUNC_COLOR_TEXT "${LINE}" "31")
}

#############################################################################################
# 系统版本检测函数
#############################################################################################
function FUNC_SYSTEM_CHECK() {
  VAR_SYSTEM_FLAG=$(/usr/bin/cat /etc/redhat-release | grep 'CentOS' | grep '7' | wc -l)
  if [[ ${VAR_SYSTEM_FLAG} -ne 1 ]];then
    FUNC_ECHO_ERROR '本脚本基于 [ CentOS 7 ] 编写,目前暂不支持其他版本系统!'
    exit 1001
  fi
}

#############################################################################################
# 用户检测函数
#############################################################################################
function FUNC_USER_CHECK() {
  VAR_USER=$(/usr/bin/whoami)
  if [[ ${VAR_USER} != 'root' ]];then
    FUNC_ECHO_ERROR '脚本目前只支持 [ root ] 用户执行,请先切换用户...'
    exit 1002
  fi
}

#############################################################################################
# 服务器联网函数
#############################################################################################
function FUNC_NETWORK_CHECK() {
  VAR_PING_NUM=$(/usr/bin/ping -c 3 www.baidu.com | grep 'icmp_seq' | wc -l)
  if [[ ${VAR_PING_NUM} -eq 0 ]];then
    FUNC_ECHO_ERROR '网络连接失败,请先配置好网络连接...'
    exit 1003
  fi
}

#############################################################################################
# 打印系统信息
#############################################################################################
function FUNC_PRINT_SYSTEM_INFO() {
  # 获取系统信息
  SYSTEM_DATE=$(/usr/bin/date)
  SYSTEM_VERSION=$(/usr/bin/cat /etc/redhat-release)
  SYSTEM_CPU=$(/usr/bin/cat /proc/cpuinfo | grep 'model name' | head -1 | awk -F: '{print $2}' | sed 's#^[ \t]*##g')
  SYSTEM_CPU_NUMS=$(/usr/bin/cat /proc/cpuinfo | grep 'model name' | wc -l)
  SYSTEM_KERNEL=$(/usr/bin/uname -a | awk '{print $3}')
  SYSTEM_IPADDR=$(/usr/sbin/ip addr | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}')
    
  # 打印系统信息
  FUNC_ECHO_YELLOW ${LINE}
  echo "服务器的信息: ${SYSTEM_IPADDR}"
  FUNC_ECHO_YELLOW ${LINE}
  echo "操作系统版本: ${SYSTEM_VERSION}"
  echo "系统内核版本: ${SYSTEM_KERNEL}"
  echo "处理器的型号: ${SYSTEM_CPU}"
  echo "处理器的核数: ${SYSTEM_CPU_NUMS}"
  echo "系统当前时间: ${SYSTEM_DATE}"
  FUNC_ECHO_YELLOW ${LINE}
}

#############################################################################################
# 升级内核
#############################################################################################
function FUNC_UPDATE_KERNEL() {
    # 安装 EL 源
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

    if [[ $? -ne 0 ]];then
      FUNC_ECHO_ERROR "EL 源安装失败,请检查是否存在问题!"
      exit 1004
    fi
    
    # 查看可提供升级的版本
    yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
    
    VAR_KERNEL_NAME="kernel-lt"
    read -p "请输入上面列出的版本中你想安装的版本(默认 lt 版本) [lt/ml]: " VAR_VERSION_CHOICE
    if [[ ${VAR_VERSION_CHOICE} == "ml" ]];then
        VAR_KERNEL_NAME="kernel-ml"
    fi
    
    FUNC_ECHO_INFO "本次选择升级的版本为:${VAR_KERNEL_NAME}"
    
    # 升级内核
    yum --enablerepo=elrepo-kernel install ${VAR_KERNEL_NAME}
    
    if [[ $? -ne 0 ]];then
      FUNC_ECHO_ERROR "内核升级失败,请根据报错检查是否存在问题!"
      exit 1005
    fi
    
    # 查看目前版本
    FUNC_ECHO_INFO "系统当前所安装的内核版本如下:"
    awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
    
    # 选择默认内核版本
    VAR_NUM_CHOICE=0
    read -p "请输入上面列出的版本序号选择系统最终默认版本(默认 0): " VAR_NUM_CHOICE
    if [[ $(echo ${VAR_NUM_CHOICE} | sed 's/[0-9]//g') == '' ]];then
        if [[ ${VAR_NUM_CHOICE} == "" ]];then
            VAR_NUM_CHOICE=0
        fi
    else
        FUNC_ECHO_INFO "输入有误,将以默认配置执行..."
        VAR_NUM_CHOICE=0
    fi
        
    
    # 配置系统默认
    grub2-set-default ${VAR_NUM_CHOICE}
    
    sed -i "s#^GRUB_DEFAULT=.*#GRUB_DEFAULT=${VAR_NUM_CHOICE}#g" /etc/default/grub
    
    if [[ $? -ne 0 ]];then
      FUNC_ECHO_ERROR "默认内核配置失败,可以手动配置/etc/default/grub文件中:GRUB_DEFAULT参数为指定内核索引!"
    fi
}

#############################################################################################
# 卸载旧版本内核
#############################################################################################
function FUNC_UNINSTALL_KERNEL() {
    # 显示内核版本
    FUNC_ECHO_INFO "系统当前所安装的内核版本如下:"
    rpm -qa | grep kernel
    
    # 提示卸载
    FUNC_ECHO_INFO "你可以手动卸载旧版本:yum -y remove 包名字,然后重启使用:uname -r 查看升级结果"
}

#############################################################################################
# 安装程序开始
#############################################################################################
# 系统检查
FUNC_SYSTEM_CHECK
# 用户检查
FUNC_USER_CHECK
# 联网检测
FUNC_NETWORK_CHECK
# 打印系统信息
FUNC_PRINT_SYSTEM_INFO

read -p "是否继续安装升级(默认 y) [y/n]: " VAR_CHOICE
case ${VAR_CHOICE} in
  [yY][eE][sS]|[yY])
    FUNC_UPDATE_KERNEL
    FUNC_UNINSTALL_KERNEL
  ;;
  [nN][oO]|[nN])
    FUNC_ECHO_YELLOW "安装升级即将终止..."
    exit
  ;;
  *)
    FUNC_UPDATE_KERNEL
    FUNC_UNINSTALL_KERNEL
esac