• prometheus-operator监控Kubernetes


    Operator

    Operator是由CoreOS公司开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator基于 Kubernetes 的资源和控制器概念之上构建,但同时又包含了应用程序特定的一些专业知识,比如创建一个数据库的Operator,则必须对创建的数据库的各种运维方式非常了解,创建Operator的关键是CRD(自定义资源)的设计。

    CRD是对 Kubernetes API 的扩展,Kubernetes 中的每个资源都是一个 API 对象的集合,例如我们在YAML文件里定义的那些spec都是对 Kubernetes 中的资源对象的定义,所有的自定义资源可以跟 Kubernetes 中内建的资源一样使用 kubectl 操作。

    Operator是将运维人员对软件操作的知识给代码化,同时利用 Kubernetes 强大的抽象来管理大规模的软件应用。目前CoreOS官方提供了几种Operator的实现,其中就包括我们今天的主角:Prometheus OperatorOperator的核心实现就是基于 Kubernetes 的以下两个概念:

    • 资源:对象的状态定义
    • 控制器:观测、分析和行动,以调节资源的分布

    当然我们如果有对应的需求也完全可以自己去实现一个Operator,接下来我们就来给大家详细介绍下Prometheus-Operator的使用方法。

    介绍

    首先我们先来了解下Prometheus-Operator的架构图:

    promtheus opeator

    上图是Prometheus-Operator官方提供的架构图,其中Operator是最核心的部分,作为一个控制器,他会去创建PrometheusServiceMonitorAlertManager以及PrometheusRule4个CRD资源对象,然后会一直监控并维持这4个资源对象的状态。

    主要部分:

    • Operate: 系统主要控制器,根据自定义的资源(Custom Resource Definition,CRDs)来负责管理与部署;
    • Prometheus Server: 由Operator 依据一个自定义资源Prometheus类型中所描述的内容而部署的Prometheus Server集,可以将这个自定义资源看作是一种特别用来管理Prometheus Server的StatefulSet资源;
    • ServiceMonitor: 一个Kubernetes自定义资料,该资源描述了Prometheus Server的Target列表,Operator会监听这个资源的变化来动态更新 Prometheus Server的Scrape targets。而该资源主要透过 Selector 来依据 Labels 选取对应的 Service Endpoint,并让 Prometheus Serve 透过 Service 进行拉取 Metrics 资料;
    • Service: kubernetes 中的 Service 资源,这边主要用来对应 Kubernetes 中 Metrics Server Pod,然后提供给 ServiceMonitor 选取让 Prometheus Server 拉取资料,在 Prometheus 术语中可以称为 Target,即被 Prometheus 监测的对象,如一個部署在 Kubernetes 上的 Node Exporter Service。
    • Alertmanager: 接收从 Prometheus 来的 event,再根据定义的 notification 组决定要通知的方法。

    其中创建的prometheus这种资源对象就是作为Prometheus Server存在,而ServiceMonitor就是exporter的各种抽象,exporter前面我们已经学习了,是用来提供专门提供metrics数据接口的工具,Prometheus就是通过ServiceMonitor提供的metrics数据接口去 pull 数据的,当然alertmanager这种资源对象就是对应的AlertManager的抽象,而PrometheusRule是用来被Prometheus实例使用的报警规则文件。

    这样我们要在集群中监控什么数据,就变成了直接去操作 Kubernetes 集群的资源对象了,是不是方便很多了。上图中的 Service 和 ServiceMonitor 都是 Kubernetes 的资源,一个 ServiceMonitor 可以通过 labelSelector 的方式去匹配一类 Service,Prometheus 也可以通过 labelSelector 去匹配多个ServiceMonitor。

    安装prometheus-operator

    采用 helm chart 方式安装

    官网地址:https://github.com/coreos/prometheus-operator

    $kubectl create ns monitoring
    helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/
    helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring
    

     

    安装kube-prometheus

     官网地址:https://github.com/coreos/kube-prometheus

    helm install coreos/kube-prometheus --name kube-prometheus --namespace monitoring 
    
    # 采用域名方式访问,添加 grafana 的 ingress
    cat>grafana-ingress.yaml<<EOF
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kube-prometheus-grafana
      namespace: monitoring
    spec:
      rules:
        - host: grafana.domain.com
          http:
            paths:
              - path: /
                backend:
                  serviceName: kube-prometheus-grafana
                  servicePort: 80
    EOF
    kubectl apply -f grafana-ingress.yaml
    
    #deployments kube-prometheus-exporter-kube-state 的images无法下载,改为国内镜像
    #将 images 地址前缀为 registry.cn-hangzhou.aliyuncs.com/google_containers
    kubectl edit deploy kube-prometheus-exporter-kube-state -n monitoring
    
    #关闭 grafana 匿名身份验证
    kubectl edit deploy kube-prometheus-grafana -n monitoring
    #将env GF_AUTH_ANONYMOUS_ENABLED改到false
            - name: GF_AUTH_ANONYMOUS_ENABLED
              value: "false" 
    

     检查pod状态

    登录Grafana(admin/admin)

  • 相关阅读:
    python 爬取网络小说 清洗 并下载至txt文件
    2020.11.25收获
    2020.11.24收获
    2020.11.23收获
    2020.11.22收获
    2020.11.21收获
    Java学习11.21(使用 Servlet 完成控制)
    Java学习11.20
    Java学习11.19(学习servlet第三天)
    Java学习11.17(人口普查前端页面)
  • 原文地址:https://www.cnblogs.com/Dev0ps/p/11126942.html
Copyright © 2020-2023  润新知