K8s在Linux上的监控如何实现
小樊
34
2025-12-14 10:31:25
K8s在Linux上的监控落地方案
一、监控分层与组件选型
- 节点与系统层:用 Node Exporter 采集 CPU、内存、磁盘、网络 等主机指标,部署为 DaemonSet 覆盖所有节点。
- 容器与K8s资源层:用 cAdvisor(已内置于 kubelet)采集容器资源,用 kube-state-metrics 暴露 Pod/Deployment/Node 等对象状态。
- 采集与存储层:用 Prometheus 抓取并存储时间序列数据,配置 scrape_interval: 15s 等参数。
- 可视化与告警层:用 Grafana 做面板展示,用 Alertmanager 做分组、抑制、静默与通知(如企业微信、钉钉、邮件、Slack)。
- 日志层(可选):用 Loki+Grafana 或 ELK 聚合与检索容器与节点日志,与指标联动排查。
- 快速体验与生产建议:快速体验可用 kube-prometheus-stack Helm 一键部署;生产环境建议启用 持久化存储、RBAC、ServiceMonitor/ PodMonitor、告警规则 与 通知渠道。
二、两种落地路径
- 路径A 二进制手动部署(适合学习/小规模)
- 在所有节点部署 Node Exporter(监听 9100),以 systemd 托管:
- 下载解压后创建服务:ExecStart=/usr/local/node_exporter/node_exporter;启动:systemctl enable --now node_exporter。
- 部署 Prometheus(监听 9090),配置 global.scrape_interval: 15s,在 scrape_configs 中加入 job_name: ‘node_exporter’,targets 指向各节点 IP:9100。
- 部署 Alertmanager(监听 9093),在 Prometheus 的 alerting 段指向其地址,配置路由与接收器(如企业微信)。
- 部署 Grafana(监听 3000),添加 Prometheus 数据源,导入 Node Exporter Full / Kubernetes Cluster Monitoring 等面板。
- 验证:访问 Prometheus 的 /targets 页面确认所有 node_exporter 为 UP;Grafana 中查看节点与容器指标面板。
- 路径B 基于 Helm 的 kube-prometheus-stack(适合生产)
- 添加仓库并安装:
- helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- helm install prometheus prometheus-community/kube-prometheus-stack -n monitor --create-namespace
- 按需开启/配置 ServiceMonitor、PodMonitor、PrometheusRule、AlertmanagerConfig,并配置持久化与资源限额。
- 访问:Grafana 默认 3000,Prometheus 9090,Alertmanager 9093;导入官方或自定义仪表盘。
三、关键配置与验证要点
- 目标抓取与发现:
- 节点层:Prometheus 配置 job 抓取 Node Exporter :9100;
- K8s 层:启用 kube-state-metrics,并通过 ServiceMonitor/PodMonitor 让 Prometheus 发现 Pod/Deployment/Node 指标;
- 容器层:确认 kubelet 已启用 cAdvisor(默认开启)。
- 告警与通知:在 Prometheus 中编写 告警规则(如节点 CPU>80%、Pod CrashLoopBackOff、Deployment 可用副本不足),在 Alertmanager 中配置 路由/接收器/抑制/静默,实现企业微信/钉钉/邮件/Slack 通知。
- 日志联动:部署 Loki(或 ELK),在 Grafana 中添加 Loki 数据源,用 {namespace=“xxx”, pod=“yyy”} 等标签查询日志,与指标面板联动定位问题。
- 快速验证清单:
- kubectl get nodes/pods -A 检查资源状态;
- Prometheus 访问 /targets 与 /alerts 确认抓取与健康;
- Grafana 导入面板并查看 CPU/内存/网络/文件系统 与 K8s 对象 指标;
- 触发测试告警,确认 Alertmanager 通知到达。
四、生产实践与扩展
- 高可用与容量:为 Prometheus/Alertmanager 配置多副本与 持久化存储,设置 retention(如 15d),按数据量规划 storageClass 与容量。
- 安全与合规:启用 RBAC、NetworkPolicy、PodSecurity,对外暴露使用 Ingress/Service NodePort 并做好鉴权与限流。
- 可观测性增强:在 Grafana 中统一 指标/日志/追踪 视图;结合 事件(kubectl get events -A)与 审计日志 做安全与合规审计。
- 第三方方案:如需 SRE 托管/企业支持,可考虑 Datadog / New Relic / Sysdig 等,与现有 Prometheus 生态对接或替代。