专栏名称: KubeSphere云原生
分享开源、云原生、PaaS、微服务、DevOps、边缘计算、AI、Serverless 等领域的技术内容
目录
相关文章推荐
广州初高君  ·  初中物理全册共22章节“复习提纲”! ·  昨天  
广州初高君  ·  初中物理全册共22章节“复习提纲”! ·  昨天  
中国教育报  ·  视频 | 今天,送别黄旭华院士! ·  2 天前  
酒醒梦已残  ·  DeepSeek ... ·  2 天前  
酒醒梦已残  ·  DeepSeek ... ·  2 天前  
武汉发布  ·  武汉一区动真格!减负 ·  2 天前  
武汉发布  ·  武汉一区动真格!减负 ·  2 天前  
51好读  ›  专栏  ›  KubeSphere云原生

Kubernetes 监控实践:基于 Prometheus-Operator 的完整解决方案

KubeSphere云原生  · 公众号  ·  · 2025-01-08 18:47

正文

Kubernetes 的动态性和分布式特性为应用部署带来了极大的便利,同时也使监控变得复杂而繁琐。幸运的是,Prometheus-Operator 提供了一种高效的方式,通过抽象 Kubernetes 的原生资源(CRD)来配置和管理整个监控栈,极大地简化了监控的部署和运维。

本文将从实际操作出发,介绍如何通过 Prometheus-Operator 快速搭建 Kubernetes 的监控体系,包括如何配置监控目标、报警规则以及可视化工具 Grafana 的使用。

为什么选择 Prometheus-Operator?

Prometheus-Operator 将原本复杂的 Prometheus 配置抽象为 Kubernetes 的资源对象,极大地提升了管理效率。以下是其核心功能:

  • 声明式配置: 通过 CRD 管理 Prometheus 实例、监控目标、报警规则等。
  • 动态服务发现: 通过 ServiceMonitor 和 PodMonitor 动态发现 Kubernetes 中的服务和 Pod。
  • 告警管理简化: 通过 PrometheusRule CRD 集中管理报警规则。
  • 一站式解决方案: 集成 Prometheus、Alertmanager、Grafana,提供完整的监控能力。

接下来,我们逐步讲解如何使用 Prometheus-Operator 配置和管理整个监控栈。

如何部署 Prometheus-Operator

使用 Helm 是最简单的方式来安装 Prometheus-Operator,并且它已经包含了 Prometheus、Alertmanager 和 Grafana 等组件。

1.添加 Helm 仓库:


helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

2.创建监控命名空间:


kubectl create namespace monitoring

3.安装 Prometheus-Operator:


helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring

安装完成后,Prometheus、Alertmanager 和 Grafana 都会作为独立的 Kubernetes 资源运行在监控命名空间中。

配置监控目标

Prometheus-Operator 通过 CRD(如 ServiceMonitor 和 PodMonitor)来动态发现监控目标,省去了繁琐的手动配置。

使用 ServiceMonitor 发现服务

ServiceMonitor 是 Prometheus-Operator 提供的 CRD,用于指定需要监控的服务。例如:


apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-service-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: my-service
  endpoints:
    - port: metrics
      path: /metrics
      interval: 15s

在该配置中:

  • selector 匹配需要监控的服务。
  • endpoints 指定指标暴露的端口和路径。

部署后,Prometheus 会根据标签选择器自动抓取服务的指标。

使用 PodMonitor 发现 Pod

如果某些应用没有通过 Kubernetes Service 暴露指标,可以直接通过 PodMonitor 抓取 Pod 数据:

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: my-pod-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: my-app
  podMetricsEndpoints:
    - port: metrics
      path: /metrics
      interval: 15s

PodMonitor 的作用类似于 ServiceMonitor,但它直接针对 Pod 而非服务。

配置报警规则

通过 PrometheusRule CRD,可以声明式地管理告警规则。以下是一个告警规则的示例:


apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: pod-restart-alerts
  namespace: monitoring
spec:
  groups:
    - name: pod-alerts
      rules:
        - alert: PodRestart
          expr: increase(kube_pod_container_status_restarts_total[5m]) > 3
          for: 1m
          labels:
            severity: warning
          annotations:
            summary: "Pod {{ $labels.pod }} restarted frequently"
            description: "Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} restarted more than 3 times in 5 minutes."
  • expr:告警条件,这里监控 5 分钟内 Pod 的重启次数是否超过 3。
  • for:触发告警所需持续时间。
  • labels 和 annotations:用于告警分类和描述。

部署 PrometheusRule 后,Prometheus 会自动加载规则并触发告警。

集成可视化工具 Grafana

Kube-Prometheus-Stack 部署默认自带 Grafana,用于直观地展示监控数据。

1.访问 Grafana:


kubectl port-forward svc/kube-prometheus-stack-grafana -n monitoring 3000:80

打开浏览器访问 http://localhost:3000

2.添加 Prometheus 数据源:

  • 数据源 URL: http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090 (默认已内置)

    3.导入 Kubernetes 仪表盘:在 Grafana 中点击 Import,输入 Grafana Dashboard ID (如 315 ),快速导入 Kubernetes 的监控面板。

总结

Prometheus-Operator 通过 CRD 将 Prometheus 的配置与 Kubernetes 集成,使得监控和报警变得更加高效和自动化。结合 ServiceMonitor 和 PrometheusRule,可以动态发现监控目标并管理报警规则,Alertmanager 和 Grafana 则分别负责告警通知和数据可视化。

这套基于 CRD 的监控栈大大降低了 Kubernetes 监控的复杂度,是生产环境中不可或缺的一部分。如果你还没有开始用 Prometheus-Operator,不妨试试这套简洁高效的解决方案!

从 LB Ingress 到 ZTM:集群服务暴露新思路

2025-01-03

Kubernetes 为什么减少对 Docker 的依赖:容器运行时演进背后的技术考量

2024-12-25

拒绝 Helm?如何在 K8s 上部署 KRaft 模式 Kafka 集群?

2024-12-19

关于 KubeSphere

KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的 开源容器平台 ,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。

KubeSphere 已被 Aqara 智能家居、本来生活、东方通信、微宏科技、东软、华云、新浪、三一重工、华夏银行、四川航空、国药集团、微众银行、紫金保险、去哪儿网、中通、中国人民银行、中国银行、中国人保寿险、中国太平保险、中国移动、中国联通、中国电信、天翼云、中移金科、Radore、ZaloPay 等海内外数万家企业采用。KubeSphere 提供了开发者友好的向导式操作界面和丰富的企业级功能,包括 Kubernetes 多云与多集群管理、DevOps (CI/CD)、应用生命周期管理、边缘计算、微服务治理 (Service Mesh)、多租户管理、可观测性、存储与网络管理、GPU support 等功能,帮助企业快速构建一个强大和功能丰富的容器云平台。


✨ GitHub :https://github.com/kubesphere






请到「今天看啥」查看全文