在CentOS上部署Kubernetes(K8s)集群后,日志管理是保障系统稳定性、快速排查问题的核心环节。完整的日志管理需覆盖收集→存储→查看/分析→轮转/清理→监控告警全流程,以下是具体实施方案:
K8s集群的日志主要分为三类,需全面覆盖:
stdout/stderr输出的日志(K8s默认采集,存储于节点/var/log/containers目录);kubelet、kube-apiserver、kube-controller-manager等系统组件的日志(位于节点/var/log/kubelet.log、/var/log/kube-apiserver.log等);/var/log/messages、/var/log/syslog)。根据集群规模、资源预算选择合适的收集工具:
EFK由**Elasticsearch(存储/索引)、Fluentd(收集/转发)、Kibana(可视化)**组成,适合需要全文检索、复杂分析的场景。
DaemonSet模式部署(每个节点1个实例),收集节点/var/log/containers/*.log(容器日志)、/var/log/kubelet.log(kubelet日志)等文件,转发至Elasticsearch。需配置资源限制(如内存500Mi以上)避免OOM,并使用buffer插件应对日志洪峰。helm repo add elastic https://helm.elastic.co && helm install elasticsearch elastic/elasticsearch),配置资源限制(如CPU 2核、内存4Gi)和持久化存储(如PV),确保数据安全。helm install kibana elastic/kibana),配置elasticsearch.hosts指向Elasticsearch服务,访问http://<k8s-master-ip>:5601进入可视化界面,创建索引模式(如k8s-logs-*)即可查看日志。Loki是Grafana Labs推出的轻量级日志聚合系统(专为K8s设计),资源消耗低,与Prometheus集成好,适合日志+监控统一管理。
helm repo add grafana https://grafana.github.io/helm-charts && helm install loki grafana/loki-stack),配置config.loki.persistence.enabled=true开启持久化(如使用S3或MinIO归档)。helm install promtail grafana/loki-stack --set promtail.enabled=true),配置server.filesystem.paths=["/var/log/containers/*.log"]指向容器日志路径,收集日志并发送至Loki。http://<k8s-master-ip>:3000,添加Loki数据源(URL指向Loki服务),通过Explore功能查询日志(支持标签过滤,如namespace=prod、pod_name=payment-service),或创建Dashboard展示日志趋势。Filebeat是轻量级日志收集器,适合资源有限的集群,可作为Sidecar部署与业务Pod共享卷,收集容器日志并转发至Elasticsearch。
namespace=prod、pod_name=payment-service),通过Dashboard展示日志趋势、错误日志数量等指标。kubectl logs:查看Pod实时日志(示例:kubectl logs -f payment-service-abcde -n prod);kubectl logs --previous:查看容器重启前的日志;kubectl logs -c <container-name>:查看多容器Pod中指定容器的日志。容器日志默认存储于节点/var/log/containers目录,需通过logrotate配置轮转规则,避免日志文件过大占用磁盘空间。
/etc/logrotate.d/kubernetes-containers):/var/log/containers/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
此配置表示:每天轮转日志,保留最近7天的压缩日志(*.log.gz),使用copytruncate方式避免日志中断。结合Prometheus+Alertmanager实现日志监控与告警,及时发现系统问题:
elasticsearch_indices_indexing_slowlog_total,索引慢日志数)、Loki(如loki_dropped_chunks_total,丢弃的日志块数)的日志指标,监控日志量、错误日志数、索引延迟等。groups:
- name: k8s-log-alerts
rules:
- alert: HighErrorLogs
expr: rate(elasticsearch_indices_indexing_slowlog_total[5m]) > 100
for: 5m
labels:
severity: critical
annotations:
summary: "K8s集群错误日志过多 (instance {{ $labels.instance }})"
description: "5分钟内错误日志数超过100条,需立即排查"
通过以上方案,可实现CentOS上K8s集群日志的全链路管理,满足不同场景下的日志收集、存储、分析与监控需求,保障系统稳定运行。