Prometheus与Kubernetes Exporter:容器平台监控
你是否还在为Kubernetes集群的监控头疼?Pod频繁重启却找不到根源?节点资源耗尽前毫无预警?本文将带你从零开始搭建完整的Kubernetes监控体系,用Prometheus捕获每一个性能瓶颈,让容器平台尽在掌控。读完本文你将掌握:
- Kubernetes核心组件监控配置
- 自定义Exporter部署实践
- 关键指标告警规则设置
- 可视化仪表盘搭建指南
为什么选择Prometheus监控K8s
Prometheus作为CNCF毕业项目,专为云原生环境设计,其多维数据模型和灵活的查询语言(PromQL)完美契合Kubernetes的动态特性。与传统监控工具相比,Prometheus具有三大优势:
- 原生Kubernetes集成:通过discovery/kubernetes/模块实现Pod、Service、Node的自动发现,无需手动配置目标
- 时序数据高可用存储:基于tsdb/模块的本地时序数据库,支持千万级指标高效存储
- 强大的标签维度:自动注入Kubernetes元数据标签,实现从集群到容器的全链路追踪
图1:Prometheus监控架构示意图,展示数据采集、存储、查询和告警的完整流程
核心组件与Exporter部署
1. Prometheus服务部署
在Kubernetes集群中部署Prometheus最便捷的方式是使用官方配置模板。首先克隆项目仓库:
git clone https://gitcode.com/GitHub_Trending/pr/prometheus
cd prometheus
官方提供了完整的Kubernetes部署示例,包含RBAC权限配置和StatefulSet部署清单:
kubectl apply -f documentation/examples/rbac-setup.yml
kubectl apply -f documentation/examples/prometheus-kubernetes.yml
关键配置文件说明:
- documentation/examples/prometheus-kubernetes.yml:Prometheus主配置,定义了Kubernetes各组件的采集规则
- documentation/examples/rbac-setup.yml:RBAC权限配置,赋予Prometheus访问K8s API的权限
2. 节点级监控:node-exporter
node-exporter是监控Kubernetes节点的必备工具,通过scrape/模块采集CPU、内存、磁盘等核心指标。推荐使用DaemonSet确保每个节点都运行一个实例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitoring
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:v1.5.0
ports:
- containerPort: 9100
hostPort: 9100
name: metrics
核心监控指标:
node_cpu_seconds_total:CPU使用时间node_memory_MemAvailable_bytes:可用内存node_disk_io_time_seconds_total:磁盘I/O时间
3. 容器级监控:cadvisor
从Kubernetes 1.7.3开始,容器指标已迁移到cadvisor端点。Prometheus通过以下配置采集容器指标:
- job_name: "kubernetes-cadvisor"
scheme: https
metrics_path: /metrics/cadvisor
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
配置片段来源:documentation/examples/prometheus-kubernetes.yml
关键容器指标:
container_cpu_usage_seconds_total:容器CPU使用container_memory_usage_bytes:容器内存使用container_network_transmit_bytes_total:网络发送字节数
实用监控规则与告警配置
关键告警规则配置
在Prometheus中配置以下告警规则,可及时发现Kubernetes集群异常:
groups:
- name: kubernetes.rules
rules:
- alert: HighNodeCPUUsage
expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "节点CPU使用率过高"
description: "节点 {{ $labels.instance }} CPU使用率超过80%已持续10分钟"
- alert: HighPodMemoryUsage
expr: sum(container_memory_usage_bytes{namespace=~".+"}) by (pod, namespace) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=~".+"}) by (pod, namespace) > 0.9
for: 5m
labels:
severity: critical
annotations:
summary: "Pod内存使用超限"
description: "Pod {{ $labels.pod }} 内存使用超过限制的90%"
可将规则保存为alert.rules.yml并通过Prometheus配置加载:
rule_files:
- "alert.rules.yml"
资源使用趋势分析
使用PromQL查询可以分析资源使用趋势,例如查询过去7天节点内存使用趋势:
avg_over_time(node_memory_MemAvailable_bytes[7d]) by (instance)
在Prometheus UI中执行此查询,可直观看到内存变化趋势,帮助预测资源扩容需求。
高级监控技巧与最佳实践
1. 自定义Exporter开发
当内置Exporter无法满足需求时,可以开发自定义Exporter。Prometheus提供了Go客户端库简化开发:
package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var (
customMetric = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "custom_application_status",
Help: "Custom application health status",
})
)
func init() {
prometheus.MustRegister(customMetric)
}
func main() {
customMetric.Set(1) // 设置指标值
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
}
开发指南参考:README.md
2. 监控数据持久化配置
为避免Prometheus重启导致数据丢失,配置持久化存储:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prometheus-data
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
在Prometheus StatefulSet中引用此PVC:
volumeMounts:
- name: prometheus-data
mountPath: /prometheus
volumes:
- name: prometheus-data
persistentVolumeClaim:
claimName: prometheus-data
3. 监控性能优化
对于大规模Kubernetes集群,建议调整以下参数优化Prometheus性能:
global:
scrape_interval: 15s # 增大采集间隔
evaluation_interval: 30s # 增大规则评估间隔
scrape_configs:
- job_name: "kubernetes-pods"
kubernetes_sd_configs:
- role: pod
scrape_interval: 30s # 对Pod监控使用更长间隔
配置优化参考:config/config.go
总结与进阶学习
通过本文介绍的方法,你已掌握使用Prometheus监控Kubernetes集群的核心技能。关键收获包括:
- 部署Prometheus并配置Kubernetes服务发现
- 使用node-exporter和cadvisor采集节点与容器指标
- 配置实用告警规则监控集群健康状态
- 优化Prometheus性能应对大规模集群
进阶学习资源:
- 官方文档:docs/
- 架构设计:documentation/internal_architecture.md
- 完整配置示例:documentation/examples/
持续关注Kubernetes和Prometheus的版本更新,及时应用新的监控特性和最佳实践,让你的容器平台监控体系保持领先。
如果觉得本文有帮助,请点赞收藏,并关注后续关于Prometheus联邦部署和长期存储的进阶内容!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



