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
删除后观察十分钟,看看是否还会出现驱逐情况。