文章目录

  • 一、prometheus
  • 1.简介
  • 2.prometheus特点
  • 二、部署prometheus、grafana
  • 三、部署nginx监控实例
  • 四、部署prometheus-adapter:聚合器-聚合至k8s的APIserver中



一、prometheus

k8s三大件:监控、日志、分布式最终
Prometheus是古希腊神话里泰坦族的一名神明,名字的意思是"先见之明",素有Prometheus被宙斯惩罚,饱受肝脏日食夜长之苦的传说…

1.简介

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

k8s 监控流量 k8s监控工具_prometheus


可以部署在k8s节点(比较推荐,较简化,维护方便),也可以部署在裸金属

2.prometheus特点

1)多维度数据模型
2)灵活的查询语言(PromQL):可以对采集的metrics指标进行加法,乘法,连接等操作;
3)可以直接在本地部署,不依赖其他分布式存储;
4)通过基于HTTP的pull方式采集时序数据;
5)可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
6)可通过服务发现或者静态配置来发现目标服务对象(targets)。
7)有多种可视化图像界面,如Grafana等,进行可视化展示
8)高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。
9)做高可用,可以对数据做异地备份,联邦集群,部署多套prometheus,pushgateway上报数据

k8s 监控流量 k8s监控工具_prometheus_02

二、部署prometheus、grafana

prometheus网址:https://github.com/prometheus-operator/prometheus-operator

grafana官方:https://grafana.com/grafana/dashboards/

k8s 监控流量 k8s监控工具_k8s 监控流量_03

在harbor创建项目仓库,并自行上传对应镜像(所需镜像根据文件需要得来),加快部署速度;本实验涉及镜像如下:

k8s 监控流量 k8s监控工具_docker_04

适用于:网速较好,可以正常拉取
和其他应用一样添加仓库
[root@k8s2 helm]# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
本次实验时网速一般,所以采用解压提前下载的部署压缩包:
[root@k8s2 helm]# tar zxf kube-prometheus-stack-39.11.0.tgz    ##解压chart封装版本
[root@k8s2 helm]# cd kube-prometheus-stack/
[root@k8s2 kube-prometheus-stack]# kubectl create ns kube-prometheus-stack
[root@k8s2 kube-prometheus-stack]# helm -n kube-prometheus-stack install kube-prometheus-stack .

k8s 监控流量 k8s监控工具_kubernetes_05

修改svc访问方式为LoadBalancer:
[root@k8s2 kube-prometheus-stack]# kubectl  -n kube-prometheus-stack edit svc kube-prometheus-stack-grafana      ##前端,可视化展示
[root@k8s2 kube-prometheus-stack]# kubectl  -n kube-prometheus-stack edit  svc kube-prometheus-stack-prometheus

修改svc访问方式见下图

k8s 监控流量 k8s监控工具_docker_06


访问prometheus监控页面 :http://192.168.56.103:9090/

k8s 监控流量 k8s监控工具_docker_07


访问grafana监控页面 :http://192.168.56.102/

grafana部署yaml文件中默认用户/密码: admin/prom-operator

或者按照下图获取

k8s 监控流量 k8s监控工具_prometheus_08

k8s 监控流量 k8s监控工具_nginx_09


导入模板:

k8s 监控流量 k8s监控工具_kubernetes_10


grafana官方:https://grafana.com/grafana/dashboards/ 13105id来源grafana官方,nginx号为9614

k8s 监控流量 k8s监控工具_nginx_11


k8s 监控流量 k8s监控工具_nginx_12

k8s 监控流量 k8s监控工具_nginx_13


最终效果见下图:

k8s 监控流量 k8s监控工具_docker_14

三、部署nginx监控实例

上传 values.yaml中所需镜像
[root@k8s1 ~]# docker pull bitnami/nginx-exporter:0.11.0-debian-11-r58
[root@k8s1 ~]# docker push reg.westos.org/bitnami/nginx-exporter:0.11.0-debian-11-r58

[root@k8s2 nginx]# vim values.yaml

k8s 监控流量 k8s监控工具_nginx_15


部署在哪个namespace

添加标签才能发现服务

k8s 监控流量 k8s监控工具_k8s 监控流量_16


##也可以在kubeapps的chart中使用图形化部署

k8s 监控流量 k8s监控工具_docker_17

部署应用myapp,myapp通过ingress方式出来

[root@k8s2 nginx]# helm install myapp .

k8s 监控流量 k8s监控工具_nginx_18


测试

k8s 监控流量 k8s监控工具_k8s 监控流量_19


prometheus监控指标

k8s 监控流量 k8s监控工具_kubernetes_20

四、部署prometheus-adapter:聚合器-聚合至k8s的APIserver中

prometheus-adapter:聚合器,聚合至k8s的APIserver中,方便通过/apis/的方式访问
本实验为:安装hpa后,压力测试,监控平台的指标传递给k8s,被k8s平台整合利用
本实验由于网络原因,所以使用tar包,如果新下载文件,一般改动红框位置即可

k8s 监控流量 k8s监控工具_nginx_21


首先导入下载好的tar包,mv至[root@k8s2 helm]目录

[root@k8s2 helm]# tar zxf prometheus-adapter-3.4.0.tgz

[root@k8s2 helm]# cd prometheus-adapter

[root@k8s2 prometheus-adapter]# helm -n kube-prometheus-stack install prometheus-adapter .

k8s 监控流量 k8s监控工具_docker_22

k8s 监控流量 k8s监控工具_kubernetes_23


删除原有实验的hpa

[root@k8s2 helm]# kubectl delete hpa --all

新建并运行hpa:

[root@k8s2 helm]# kubectl get hpa -o yaml > nginx-hpa.yaml    ##删除原有实验的hpa前导出
[root@k8s2 helm]# vim nginx-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-nginx
  namespace: default
spec:
  minReplicas: 1
  maxReplicas: 10
  metrics:            ##metrics指标
  - type: Pods       ##针对pod
    pods:
      metric:
        name: nginx_http_requests     ##名字和prometheus页面内的保持一致,见本页面最后一张图
      target:
        type: AverageValue
        averageValue: 10          ##pod每秒请求数是10
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-nginx

[root@k8s2 helm]# kubectl apply -f nginx-hpa.yaml

集群外部进行压力测试:hey为外部导入的二进制命令,在/usr/local/bin/即可执行

[root@k8s1 ~]# mv hey /usr/local/bin/

[root@k8s1 ~]# chmod +x /usr/local/bin/hey

[root@k8s1 ~]# hey -n 10000 -c 5 -q 10 http://myapp.westos.org/index.html

共10000个请求,平均每个pod压50个,针对myapp.westos.org

观察hpa动态弹缩

k8s 监控流量 k8s监控工具_kubernetes_24


prometheus监控指标

k8s 监控流量 k8s监控工具_nginx_25


最下面4条,表示采集到4个pod;5分钟冷却后恢复