前言

作为 kubernetes 的节点机器,一般需要根据业务特性、k8s 特性、修改一些设置项,我们可以把这些设置项归整为一个 shell 脚本,每个节点机器执行下即可。

初始化脚本

#!/bin/bash
##############################
# 节点初始化脚本
# 1. 初始化句柄,进程数
# 2. 设置容器镜像的定时删除任务
##############################

# 获取当前机器的总内存大小(换算成G,向上取整)
mem_total=$(free | awk '/Mem/ {printf("%.f\n",$2/1000000)}')
echo "当前总内存大小(G):$mem_total"

# 句柄,进程调整
limits=$((mem_total*1024*10))
echo "适合的句柄数为:$limits"

# /proc/sys/fs/file-max –系统级别所有进程可打开的文件数
# /proc/sys/fs/nr_open –定义了file-max允许被修改的最大值,file-max不可以超过该值
echo $limits >> /proc/sys/fs/nr_open

/bin/cp /etc/sysctl.conf /etc/sysctl.conf.ori
/bin/cat >> /etc/sysctl.conf &lt;< EOF fs.file-max=$limits xss=removed>> /etc/security/limits.conf
/bin/echo "* hard nofile $limits" >> /etc/security/limits.conf

# 定时器,删除一个小时以上没用的镜像
/bin/echo "0 3 * * * docker image prune -a -f --filter 'until = 1h'" >> /var/spool/cron/root

脚本说明

1.句柄数修改

  1. Linux 默认的句柄数是 1024,华为云的集群默认是 65535,作为一台生产的服务器很容易就会用满。
  2. 句柄数值计算

    • 最大句柄值(建议,不是绝对) = 最大内存102410
  3. 内核参数修改

    • 句柄数的大小受限于系统内核参数 file-max
    • 又因为 file-max 受限于 nr_open

      # /proc/sys/fs/file-max –系统级别所有进程可打开的文件数
      # /proc/sys/fs/nr_open –定义了file-max允许被修改的最大值,file-max不可以超过该值
      echo $limits >> /proc/sys/fs/nr_open

2.进程数修改

kernel.pid_max 系统最大的进程数量目前设置跟 limits 句柄数一样
/bin/cat >> /etc/sysctl.conf &lt;< EOF fs.file-max=$limits xss=removed> 由于我 k8s 上面的服务都是走 CICD 流程,每天更新的频率都比较大,一些旧的镜像如果没有及时清除容易把节点的磁盘占满。目前设定了每天凌晨3点清除1小时以上没用的镜像。

3.定时器,删除一个小时以上没用的镜像

/bin/echo "0 3 * * * docker image prune -a -f --filter 'until = 1h'" >> /var/spool/cron/root

点赞(0) 打赏

Comment list 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部