事故现场情况
公司项目演示环境登录报错。
分析问题
- 操作系统:CentOS 7,项目基于 Kubernetes 集群部署;
- 排查业务系统问题,查看集群
kube-system的 Pod 状态:
kubectl get pod -n kube-system
发现网络组件 calico-node 的 READY 状态为 0/1(当节点磁盘可用空间不足 20% 时,calico-node 会因磁盘资源不足无法正常就绪);
* 查看磁盘使用情况:
du -h --max-depth=1 /
发现根分区系统盘占用已超过 80%(系统盘总量仅 40G); * 进一步定位目录占用:
cd /var/log
du -sh * | sort -rn
发现 /var/log 目录占用达到了 30G 左右,其中 journal 和 messages 相关日志文件每个均达 5G 左右。
journal 日志问题解决
- 检查当前 journal 占用的磁盘量:
journalctl --disk-usage
- 清理过期日志(可按保留时间或保留容量限制,例如只保留最近 2 天或最大 500M):
journalctl --vacuum-time=2d
journalctl --vacuum-size=500M
- 手工清理与日志轮转: 如果需要手工清理日志文件,删除前需先轮转一次 journal 日志:
systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service
- 配置限制持久化:
编辑
/etc/systemd/journald.conf,限制 journal 最大占用及转发策略:
SystemMaxUse=16M
ForwardToSyslog=no
- 重启服务并校验:
systemctl restart systemd-journald.service
journalctl --verify
messages 日志问题解决
- 调整 rsyslog 配置文件
/etc/rsyslog.conf: 找到以下行(约第 54 行):
*.info;mail.none;authpriv.none;cron.none /var/log/messages
修改为:
*.none /var/log/messages
- 重启 rsyslog 服务:
systemctl restart rsyslog
- 安全清空存量 messages 日志:
cat /dev/null > /var/log/messages-xxxxxx # 指定对应的历史日志文件
验证与恢复
重启集群核心网络组件与业务 Pod:
kubectl delete pod -n kube-system -l k8s-app=calico-node
待 Pod 重启就绪后,演示环境业务系统恢复正常访问与登录。