生产K8s Rsyslogd内存优化
2021/6/20 7:30:49
本文主要是介绍生产K8s Rsyslogd内存优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近发现K8s机器经常有内存告警,上去抽了几台ECS 看了下都发现了rsyslogd占用大量内存的情况出现。
如下图:
根因分析
k8s宿主机上,/var/log/messages有几个G的日志,发现rsyslog把Journal的log都进行的输出和汇总。 当容器越多是,log也就会也多,内存占用也就越多。同时也可能导致systemd-journald内存占用过高。
因此我们最好优化下journald和rsyslog的参数,将宝贵的内存资源留给业务服务去使用。
下图是 journalctl -xe 执行的结果示例:
修改方法
# 1 备份下原先配置文件 cp /etc/systemd/journald.conf /root/ cp /lib/systemd/system/rsyslog.service /root/ # 2 修改journald服务 cat /etc/systemd/journald.conf 改动后的3行如下: [Journal] Storage=persistent SystemMaxUse=1024M ForwardToSyslog=no # 确保journal的日志路径存在(通常都是已存在的) mkdir -pv /var/log/journal/ # 重启下服务 systemctl restart systemd-journald # 3 2 修改rsyslog服务 cat /lib/systemd/system/rsyslog.service 在 Service 段增加下面3行 MemoryAccounting=yes MemoryMax=800M MemoryLimit=800M # 重启下服务 systemctl daemon-reload && systemctl restart rsyslog
多机器的话,推荐使用ansible-playbook分组部署,观察几天后,实现批量修改。
效果展示
TODO 持续部署
对于新加的k8s节点,rsyslogd和journald的配置也需要优化,我们可以做成一个巡检类的定时任务。
step1、封装一个check-deploy.sh
脚本
具体逻辑: 1、将 /etc/systemd/journald.conf 和 /lib/systemd/system/rsyslog.service 做成固定的模板文件,算出md5值。 2、如果主机的2个文件md5和期望的不一致,则用check-deploy的脚本中的文件覆盖,并重启journald或rsyslog服务。
step2、定时任务平台 从cmdb中将k8s主机列表取出来,每天下发一次 check-deploy.sh
到目标K8s机器上并执行即可(这个变更对时效性要求不高)。
参考:
https://blog.espnlol.com/?p=525
这篇关于生产K8s Rsyslogd内存优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-05基于Kubernetes的自定义AWS云平台搭建指南
- 2024-11-05基于Kubernetes Gateway API的现代流量管理方案
- 2024-11-05在Kubernetes上部署你的第一个应用:Nginx服务器
- 2024-11-05利用拓扑感知路由控制Kubernetes中的流量
- 2024-11-05Kubernetes中的层次命名空间:更灵活的资源管理方案
- 2024-11-055分钟上手 Kubernetes:精简实用的 Kubectl 命令速查宝典!
- 2024-10-30K8s 容器的定向调度与亲和性
- 2024-10-28云原生周刊:K8s未来三大发展方向 丨2024.10.28
- 2024-10-25亚马逊弹性Kubernetes服务(EKS)实战:轻松搭建Kubernetes平台
- 2024-10-22KubeSphere 最佳实战:Kubernetes 部署集群模式 Nacos 实战指南