kube-prometheus

分享到:

kube-prometheus

[TOC]

kube-prometheus

https://github.com/coreos/kube-prometheus

安装

1kubectl create -f manifests/setup
2
3kubectl create -f manifests/
4
5# kubectl create -f manifests/setup -f manifests
6# kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

kubectl port-forward --help

访问Prometheus

kubectl --namespace monitoring port-forward --address 0.0.0.0 svc/prometheus-k8s 9090

访问Grafana

kubectl --namespace monitoring port-forward --address 0.0.0.0 svc/grafana 3000

Alert Manager

kubectl --namespace monitoring port-forward --address 0.0.0.0 svc/alertmanager-main 9093

安装custom-metrics-api

1chomd +x ./experimental/custom-metrics-api/deploy.sh
2cd ./experimental/custom-metrics-api
3./deploy.sh
4
5# 删除./teardown.sh

kubectl port-forward --address 0.0.0.0 svc/sample-app 8080 hey -c 20 -n 100000000 http://192.168.1.135:8080/metrics

Kubernetes 全栈监控

下载相关部署文件

git clone https://github.com/mgxian/k8s-monitor.git cd k8s-monitor

使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等

部署metric-server

 1# 下载
 2mkdir k8s-monitor && cd k8s-monitor
 3git clone https://github.com/kubernetes-incubator/metrics-server.git
 4
 5# 修改配置(当前版本有bug)
 6sed -ri 's@gcr.io/google_containers/metrics-server-amd64:(.*)@mirrorgooglecontainers/metrics-server-amd64:\1@g' metrics-server/deploy/1.8+/metrics-server-deployment.yaml
 7sed -ri 's@--source=kubernetes.summary_api:.*@--source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true\&kubeletPort=10250\&insecure=true@' metrics-server/deploy/1.8+/metrics-server-deployment.yaml
 8
 9# 部署
10kubectl create -f metrics-server/deploy/1.8+/
11
12# 查看状态
13kubectl get pods -n kube-system
14
15# 测试获取数据
16# 由于采集数据间隔为1分钟
17# 等待数分钟后查看数据
18NODE=$(kubectl get nodes | grep 'Ready' | head -1 | awk '{print $1}')
19METRIC_SERVER_POD=$(kubectl get pods -n kube-system | grep 'metrics-server' | awk '{print $1}')
20kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
21kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods
22kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/$NODE
23
24kubectl top node $NODE
25kubectl top pod $METRIC_SERVER_POD -n kube-system

使用prometheus-operator部署prometheus,存储监控数据

prometheus-operator简介

prometheus-operator是一个整合prometheus和operator的项目,prometheus是一个集数据收集存储,数据查询,数据图表显示于一身的开源监控组件。operator是由coreos开源一套在k8s上管理应用的软件,通过operator可以方便的实现部署,扩容,删除应用等功能。

prometheus-operator利用k8s的CustomResourceDefinitions功能实现了只需要像写原生kubectl支持的yaml文件一样,轻松收集应用数据,配置报警规则等,包含如下CRDs :

  • Prometheus 用于部署Prometheus 实例
  • ServiceMonitor 用于配置数据收集,创建之后会根据DNS自动发现并收集数据
  • PodMonitor 用于配置数据收集,创建之后会根据DNS自动发现并收集数据
  • PrometheusRule 用于配置Prometheus 规则,处理规整数据和配置报警规则
  • Alertmanager 用于部署报警实例

部署prometheus-operator

 1# 创建 namespace
 2kubectl apply -f monitoring-namespace.yaml
 3
 4# 部署
 5kubectl apply -f prometheus-operator.yaml
 6
 7# 查看
 8kubectl get pods -n monitoring
 9kubectl get svc -n monitoring
10kubectl get crd

使用kube-state-metrics收集k8s集群内资源对象数据

部署kube-state-metrics

1# 部署
2kubectl apply -f kube-state-metrics.yaml
3
4# 查看
5kubectl get pods -n monitoring
6kubectl get svc -n monitoring

使用node_exporter收集集群中各节点的数据

部署node_exporter

1# 部署
2kubectl apply -f node_exporter.yaml
3
4# 查看
5kubectl get pods -n monitoring
6kubectl get svc -n monitoring

使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据

部署prometheus

1# 部署
2kubectl apply -f prometheus.yaml
3
4# 查看
5kubectl get pods -n monitoring
6kubectl get svc -n monitoring

配置数据收集

1# 部署
2kubectl apply -f kube-servicemonitor.yaml
3
4# 查看
5kubectl get servicemonitors -n monitoring

查看prometheus中的数据

1# 查看 nodeport
2kubectl get svc -n monitoring | grep prometheus-k8s
3
4# 获取访问链接
5# 11.11.11.111 为其中一个node ip
6NODE_IP='11.11.11.112'
7PROMETHEUS_NODEPORT=$(kubectl get svc -n monitoring | grep prometheus-k8s | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
8echo "http://$NODE_IP:$PROMETHEUS_NODEPORT/"

使用alertmanager实现监控报警

部署alertmanager

 1# 部署
 2kubectl apply -f alertmanager.yaml
 3
 4# 查看
 5kubectl get pods -n monitoring
 6kubectl get svc -n monitoring
 7
 8# 查看 nodeport
 9kubectl get svc -n monitoring | grep alertmanager-main
10
11# 获取访问链接
12# 11.11.11.111 为其中一个node ip
13NODE_IP='11.11.11.112'
14ALERTMANAGER_MAIN_NODEPORT=$(kubectl get svc -n monitoring | grep alertmanager-main | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
15echo "http://$NODE_IP:$ALERTMANAGER_MAIN_NODEPORT/"

使用grafana实现数据可视化

部署grafana

 1# 部署
 2kubectl apply -f grafana.yaml
 3
 4# 查看
 5kubectl get pods -n monitoring
 6kubectl get svc -n monitoring
 7
 8# 查看 nodeport
 9kubectl get svc -n monitoring | grep grafana
10
11# 获取访问链接
12# 11.11.11.111 为其中一个node ip
13NODE_IP='11.11.11.112'
14GRAFANA_NODEPORT=$(kubectl get svc -n monitoring | grep grafana | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
15echo "http://$NODE_IP:$GRAFANA_NODEPORT/"