Ubuntu Kubernetes 集群监控搭建指南
一 架构与组件选型
- 指标监控:使用 Prometheus 采集与存储时间序列指标,配合 Grafana 做可视化与面板展示。
- 采集覆盖:
- cAdvisor(已内置于 Kubelet)负责容器资源使用指标。
- Node Exporter 负责节点级(CPU、内存、磁盘、网络)指标。
- kube-state-metrics 负责集群对象(Pod、Deployment、Node 等)状态指标。
- 告警通知:使用 Alertmanager 对接企业微信、钉钉、邮件、Webhook 等通道。
- 部署方式:优先采用 kube-prometheus-stack(Prometheus Operator 的发行版),通过 Helm 快速安装与维护,内置大量 ServiceMonitor 与 Grafana 仪表盘,开箱即用。
二 快速落地步骤
- 准备环境
- 确保集群可正常访问镜像仓库,节点时间已同步(如 chrony),并具备 kubectl 与 Helm 3 环境。
- 安装 kube-prometheus-stack(Helm)
- 添加仓库并安装(示例命名空间为 monitoring):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
kubectl create ns monitoring
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.service.type=NodePort \
--set prometheus.service.type=NodePort
- 验证安装:
kubectl -n monitoring get pods -l app.kubernetes.io/name=prometheus
kubectl -n monitoring get svc prometheus-grafana
kubectl -n monitoring get svc prometheus-kube-prometheus-prometheus
- 访问控制台
- Grafana:http://<任一节点IP>:/,默认账号 admin,首次登录需设置密码。
- Prometheus:http://<任一节点IP>:/,可查询 up、node_cpu_seconds_total 等指标。
- 导入常用仪表盘
- 在 Grafana 导入 Kubernetes / Compute Resources / Cluster(ID:3119)、Nodes(ID:315)等官方面板,快速获得节点与集群概览。
三 关键配置与扩展
- 持久化存储(可选,生产推荐)
- 使用 NFS 或其他 StorageClass 为 Prometheus 与 Grafana 提供 PVC,避免数据重启丢失。示例思路:
- 搭建 NFS Server(Ubuntu):安装 nfs-kernel-server,配置导出目录(如 /data/pvdata),客户端安装 nfs-common 并挂载验证。
- 创建 PV/PVC(示例名称空间 monitoring),在 Helm 安装时通过 values.yaml 指定 Prometheus 的 persistence.storageClass 与 size,或复用已有 PVC。
- 自定义采集与告警
四 验证与常见问题
- 验证采集链路
- 在 Prometheus Targets 页面确认 kubelet、node-exporter、kube-state-metrics、prometheus 等均为 UP 状态。
- 在 Grafana 查询 up{job=“kubernetes-nodes”}、rate(node_cpu_seconds_total[5m]) 等指标是否有数据。
- 常见问题排查
- 节点未就绪:检查 kubelet 与 cAdvisor 是否正常,节点污点与污点容忍是否影响调度。
- 抓取失败:核对 ServiceMonitor 的 namespaceSelector/selector 与目标的 annotations 是否匹配。
- 存储不可用:确认 StorageClass 存在且 PV/PVC 处于 Bound,权限与路径正确(NFS 场景下目录属主与权限)。
- 告警未送达:检查 Alertmanager 的 route 与 receivers 配置、网络连通性与 Webhook 签名/Token 是否正确。