运维手册——EKS Node节点磁盘增加告警
声明:这是我在大学毕业后进入第二家互联网公司学习的内容
背景
周末群里突然告警,信息是eks的node磁盘超过到80%的阀值,这台机器没有计算缓存的文件,而且经常更新,为啥会出现这个问题呢,一起来看看吧
监控
查看监控,可以发现这台机器经过3个多月的时间磁盘一直在上涨
图片链接 ###
我突然想到这会不会是每次容器更新新版本的镜像导致,查询资料发现
- –image-gc-high-threshold 参数用于定义触发映像垃圾收集的磁盘使用百分比。默认值为 85%。
- –image-gc-low-threshold 参数用于定义映像垃圾收集尝试释放的磁盘使用百分比。默认值为 80%。
这个时候要么增加告警阀值为85%以上,要么就尝试清理磁盘
查看eks的最佳实践发现
EKS最佳实践
要使用 Amazon EKS 工作线程节点清理映像缓存,请使用下面的 kubelet 垃圾收集参数:
- –image-gc-high-threshold
- –image-gc-low-threshold
它还需要进入到服务器去改kubelet并且重启,非常的麻烦,而且我们的服务器默认没有ssh权限,在设置节点组的时候就没有打开(因为我们没有需求登录到任何一台eks的node节点)
感觉它的推荐解决方法不是很靠谱
我的最佳实践
由于EKS的Node底层使用的是EC2 Auto Scaling模型,它的更新机制是,关机就会重新启动一台新的机器,所以我发现每台服务器的镜像用的是Amazon Linux 2 AMI(AWS自己的操作系统Amazon Linux 2),这个镜像每个月都会更新一次
EKS的Node更新操作系统的策略分为滚动更新和强制更新
滚动更新会考虑集群的 Pod 中断预算。如果 Pod(一组容器)中断预算问题导致 Amazon EKS 无法正常耗尽在此节点组上运行的 Pod(一组容器),则更新将失败。
强制更新不考虑 Pod 中断预算。通过强制节点重新启动,无论是否存在 Pod 中断预算问题,都会发生更新。
我选择滚动更新,期间容器会安全地被驱逐,并且更新到新的节点上
总结
以后每2个月定时更新一次节点组,一个是为了更新到最新的AMI系统(可能修复漏洞啥的),另一个就是为了清理镜像
定时执行这个脚本即可
1 | eksctl upgrade nodegroup --name=node-group-name --cluster=cluster-name |