目录
- prometheus监控
- HPA资源自动扩容
prometheus监控
特别快,适合监控容器
Prometheus server 历史数据存储
用pull形式收集数据
metrics监控指标
exporters 就像是zabbix的客户端
promql 普罗米修斯自己的查询语言
web UI 自己的webUI很简陋
service discovery 自动发现,容器的添加,发现哪些pod有变化,就不用写一个pod,写一个监控项
aletmanager报警组件
1.官网地址
https://github.com/prometheus/prometheus
2.监控k8s需要的组件
使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等
使用prometheus-operator部署prometheus,存储监控数据
使用kube-state-metrics收集k8s集群内资源对象数据
使用node_exporter收集集群中各节点的数据
使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
使用alertmanager实现监控报警
使用grafana实现数据可视化
metrics-server 主要关注的是资源度量 API 的实现,比如 CPU、文件描述符、内存、请求延时等指标。
kube-state-metrics 主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等
3.安装部署prometheus
###导入镜像
docker load < prom-prometheusv2_2_1.tar
###创建命名空间
kubectl create namespace prom
###创建资源
cd prometheus
kubectl create -f ./
###检查资源
kubectl -n prom get all -o wide
web浏览器查看
http://10.0.0.11:30090/targets
4.安装部署metrics-server
###导入镜像
docker load < k8s-gcr-io-addon-resizer1_8_6.tar
docker load < k8s-gcr-io-metrics-server-amd64v0-3-6.tar
###创建资源
kubectl create -f ./
###检查
kubectl top node
kubectl top pod
5.安装node-exporterv
###导入镜像
docker load < prom-node-exporterv0_15_2.tar
###创建资源
kubectl create -f ./
###查看资源
kubectl -n prom get pod -o wide
kubectl -n prom get svc
###浏览器查看
http://10.0.0.12:9100/metrics
http://10.0.0.13:9100/metrics
5.安装kube-state-metrics
###导入镜像
docker load < gcr-io-google_containers-kube-state-metrics-amd64v1-3-1.tar
###创建资源
kubectl create -f ./
###查看
kubectl -n prom get pod
kubectl -n prom get svc
curl 10.1.232.109:8080/metrics
6.安装grafna和k8s-prometheus-adapter
###导入镜像
docker load < directxman12-k8s-prometheus-adapter-amd64-latest.tar
docker load < k8s-gcr-io-heapster-grafana-amd64v5_0_4.tar
###修改grafana资源配置清单
1 apiVersion: apps/v1
2 kind: Deployment
3 metadata:
4 name: monitoring-grafana
5 namespace: prom
6 spec:
7 selector:
8 matchLabels:
9 k8s-app: grafana
10 replicas: 1
11 template:
###创建资源
cd k8s-prometheus-adapter
kubectl create -f ./
###检查创建的资源
kubectl -n prom get pod -o wide
kubectl -n prom get svc
###浏览器查看
http://10.0.0.11:32725
###导入dashboard
https://grafana.com/grafana/dashboards/10000
x.prometheus查询语句
sum by (name) (rate (container_cpu_usage_seconds_total{image!=""}[1m]))
container_cpu_usage_seconds_total{name =~ "^k8s_POD.*",namespace="default"}
正则表达式:
=~ 模糊匹配
== 完全匹配
!= 不匹配
!~ 不匹配正则表达式
查询语句:
sum (container_memory_working_set_bytes{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~".*",namespace="default"}) by (pod)
翻译:
sum (监控指标{字段1!="字段1配置的值",字段2!="字段2配置的值"}) by (分组字段名)
添加namespace标签后grafana修改图标
sum (container_memory_working_set_bytes{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~"^$Node$",namespace=~"^$Namespace$"}) by (pod)
HPA资源自动扩容
https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
1.生成测试镜像
###创建测试首页
cat index.php
<?php
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "OK!";
?>
###创建dockerfile
cat dockerfile
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
###生成镜像
docker build -t php:v1 .
2.创建php-deployment资源
cat >php-dp.yaml<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: php-apache
name: php-apache
namespace: default
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
cpu: 200m
EOF
3.创建hpa资源
cat >php-hpa.yaml<<EOF
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
EOF
4.查看
kubectl get svc
kubectl get pod
kubectl get hpa
5.压测
while true; do wget -q -O- http://10.1.28.100; done
6.观察hpa数据
kubectl get hpa -w
kubectl get pod -w
7.如果觉得操作麻烦,可以使用下面的命令,效果一样
###创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
###创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
###压测
while true; do wget -q -O- http://10.1.28.100; done
01grafana添加数据源
02prometheus查询语句
03grafana修改后的图
04grafana添加namespace标签
05grafana添加namespace标签2
06最终效果图
07完整大图
dashboard图
dashboard图2
``