一、prometheus

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

1.简介

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,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上报数据
在这里插入图片描述

二、部署prometheus、grafana

prometheus网址:https://github.com/prometheus-operator/prometheus-operator
grafana官方:https://grafana.com/grafana/dashboards/
在这里插入图片描述

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

适用于:网速较好,可以正常拉取
和其他应用一样添加仓库
[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 .

在这里插入图片描述

修改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访问方式见下图
在这里插入图片描述
访问prometheus监控页面 :http://192.168.56.103:9090/
在这里插入图片描述
访问grafana监控页面 :http://192.168.56.102/
grafana部署yaml文件中默认用户/密码: admin/prom-operator
或者按照下图获取
在这里插入图片描述

在这里插入图片描述
导入模板:
在这里插入图片描述
grafana官方:https://grafana.com/grafana/dashboards/
13105id来源grafana官方,nginx号为9614
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
最终效果见下图:
在这里插入图片描述

三、部署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
在这里插入图片描述
部署在哪个namespace
添加标签才能发现服务
在这里插入图片描述
##也可以在kubeapps的chart中使用图形化部署
在这里插入图片描述

部署应用myapp,myapp通过ingress方式出来
[root@k8s2 nginx]# helm install myapp .
在这里插入图片描述
测试
在这里插入图片描述
prometheus监控指标
在这里插入图片描述

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

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

在这里插入图片描述
首先导入下载好的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 .
在这里插入图片描述在这里插入图片描述
删除原有实验的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动态弹缩
在这里插入图片描述
prometheus监控指标
在这里插入图片描述
最下面4条,表示采集到4个pod;5分钟冷却后恢复


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐