kubernetes系列之十:使用prometheus和grafana对kubernetes的部署进行监控

港控/mmm° 2022-05-25 02:23 354阅读 0赞

一、前言

不同于传统平台的监控,在容器云平台由于POD的易变动性,所以需要更加container native的监控解决方案,Prometheus就是这样一个适合kubernetes平台的容器云监控解决方案。

Prometheus已经成为CNCF的项目,能够和Kubernetes很好的集成。Prometheus和Kubernetes集成有两种方式,一种是使用prometheus-operator,另外一种是使用relabel机制。

在prometheus收集到数据之后,可以使用Grafana定义合适的数据表示方式进行展示。

转载自https://blog.csdn.net/cloudvtech

转载自https://blog.csdn.net/cloudvtech

二、使用preometheus-operator监控kubernetes

Prometheus Operator是一个处于alpha阶段的解决方案,它通过定义新的ServiceMonitor和prometheus(TPR/CRD),将Kubernetes的POD、Service资源同Prometheus服务进行动态连接,在operation级别提供基于Prometheus的Kubernetes平台上应用的监控方案。

这个方案需要部署一个ServiceMonitor资源对象,这个ServiceMonitor资源对象需要通过selector选择一个或者多个服务(当然前提是这些服务的POD已经暴露了满足prometheus接口需求的metrics数据)作为监控对象;还要部署一个prometheus资源对象,这个prometheus资源对象需要通过serviceMonitorSelector选择需要关注的ServiceMonitor资源对象;最后,这个方案还会自动部署一个prometheus server来收集和存储各个POD暴露的监控数据,并且提供一个GUI服务对数据进行进一步计算和展示。

70

从应用到监控的部署流程如下:

  • 首先在kubernetes setup的时候建立对Prometheus Operator的支持(通过部署Prometheus Operator manifest,会引入prometheus和ServiceMonitor这两个CRD,而且会启动一个带有一定系统处理权限的POD对这些新的CDR进行释义操作)
  • 部署一个application的kubernetes deployment
  • 部署一个application的kubernetes service,这个service使用selector选择各个部署的deployment作为它的endpoints
  • 部署一个kubernetes ServiceMonitor,使用和service一样的selector并且定义收集metrics的端口
  • 部署一个Prometheus CDR并且通过serviceMonitorSelector选择之前建立的ServiceMonitor作为监控目标
  • 部署一个prometheus instance的service来将prometheus服务对外暴露,便于查看UI
  • 在此之后,application的kubernetes deployment里面POD的变化将会自动被prometheus捕获并更新到metric收集

在这个使用Prometheus Operator进行监控的测试中,一开始deployment有4个replica:

70 1

之后将replica扩展到10,prometheus会自动捕获这个更新从而自动对新的POD进行监控:

70 2

转载自https://blog.csdn.net/cloudvtech

三、使用relabel机制进行监控

relabel机制通过标签机制灵活的选择监控目标比如node、POD、service、endpoints等。

具体的部署流程如下:

  • 部署一个满足prometheus运行权限要求的cluster role和service account

    • apiGroups: [“”]
      resources:
      • nodes
      • nodes/proxy
      • services
      • endpoints
      • pods
        verbs: [“get”, “list”, “watch”]
    • nonResourceURLs: [“/metrics”]
      verbs: [“get”]
  • 部署一个ConfigMap,承载prometheus的配置

  • 部署运行prometheus服务的POD
  • 部署暴露prometheus服务的kubernetes service
  • 部署带有prometheus标签的应用

prometheus通过配置文件定义它自己的监控行为,比如在如下配置中,可以对添加来prometheus标签的service的endpoints进行动态监控:

  1. scrape_configs:
  2. - job_name: 'kubernetes-apiservers'
  3. kubernetes_sd_configs:
  4. - role: endpoints
  5. # Default to scraping over https. If required, just disable this or change to
  6. # `http`.
  7. scheme: https
  8. tls_config:
  9. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  10. # Keep only the default/kubernetes service endpoints for the https port. This
  11. # will add targets for each API server which Kubernetes adds an endpoint to
  12. # the default/kubernetes service.
  13. relabel_configs:
  14. - target_label: __address__
  15. replacement: kubernetes.default.svc:443
  16. - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
  17. action: keep
  18. regex: default;kubernetes;https

而在部署application的service时候需要为这个service指定标签:

  1. kind: Service
  2. apiVersion: v1
  3. metadata:
  4. annotations:
  5. prometheus.io/port: "8082"
  6. prometheus.io/scrape: "true"
  7. namespace: prometheus
  8. name: httpd
  9. labels:
  10. tier: frontend
  11. spec:
  12. selector:
  13. app: http
  14. ports:
  15. - name: web
  16. protocol: TCP
  17. port: 80
  18. targetPort: web
  19. - name: metrics
  20. port: 8082
  21. targetPort: metrics
  22. protocol: TCP

在deployment部署之后,prometheus会自动检测到service的这些POD并进行监控:

70 3

并且可以查看简略的运行状态图表:

70 4

转载自https://blog.csdn.net/cloudvtech

四、grafana图表展示

grafana可以使用prometheus最为展示的数据源:

70 5

通过grafana可以定义复杂的监控算法生产易于人眼观察的图表:

70 6

也可以定义特定条件的告警:

70 7

这些告警可以通过如下方式定义traffic_alert_rule.yml:

70 8

转载自https://blog.csdn.net/cloudvtech

发表评论

表情:
评论列表 (有 0 条评论,354人围观)

还没有评论,来说两句吧...

相关阅读