CentOS 上 Kubernetes 的监控与日志管理实践
一 监控体系与组件
- 建议采用Prometheus + Grafana作为核心监控栈,覆盖节点、容器、Kubernetes 编排对象与组件状态;配合Alertmanager进行告警通知。关键采集组件包括:
- Node Exporter:暴露节点级指标(CPU、内存、磁盘、网络)。
- kube-state-metrics:暴露集群资源对象状态(如 Deployment、Pod、Node 的副本数、状态等)。
- cAdvisor:内置于 kubelet,采集容器资源与性能数据。
- 可视化与告警:Grafana 展示仪表盘,Alertmanager 处理告警路由与抑制。
- 快速落地方式:使用 Helm 安装社区维护的kube-prometheus-stack,可一键部署 Prometheus、Grafana、Alertmanager 及常用 Exporter 与仪表盘。
二 监控快速落地步骤
- 准备命名空间并部署监控栈(示例):
- 创建命名空间:kubectl create ns monitoring
- Helm 添加仓库并安装:
- helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring
- 访问与验证:
- Grafana:通过 Service 暴露端口(默认 3000),添加数据源 Prometheus(地址如:http://prometheus-server.monitoring.svc.cluster.local:9090),导入官方或社区仪表盘(如 Kubernetes / Node Exporter 等)。
- Prometheus:访问 /targets 页面检查各 Job 抓取状态是否为 UP。
- 建议开启持久化存储(如 PVC/StorageClass)以避免数据丢失,并为生产环境配置合理的资源请求与告警规则。
三 日志体系与采集架构
- 日志来源与落盘路径:
- 应用容器日志:写入 stdout/stderr,由容器运行时重定向到宿主机 /var/log/containers/*.log,并与 /var/log/pods 目录关联;节点侧需配置 logrotate 防止磁盘被占满。
- 采集模式选型:
- DaemonSet 节点级代理(推荐):每个节点运行一个日志采集器,统一采集节点上所有 Pod 日志,运维简单、可靠性高(如 Fluentd、Fluent Bit、Filebeat)。
- Sidecar 模式:针对单个应用的特殊需求(如多行堆栈日志、敏感信息脱敏、专有格式解析),在 Pod 内新增日志代理容器。
- 应用直写 stdout/stderr:优先规范应用日志输出到标准输出,便于采集与统一治理。
- 存储与可视化选型:
- EFK/ELK(Elasticsearch + Fluentd/Logstash/Filebeat + Kibana):适合需要全文检索、复杂解析与丰富分析的场景。
- Loki + Promtail + Grafana:轻量级、成本低、与 Prometheus 标签体系一致,适合容器日志的快速检索与与指标联动。
四 日志快速落地步骤
- 方案 A(轻量优先):Loki + Promtail + Grafana
- 部署 Loki 与 Promtail(可用 Helm:helm install loki grafana/loki-stack),Promtail 以 DaemonSet 形式运行,读取 /var/log/containers/*.log 并附加 Kubernetes 元数据后发送到 Loki。
- Grafana 添加数据源 Loki(地址如:http://loki.monitoring.svc.cluster.local:3100),使用 {namespace=“xxx”, pod=“yyy”} 等标签进行查询与可视化。
- 方案 B(功能完备):EFK/ELK
- 部署 Elasticsearch(存储与检索)、Fluentd/Filebeat(采集与处理)、Kibana(分析与可视化)。
- Fluentd/Filebeat 采集 /var/log/containers/*.log,通过 Kubernetes Metadata Filter 丰富标签,输出到 Elasticsearch;Kibana 建立索引模式与可视化报表。
五 日常排障与最佳实践
- 快速定位:
- 查看节点与组件状态:kubectl get nodes;kubectl get pods -A;kubectl get events -A。
- 查看容器日志:kubectl logs -n ;实时跟踪:kubectl logs -f -n ;多容器需指定容器名。
- 稳定性与性能:
- 为日志代理设置资源限制与缓冲策略,避免因高峰日志导致 OOM 或丢日志;节点侧启用 logrotate 定期轮转与清理。
- 存储与成本:
- 根据规模与查询需求选择后端:需要全文检索与复杂分析选 Elasticsearch;强调低成本与云原生集成选 Loki;超大规模与 OLAP 分析考虑 ClickHouse;合规归档可落 S3/Glacier。
- 安全与治理:
- 规范应用日志为 JSON 格式,便于解析与脱敏;为监控与日志组件配置 RBAC、网络策略与最小权限;生产环境启用 持久化存储 与 备份。