简介:本文详细解析Prometheus监控Kubernetes集群的核心机制,涵盖架构设计、数据采集、告警配置等关键环节,提供可落地的部署方案与故障排查指南。
Kubernetes作为容器编排领域的标准,其动态性、分布式特性对监控系统提出严峻挑战。传统监控工具(如Zabbix、Nagios)难以适应Pod频繁扩缩容、服务网格通信等场景。Prometheus凭借其拉取式数据采集、多维数据模型和强大的查询语言PromQL,成为CNCF推荐的K8s监控方案。
典型监控架构包含四个核心组件:
graph TDA[Prometheus Server] -->|抓取指标| B[K8s集群]B -->|暴露指标| C[Node Exporter]B -->|暴露指标| D[cAdvisor]B -->|暴露指标| E[Kube-State-Metrics]A -->|转发告警| F[Alertmanager]G[Grafana] -->|可视化| A
Node Exporter:采集节点级硬件指标(CPU/内存/磁盘/网络)
node_cpu_seconds_total、node_memory_MemAvailable_bytescAdvisor:容器级资源监控(已集成在Kubelet中)
/metrics/cadvisorcontainer_cpu_usage_seconds_total、container_memory_working_set_bytesKube-State-Metrics:采集K8s资源对象状态
kube_deployment_status_replicas_availablePrometheus Operator:自动化监控配置管理
ServiceMonitor、PrometheusRule等资源
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: kube-apiserverspec:selector:matchLabels:k8s-app: kube-apiserverendpoints:- port: httpsinterval: 30sscheme: httpstlsConfig:caFile: /etc/prometheus/secrets/kube-apiserver/ca.crt
# 安装Operatorhelm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm install prometheus prometheus-community/kube-prometheus-stack \--set prometheus.prometheusSpec.retention=30d \--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=50Gi
resources:requests:cpu: 500mmemory: 2Gilimits:cpu: 2memory: 4Gi
# thanos-sidecar配置示例sidecarContainers:- name: thanos-sidecarimage: quay.io/thanos/thanos:v0.32.5args:- "sidecar"- "--prometheus.url=http://localhost:9090"- "--objstore.config=$(OBJSTORE_CONFIG)"
PromQL示例:
# 计算集群CPU使用率sum(rate(container_cpu_usage_seconds_total{container!="",pod!=""}[5m]))/sum(kube_node_status_allocatable{resource="cpu"}) * 100
可视化建议:
告警规则示例:
groups:- name: pod-failuresrules:- alert: PodFrequentlyRestartingexpr: increase(kube_pod_container_status_restarts_total{namespace!="kube-system"}[1h]) > 3for: 10mlabels:severity: criticalannotations:summary: "Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} restarted {{ $value }} times in last hour"
关键指标:
apiserver_request_latencies_summary:请求延迟分布apiserver_request_total:按动词/资源分类的请求量etcd_request_duration_seconds_bucket:etcd操作延迟诊断流程:
topk(5, apiserver_request_latencies_summary_quantile{quantile="0.99"})apiserver_request_total{verb="LIST",resource="pods"}etcd_server_leader_changes_seen_total检查流程:
kubectl get endpoints kube-apiserver -n default
annotations:prometheus.io/scrape: "true"prometheus.io/port: "6443"
解决方案:
pod_name等高频变化标签
groups:- name: recording-rulesrules:- record: jobrate5m
expr: sum(rate(node_cpu_seconds_total[5m])) by (job)
恢复步骤:
kubectl get pvc -n monitoringtar czvf wal_backup.tar.gz /var/lib/prometheus/wal
prometheus --storage.tsdb.path=/var/lib/prometheus \--storage.tsdb.retention.time=30d \--web.enable-lifecycle
--storage.tsdb.min-block-duration和--storage.tsdb.max-block-duration调整压缩策略--web.config.file=/etc/prometheus/web-config.yml--query.max-samples=50000000Prometheus监控K8s集群已形成完整生态链,从基础资源监控到应用性能监控均可覆盖。随着eBPF技术的成熟,未来可结合Prometheus的Remote Write特性实现更细粒度的网络监控。建议运维团队建立分级监控体系:
通过合理配置告警策略和可视化面板,可将MTTR(平均修复时间)降低60%以上。实际部署时建议先在测试环境验证监控规则,再逐步推广到生产环境。