前言
作为 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 << 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.句柄数修改
- Linux 默认的句柄数是 1024,华为云的集群默认是 65535,作为一台生产的服务器很容易就会用满。
句柄数值计算
- 最大句柄值(建议,不是绝对) = 最大内存102410
内核参数修改
- 句柄数的大小受限于系统内核参数 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 << 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
发表评论 取消回复