乐趣区

关于prometheus:Prometheus-Operator-与-kubeprometheus-之一简介

简介

Prometheus Operator

Prometheus Operator: 在 Kubernetes 上治理 Prometheus 集群。该项目标目标是简化和自动化基于 Prometheus 的 Kubernetes 集群监控堆栈的配置。

kube-prometheus

最简略的办法是将 Prometheus Operator 作为 kube-prometheus 的一部分进行部署。kube-prometheus 部署了 Prometheus Operator,并且曾经安顿了一个名为 prometheus-k8s 的 prometheus,默认带有警报和规定,并且带有其余 prometheus 须要的组件,如:

  • Grafana
  • kube-state-metrics
  • prometheus adapter
  • node exporter

Prometheus Operator vs. kube-prometheus vs. community helm chart

Prometheus Operator

Prometheus Operator 应用 Kubernetes 自定义资源,简化了 Prometheus、Alertmanager 和相干监控组件的部署和配置。

kube-prometheus

kube-prometheus 提供了一个基于 Prometheus 和 Prometheus Operator 的残缺集群监控堆栈的示例配置。这包含部署多个 Prometheus 和 Alertmanager 实例、用于收集节点指标的指标导出器(如 node_exporters)、将 Prometheus 链接到各种指标端点的指标配置,以及用于告诉集群中潜在问题的示例警报规定。

helm chart

prometheus-community/kube-prometheus-stack helm chart 提供了与 kube-prometheus 类似的个性集。这张 chart 是由 prometheus 社区保护的。

Prometheus Operator 性能

CRD

Prometheus Operator 的一个外围个性是 watch Kubernetes API 服务器对特定对象的更改,并确保以后 Prometheus 部署与这些对象匹配。Operator 对以下自定义资源定义 (crd) 进行操作:

monitoring.coreos.com/v1:

  • Prometheus: 它定义了 Prometheus 冀望的部署。
  • Alertmanager: 它定义了 AlertManager 冀望的部署。
  • ThanosRuler: 它定义了 ThanosRuler 冀望的部署;如果有多个 Prometheus 实例,则通过 ThanosRuler 进行告警规定的对立治理。
  • ServiceMonitor: Prometheus Operator 通过 PodMonitorServiceMonitor 实现对资源的监控,ServiceMonitor 用于通过 Service 对 K8S 中的任何资源进行监控,举荐首选 ServiceMonitor. 它申明性地指定了 Kubernetes service 应该如何被监控。Operator 依据 API 服务器中对象的以后状态主动生成 Prometheus 刮擦配置。
  • PodMonitor: Prometheus Operator 通过 PodMonitorServiceMonitor 实现对资源的监控,PodMonitor 用于对 Pod 进行监控,举荐首选 ServiceMonitor. PodMonitor 申明性地指定了应该如何监督一组 pod。Operator 依据 API 服务器中对象的以后状态主动生成 Prometheus 刮擦配置。
  • Probe: 它申明性地指定了应该如何监督 ingress 或动态指标组。Operator 依据定义主动生成 Prometheus 刮擦配置。
  • PrometheusRule: 用于治理 Prometheus 告警规定;它定义了一套所需的 Prometheus 警报和 / 或记录规定。Prometheus 生成一个规定文件,能够被 Prometheus 实例应用。
  • AlertmanagerConfig: 用于治理 AlertManager 配置文件,次要是告警发给谁;它申明性地指定 Alertmanager 配置的子局部,容许将警报路由到自定义接收器,并设置禁止规定。

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

简化的部署配置

配置 Prometheus 的基础知识,如版本、持久性、保留策略和来自本机 Kubernetes 资源的正本。最简的长久化的 Prometheus 的部署,只须要创立如下 yaml 即可:

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: persisted
spec:
  storage:
    volumeClaimTemplate:
      spec:
        storageClassName: ssd
        resources:
          requests:
            storage: 40Gi

Prometheus 指标配置

依据相熟的 Kubernetes 标签查问主动生成监控指标配置;无需学习普罗米修斯特定的配置语言。

大厂案例

哪些大厂在用 Prometheus Operator 或 kube-prometheus?

RedHat

从 Prometheus Operator 的 API 也能看进去,这个 Operator 最早是由 CoreOS 开发并开源的,而当初 CoreOS 曾经被 RedHat 收买,所以 RedHat 的 OpenShift 4 齐全是采纳 Prometheus Operator 作为它的 Metrics 解决方案的。典型的架构如下图:

能够看到 Prometheus 和 AlertManager 都是通过 Prometheus Operator 来进行治理的。

Rancher

Rancher 2 当前的 rancher-monitoring 也是基于 kube-prometheus 做了进一步的改良而来的,这是通过 rancher-monitoring helm chart 部署后的关系图,能够看到部署的组件还是十分多的:

  • Grafana
  • Prometheus CRD
  • Prometheus Operator
  • Prometheus
  • AlertManager
  • kube-state-metrics
  • prometheus adapter
  • node exporter

我为什么举荐你用 Prometheus Operator 或 kube-prometheus 而非原生 prometheus?

理由如下:

  1. 泛滥大厂的抉择;
  2. 极大简化了 Prometheus 的配置复杂度;
  3. 开箱即用的大量:

    1. 监控对象,如:K8S 组件 – coredns, kubelet, controller manager, apiserver, etcd, scheduler, kube proxy; 监控组件自监控 – grafana, AlertManager, prometheus 等;
    2. 仪表板,自带 24 个仪表板,十分实用,涵盖:集群 / 组件 / 网络 / 存储 /Node/Pod 等等维度;
    3. 告警规定,自带了 100 多个告警规定,涵盖 K8S 的方方面面;
  4. 风行的开源产品,很多也默认会带有对 Prometheus Operator 的反对,如 Loki 就有相干的 ServiceMonitor;
  5. 通过 ServiceMonitor 等,其实反而相比增加 Prometheus Annotation 有更大的灵活性;如上面的例子
  6. 高可用的反对,如:

    1. 多个 Prometheus 的 shards
    2. 多个 AlertManager
    3. ThanosRuler
  7. RBAC: 如默认能够创立 3 个 monitoring 的角色:admin/edit/viewer, 能够别离对应监控的管理员,保护人员和只读用户;

示例,灵活性:

spec:
  endpoints:
    - honorLabels: true
      params:
        _scheme:
          - https
      port: metrics
      proxyUrl: http://pushprox-k3s-server-proxy.cattle-monitoring-system.svc:8080
      relabelings:
        - sourceLabels:
            - __metrics_path__
          targetLabel: metrics_path
  jobLabel: component
  namespaceSelector:
    matchNames:
      - cattle-monitoring-system
  podTargetLabels:
    - component
    - pushprox-exporter
  selector:
    matchLabels:
      component: k3s-server
      k8s-app: pushprox-k3s-server-client
      provider: kubernetes
      release: rancher-monitoring

📚️ 参考文档

  • prometheus-operator/prometheus-operator: Prometheus Operator creates/configures/manages Prometheus clusters atop Kubernetes (github.com)
  • Prometheus Operator – Running Prometheus on Kubernetes (prometheus-operator.dev)
  • OperatorHub.io | The registry for Kubernetes Operators

以上

EOF

退出移动版