Prometheus on k8s 部署与实战操作进阶篇( 三 )

  • 自动发现和配置生成:Prometheus Operator 根据定义的 ServiceMonitor 和 PrometheusRule 自动发现和生成相应的监控配置 。它会监听 Kubernetes 中的变化,如服务的创建、删除或标签的变更,以及规则的更新,然后自动更新 Prometheus 的配置文件 。
  • Prometheus 部署:Prometheus Operator 会基于 Prometheus 自定义资源的定义,在 Kubernetes 集群中部署 Prometheus 实例 。Operator 负责管理配置、Pod 的生命周期、版本升级等 。
  • 集成 Grafana 和 Alertmanager:Prometheus Operator 通常也与 Grafana 和 Alertmanager 集成,可以配置 Grafana 和 Alertmanager 自定义资源,以便自动部署和配置这些组件 。
  • ServiceMonitor 作用和示例讲解:
    ServiceMonitor 是 Prometheus Operator 中的一个自定义资源定义(CRD),用于定义要监控的应用程序服务 。它的作用是指定哪些服务需要被 Prometheus 监控,以及如何进行监控 。ServiceMonitor 在 Prometheus Operator 中的使用非常重要,因为它能够自动发现被监控的服务,并生成适当的监控配置 。
    下面是一个 ServiceMonitor 的示例讲解:
    假设有一个名为 "my-App" 的应用程序在 Kubernetes 集群中运行,我们希望 Prometheus 监控该应用程序的性能指标 。首先,我们需要创建一个 ServiceMonitor 自定义资源来定义该应用程序的监控配置 。
    apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: my-app-monitornamespace: defaultspec:selector:matchLabels:app: my-appendpoints:- port: webinterval: 30s在上述示例中:
    • apiVersion 和 kind 指定了这是一个 ServiceMonitor 自定义资源 。
    • metadata 中的 name 指定了 ServiceMonitor 对象的名称 。
    • spec 部分定义了监控的配置 。在 selector 中,我们使用了 matchLabels 来选择带有 app: my-app 标签的 Pod 。这意味着只有具有该标签的 Pod 会被监控 。
    • 在 endpoints 中,我们定义了监控的端点信息 。在这个示例中,我们监控了名为 "web" 的端口,并指定了抓取数据的时间间隔为 30 秒 。
    通过创建这个 ServiceMonitor 对象,Prometheus Operator 将自动发现带有标签 app: my-app 的 Pod,并在 Prometheus 配置中生成相应的监控作业(job) 。这样,Prometheus 就会定期抓取这些 Pod 的指标数据,以进行监控和告警 。
    通过使用 Prometheus Operator,您可以通过简单的声明式配置来自动管理和扩展 Prometheus 监控系统,从而使监控的部署和维护更加简单和可靠 。
    四、快速在k8s内搭建 Prometheus 全家桶最开始是Heapster+cAdvisor方式监控,这是Prometheus Operator出现之前的k8s监控方案 。后来出现了Prometheus Operator,但是目前Prometheus Operator已经不包含完整功能,完整的解决方案已经变为kube-prometheus(或kube-prometheus-stack) 。
    "kube-prometheus" 和 "kube-prometheus-stack" 本质上是同一个项目,只是在不同的时间和版本中使用了不同的名称 。"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,它提供了更多的功能、改进和修复 。
    kube-prometheus-stack GitHub地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
    1)k8s 环境安装k8s 环境安装之前写过很多文档,可以参考我以下几篇文章:
    • 【云原生】k8s 离线部署讲解和实战操作
    • 【云原生】k8s 环境快速部署(一小时以内部署完)
    2)安装 helm下载地址:https://github.com/kubernetes/helm/releases
    # 下载包wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz# 解压压缩包tar -xf helm-v3.7.1-linux-amd64.tar.gz# 制作软连接ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm# 验证helm versionhelm help3)【第一种安装方法】直接安装方式(kube-prometheus)第一种方法是下载 manifests 包里的yaml,再通过 kubectl 部署 。
    1、下载kube-prometheus下载地址:https://github.com/prometheus-operator/kube-prometheus
    git clone https://github.com/prometheus-operator/kube-prometheus.gitcd kube-prometheus【注】在 release-0.11 版本之后新增了 NetworkPolicy 默认是允许自己访问,如果了解 NetworkPolicy 可以修改一下默认的规则,可以用查看 ls manifests/*networkPolicy*,如果不修改的话则会影响到修改 NodePort 类型也无法访问,如果不会 Networkpolicy 可以直接删除就行 。


    推荐阅读