k8s evicted pod大量出现解决办法

本文介绍了Kubernetes集群中由于日志占用过大导致的evicted pod问题,以及通过检查节点存储和定期清理日志来解决此问题的方法。
摘要由CSDN通过智能技术生成

1.背景:

运行一年多k8s集群出现大量evicted pod,但有running pod,系统是正常运行的。

其实这是kubernetes集群一种驱逐机制,用来提醒节点资源告警。

可以通过

kubectl describe pod -n mec  security-ccc447dbf-vqvdp
#可以看到具体提醒

2、解决方法:

查看告警pod节点存储情况

df -lh
ls /data
du -sh *

发现是kubernetes每天日志占用巨大存储,需要定时任务每天清理

删除7天前日志
#复制delete_data_logs.sh脚本
ansible k8s-all -m file -a "dest=/opt/addons/custome-tools/ state=directory"

ansible k8s-all -m copy -a "src=/opt/addons/custome-tools/delete_data_logs.sh dest=/opt/addons/custome-tools/"

ansible k8s-all -m cron -a "name='delete data log cron' job='/usr/bin/sh /opt/addons/custome-tools/delete_data_logs.sh > /dev/null 2>&1 ;' minute=30 hour=6"

详细脚本
#/bin/bash

# 添加定时任务
# ansible k8s-all -m file -a "dest=/opt/addons/custome-tools/ state=directory"
# ansible k8s-all -m copy -a "src=/tmp/delete_data_logs.sh dest=/opt/addons/custome-tools/"
# ansible k8s-all -m cron -a "name='delete data log cron' job='/usr/bin/sh /opt/addons/custome-tools/delete_data_logs.sh > /dev/null 2>&1 ;' minute=30 hour=6"

# 若要删除该cron 只需要加一个字段 state=absent 
# ansible k8s-all -m cron -a "name='delete data log cron' state=absent" 

# [过期] 处理nginx access日志
# logpath='/data/log/nginx/'
# cp $logpath/access.log $logpath/access-$(date +%Y%m%d).log
# cat /dev/null >$logpath/access.log

# 清理7天前k8s日志
/usr/bin/find /data/log/kubernetes/ -name "kube*" -type f -mtime +7|xargs rm -f

# 压缩1天前日志
#/usr/bin/find /data/web_logs/*/ -name "*.log" -type f -mtime +1 | xargs timeout 10s  gzip -f -9
/usr/bin/find /data/log/nginx/ -name "*.log" -type f -mtime +1 | xargs timeout 10s gzip -f -9

# 删除7天前业务日志
#/usr/bin/find /data/web_logs/*/ -name "*.log" -type f -mtime +7 | xargs rm -f
#/usr/bin/find /data/web_logs/*/ -name "*.log.*" -type f -mtime +7 | xargs rm -f

# 删除7天前nginx日志
/usr/bin/find /data/log/nginx/ -name "*.log.*" -type f -mtime +7 | xargs rm -f
/usr/bin/find /data/log/nginx/ -name "*.log" -type f -mtime +7 | xargs rm -f

然后需要手工删除evicted pod

#!/bin/bash
for ns in `kubectl get ns | awk 'NR>1{print $1}'`
do
      kubectl get pods -n ${ns} | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n ${ns}
done

删除后观察十分钟,看看是否还会出现驱逐情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王羲之的之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值