文章目录
一、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分钟冷却后恢复