温馨提示×

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+GrafanaELK 聚合与检索容器与节点日志,与指标联动排查。
  • 快速体验与生产建议:快速体验可用 kube-prometheus-stack Helm 一键部署;生产环境建议启用 持久化存储RBACServiceMonitor/ PodMonitor告警规则通知渠道

二、两种落地路径

  • 路径A 二进制手动部署(适合学习/小规模)
    1. 在所有节点部署 Node Exporter(监听 9100),以 systemd 托管:
      • 下载解压后创建服务:ExecStart=/usr/local/node_exporter/node_exporter;启动:systemctl enable --now node_exporter。
    2. 部署 Prometheus(监听 9090),配置 global.scrape_interval: 15s,在 scrape_configs 中加入 job_name: ‘node_exporter’,targets 指向各节点 IP:9100
    3. 部署 Alertmanager(监听 9093),在 Prometheus 的 alerting 段指向其地址,配置路由与接收器(如企业微信)。
    4. 部署 Grafana(监听 3000),添加 Prometheus 数据源,导入 Node Exporter Full / Kubernetes Cluster Monitoring 等面板。
    5. 验证:访问 Prometheus 的 /targets 页面确认所有 node_exporterUP;Grafana 中查看节点与容器指标面板。
  • 路径B 基于 Helm 的 kube-prometheus-stack(适合生产)
    1. 添加仓库并安装:
      • helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
      • helm install prometheus prometheus-community/kube-prometheus-stack -n monitor --create-namespace
    2. 按需开启/配置 ServiceMonitorPodMonitorPrometheusRuleAlertmanagerConfig,并配置持久化与资源限额。
    3. 访问: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 与容量。
  • 安全与合规:启用 RBACNetworkPolicyPodSecurity,对外暴露使用 Ingress/Service NodePort 并做好鉴权与限流。
  • 可观测性增强:在 Grafana 中统一 指标/日志/追踪 视图;结合 事件(kubectl get events -A)与 审计日志 做安全与合规审计。
  • 第三方方案:如需 SRE 托管/企业支持,可考虑 Datadog / New Relic / Sysdig 等,与现有 Prometheus 生态对接或替代。

0