• 如何使用helm优雅安装prometheus-operator,并监控k8s集群微服务


    前言:随着云原生概念盛行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus 作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态。但是它不支持分布式,不支持数据导入、导出,不支持通过 API 修改监控目标和报警规则,所以在使用它时,通常需要写脚本和代码来简化操作。Prometheus Operator 为监控 Kubernetes service、deployment 和 Prometheus 实例的管理提供了简单的定义,简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群。

    一、什么是Prometheus-Operator

    Prometheus-Operator是一套为了方便整合prometheus和kubernetes的软件,使用Prometheus-Operator可以非常简单的在kubernetes集群中部署Prometheus服务,提供对kubernetes集群各个组件和服务的监控,并且通过Prometheus-Operator用户能够使用简单的声明性配置来配置和管理Prometheus实例,这些配置将响应、创建、配置和管理Prometheus监控实例

    Operator的核心思想是将Prometheus的部署与它监控的对象的配置分离,做到部署与监控对象的配置分离之后,就可以轻松实现动态配置。使用Operator部署了Prometheus之后就可以不用再管Prometheus Server了,以后如果要添加监控对象或者添加告警规则,只需要编写对应的ServiceMonitor和Prometheus资源就可以,不用再重启Prometheus服务,Operator会动态的观察配置的改动,并将其生成为对应的prometheus配置文件其中Operator可以部署、管理Prometheus Service

    二、Prometheus-Operator的架构

    image
    上图是Prometheus-Operator官方提供的架构图,从下向上看,Operator可以部署并且管理Prometheus Server,并且Operator可以Watch Prometheus,那么这个Watch是什么意思呢?

    • Operator : Operator是整个系统的控制中心,会以Deployment的方式运行于Kubernetes集群上,并根据自定义资源(Custom Resources Definition)CRD 来负责管理与部署Prometheus,Operator会通过监听这些CRD的变化来做出相对应的处理。

    • Prometheus : Operator会监听集群内的Prometheus CRD(Prometheus 也是一种CRD)来创建一个合适的statefulset在monitoring(.metadata.namespace指定)命名空间,并且挂载了一个名为prometheus-k8s的Secret为Volume到/etc/prometheus/config目录,Secret的data包含了以下内容:

      • configmaps.json指定了rule-files在configmap的名字
      • prometheus.yaml为主配置文件
    • ServiceMonitor : ServiceMonitor就是一种kubernetes自定义资源(CRD),Operator会通过监听ServiceMonitor的变化来动态生成Prometheus的配置文件中的Scrape targets,并让这些配置实时生效,operator通过将生成的job更新到上面的prometheus-k8s这个Secret的Data的prometheus.yaml字段里,然后prometheus这个pod里的sidecar容器prometheus-config-reloader当检测到挂载路径的文件发生改变后自动去执行HTTP Post请求到/api/-reload-路径去reload配置。该自定义资源(CRD)通过labels选取对应的Service,并让prometheus server通过选取的Service拉取对应的监控信息(metric)

    • Service :Service其实就是指kubernetes的service资源,这里特指Prometheus exporter的service,比如部署在kubernetes上的mysql-exporter的service

    总结:想象一下,我们以传统的方式去监控一个mysql服务,首先需要安装mysql-exporter,获取mysql metrics,并且暴露一个端口,等待prometheus服务来拉取监控信息,然后去Prometheus Server的prometheus.yaml文件中在scarpe_config中添加mysql-exporter的job,配置mysql-exporter的地址和端口等信息,再然后,需要重启Prometheus服务,就完成添加一个mysql监控的任务

    现在我们以Prometheus-Operator的方式来部署Prometheus,当我们需要添加一个mysql监控我们会怎么做,首先第一步和传统方式一样,部署一个mysql-exporter来获取mysql监控项,然后编写一个ServiceMonitor通过labelSelector选择刚才部署的mysql-exporter,由于Operator在部署Prometheus的时候默认指定了Prometheus选择label为:prometheus: kube-prometheus的ServiceMonitor,所以只需要在ServiceMonitor上打上prometheus: kube-prometheus标签就可以被Prometheus选择了,完成以上两步就完成了对mysql的监控,不需要改Prometheus配置文件,也不需要重启Prometheus服务,是不是很方便,Operator观察到ServiceMonitor发生变化,会动态生成Prometheus配置文件,并保证配置文件实时生效

    三、如何安装Pometheus-Oerator

    本地实验环境是在虚拟机中的minikube单节点中进行的

    1.下载helm压缩包并解压缩

    image

    2.添加helm repo源到本地,并updte更新repo

    image
    image
    image
    image

    3.helm search命令可以列出prometheus的相关chart包及其版本号

    image
    image
    image
    image

    4.monitoring命名空间,并通过helm install安装一个名为prometheus-operator的chart包

    image
    使用 helm 安装后,会在 Kubernetes 集群中创建、配置和管理 Prometheus 集群,chart 中包含多种组件:

    • prometheus-operator
    • prometheus
    • alertmanager
    • node-exporter
    • kube-state-metrics
    • grafana

    5.kubectl get po -n monitoring查看promrthues-operator相关组件pod已经顺利启动,说明成功部署

    image

    promethues-operator部署好后下面讲讲如何实现用其来监控k8s集群当中的微服务

    四、如何通过prometheus-operator来监控k8s集群当中的微服务

    在这之前我在minikube当中以及部署好一套微服务:
    image

    1.通过miniube service list可以查看到gateway已经暴露了31080端口,可以通过浏览器查看一下

    image
    image
    上文中已经讲解了prometheus-operator是通过将ServiceMonitor中的lable将k8s中的service绑定从而实现对K8s中的服务进行监控的
    具体关系如下所示:
    image

    2.编写或更新好ServiceMonitor配置文件后只需要通过helm upgrade命令来更新prometheus-operator的chart包即可完成重新部署

    如图所示更新部署成功:
    image

    3.通过Kubectl get servicemonitors -n monitoring来查看下已经部署好的ServiceMonitor

    image

    4.然后运行kubctl port-forward来将prometheus-operator端口临时暴露并监听本机所有地址

    image
    注:用虚拟机部署的同学,这里注意一定要跟上--address 0.0.0.0这个选项,否则服务器只会监听本地回环地址的9090端口,这样通过主机就无法通过ip:port访问到了

    5.通过主机浏览器输入ip:port来访问prometheus,如果看到这个界面说明大功告成!

  • 相关阅读:
    华为云云耀云服务器L实例评测|Elasticsearch的可视化Kibana工具安装 & IK分词器的安装和使用
    Android Apk 编译打包流程,了解一下~
    UDP协议之《传输队列长度sk_wmem_alloc统计》
    目标检测——day45 基于水平边界框上滑动顶点的多朝向目标检测
    KingbaseES 数据库逻辑优化规则
    SAP S4客户与供应商如何管理 事务代码 BP
    HTML---基础入门知识详解
    YOLOv8改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进
    22-07-04 西安 尚好房-项目经验总结(01)
    嵌入式分享合集28
  • 原文地址:https://www.cnblogs.com/zhangpeiyao/p/16529935.html