Prometheus Operator + kube-prometheus 监控 k8s

发布时间: 更新时间: 总字数:1282 阅读时间:3m 作者: IP上海 分享 网址

使用 Prometheus Operator + kube-prometheus 监控 k8s

Prometheus Operator 介绍

Prometheus Operator 使用 Kubernetes 自定义资源 来简化 Prometheus、Alertmanager 和相关监控组件的部署与配置。

前提条件

Prometheus Operator 需要 Kubernetes 版本至少为 1.16.0。如果您刚开始使用 Prometheus Operator,强烈建议使用最新的 稳定版本

Prometheus Operator 支持的 kubernetes 版本

自定义资源定义 (CustomResourceDefinitions)

Prometheus Operator 的一个核心特性是监控 Kubernetes API 服务器中特定对象的变化,并确保当前的 Prometheus 部署与这些对象相匹配。 Operator 作用于以下 自定义资源定义 (CRDs)

  • Prometheus,定义所需的 Prometheus 部署。
  • PrometheusAgent,定义所需的 Prometheus 部署,但在 Agent 模式下运行。
  • Alertmanager,定义所需的 Alertmanager 部署。
  • ThanosRuler,定义所需的 Thanos Ruler 部署。
  • ServiceMonitor,声明式地指定应如何监控 Kubernetes 服务组。 Operator 会根据 API 服务器中对象的当前状态自动生成 Prometheus 抓取配置。
  • PodMonitor,声明式地指定应如何监控 Pod 组。 Operator 会根据 API 服务器中对象的当前状态自动生成 Prometheus 抓取配置。
  • Probe,声明式地指定应如何监控 Ingress 组或静态目标。Operator 会根据定义自动生成 Prometheus 抓取配置。
  • ScrapeConfig,声明式地指定要添加到 Prometheus 的抓取配置。此自定义资源定义有助于抓取 Kubernetes 集群外部的资源。
  • PrometheusRule,定义所需的一组 Prometheus 告警和/或记录规则。 Operator 会生成一个规则文件,供 Prometheus 实例使用。
  • AlertmanagerConfig,声明式地指定 Alertmanager 配置的子部分,允许将告警路由到自定义接收器,并设置抑制规则。

Prometheus Operator 会自动检测 Kubernetes API 服务器中上述任何对象的更改,并确保匹配的部署和配置保持同步。

要了解更多关于 Prometheus Operator 引入的 CRD 的信息,请查看 设计 页面。

动态准入控制

为了防止无效的 Prometheus 告警和记录规则导致已部署的 Prometheus 实例故障,提供了一个 准入 Webhook 来在 PrometheusRule 资源初始创建或更新时对其进行验证。

有关此功能的更多信息,请参阅 用户指南

kube-prometheus 介绍

kube-prometheus 提供了基于 Prometheus 和 Prometheus Operator 的完整集群监控栈的示例配置。这包括部署多个 Prometheus 和 Alertmanager 实例、用于收集节点指标的指标导出器(如 node_exporter)、连接 Prometheus 与各种指标端点的抓取目标配置,以及用于通知集群潜在问题的示例告警规则。

kube-prometheus 收集了 Kubernetes 清单 (Manifests)、Grafana 仪表板以及 Prometheus 规则,并结合文档和脚本,旨在通过 Prometheus Operator 使用 Prometheus 提供易于操作的端到端 Kubernetes 集群监控。

本项目的内容是使用 jsonnet 编写的。本项目既可以被描述为一个软件包,也可以被描述为一个库。

包含的组件:

该技术栈专为集群监控而设计,因此它经过预配置,可从所有 Kubernetes 组件收集指标。此外,它还提供了一套默认的仪表板和告警规则。许多有用的仪表板和告警来自 kubernetes-mixin 项目,与本项目类似,它提供可组合的 jsonnet 作为库,供用户根据需求进行自定义。

Helm chart

prometheus-community/kube-prometheus-stack Helm chart 提供了与 kube-prometheus 类似的功能集。该 chart 由 Prometheus 社区维护。 如需更多信息,请参阅 chart 的自述文件

kube-prometheus 部署

git clone https://github.com/prometheus-operator/kube-prometheus
cd kube-prometheus

# 替换相关镜像
- manifests/kubeStateMetrics-deployment.yaml
- manifests/prometheusAdapter-deployment.yaml
# 修改为 NodePort
- manifests/grafana-service.yaml
- manifests/prometheus-service.yaml
- manifests/alertmanager-service.yaml

kubectl apply --server-side -f manifests/setup
kubectl wait \
    --for condition=Established \
    --all CustomResourceDefinition \
    --namespace=monitoring
kubectl apply -f manifests/

使用

ServiceMonitor

apiVersion: v1
kind: Service
metadata:
  name: prometheus-metrics-demo
  namespace: default
  labels:
    micrometer-prometheus-discovery: 'true'
spec:
  selector:
    app: demo-prometheus
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      name: metrics

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: micrometer-demo
  namespace: default
spec:
  endpoints:
    - interval: 15s
      path: /actuator/prometheus
      port: metrics    #注意:这里port配置的是端口名,并非端口号。
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      micrometer-prometheus-discovery: 'true'

参考

  1. https://prometheus-operator.dev/
  2. https://prometheus-operator.dev/docs/getting-started/introduction/
  3. Prometheus Operator vs. kube-prometheus vs. community Helm chart
  4. PodMonitor vs ServiceMonitor what is the difference?
  5. https://github.com/prometheus-operator/kube-prometheus
  6. https://help.aliyun.com/zh/asm/sidecar/monitor-asm-instances-by-using-a-self-managed-prometheus-instance
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics