一、概述
简介
kube-prometheus 是一整套监控解决方案,它使用 Prometheus 采集集群指标,Grafana 做展示,包含如下组件:
- The Prometheus Operator
- Highly available Prometheus
- Highly available Alertmanager
- Prometheus node-exporter
- Prometheus Adapter for Kubernetes Metrics APIs (k8s-prometheus-adapter)
- kube-state-metrics
- Grafana
二、安装
环境说明
操作系统:centos 7.6
k8s版本:1.18.1
ip地址:10.212.82.63
主机名:k8s-master
配置:2核2g
操作系统:centos 7.6
k8s版本:1.18.1
ip地址:10.212.82.65
主机名:k8s-node01
配置:2核8g
下载项目
以下步骤,请在k8s-master上执行。
安装git工具
yum install -y git
克隆kube-prometheus
git clone https://github.com/coreos/kube-prometheus
查看manifest
[root@k8s-master]# cd kube-prometheus/manifests/ [root@k8s-master manifests]# ll
输出:
总用量 1696 -rw-r--r-- 1 root root 405 12月 17 10:25 alertmanager-alertmanager.yaml -rw-r--r-- 1 root root 964 12月 17 10:17 alertmanager-secret.yaml -rw-r--r-- 1 root root 96 12月 17 10:17 alertmanager-serviceAccount.yaml -rw-r--r-- 1 root root 254 12月 17 10:17 alertmanager-serviceMonitor.yaml -rw-r--r-- 1 root root 326 12月 17 10:20 alertmanager-service.yaml -rw-r--r-- 1 root root 550 12月 17 10:17 grafana-dashboardDatasources.yaml -rw-r--r-- 1 root root 1403795 12月 17 10:17 grafana-dashboardDefinitions.yaml -rw-r--r-- 1 root root 454 12月 17 10:17 grafana-dashboardSources.yaml -rw-r--r-- 1 root root 7722 12月 17 10:17 grafana-deployment.yaml -rw-r--r-- 1 root root 86 12月 17 10:17 grafana-serviceAccount.yaml -rw-r--r-- 1 root root 208 12月 17 10:17 grafana-serviceMonitor.yaml -rw-r--r-- 1 root root 273 12月 17 10:20 grafana-service.yaml -rw-r--r-- 1 root root 376 12月 17 10:17 kube-state-metrics-clusterRoleBinding.yaml -rw-r--r-- 1 root root 1651 12月 17 10:17 kube-state-metrics-clusterRole.yaml -rw-r--r-- 1 root root 2127 12月 17 10:18 kube-state-metrics-deployment.yaml -rw-r--r-- 1 root root 192 12月 17 10:17 kube-state-metrics-serviceAccount.yaml -rw-r--r-- 1 root root 829 12月 17 10:17 kube-state-metrics-serviceMonitor.yaml -rw-r--r-- 1 root root 403 12月 17 10:17 kube-state-metrics-service.yaml -rw-r--r-- 1 root root 266 12月 17 10:17 node-exporter-clusterRoleBinding.yaml -rw-r--r-- 1 root root 283 12月 17 10:17 node-exporter-clusterRole.yaml -rw-r--r-- 1 root root 2880 12月 17 10:18 node-exporter-daemonset.yaml -rw-r--r-- 1 root root 92 12月 17 10:17 node-exporter-serviceAccount.yaml -rw-r--r-- 1 root root 669 12月 17 10:17 node-exporter-serviceMonitor.yaml -rw-r--r-- 1 root root 315 12月 17 10:17 node-exporter-service.yaml -rw-r--r-- 1 root root 292 12月 17 10:17 prometheus-adapter-apiService.yaml -rw-r--r-- 1 root root 396 12月 17 10:17 prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml -rw-r--r-- 1 root root 304 12月 17 10:17 prometheus-adapter-clusterRoleBindingDelegator.yaml -rw-r--r-- 1 root root 281 12月 17 10:17 prometheus-adapter-clusterRoleBinding.yaml -rw-r--r-- 1 root root 188 12月 17 10:17 prometheus-adapter-clusterRoleServerResources.yaml -rw-r--r-- 1 root root 219 12月 17 10:17 prometheus-adapter-clusterRole.yaml -rw-r--r-- 1 root root 1378 12月 17 10:17 prometheus-adapter-configMap.yaml -rw-r--r-- 1 root root 1333 12月 17 10:18 prometheus-adapter-deployment.yaml -rw-r--r-- 1 root root 325 12月 17 10:17 prometheus-adapter-roleBindingAuthReader.yaml -rw-r--r-- 1 root root 97 12月 17 10:17 prometheus-adapter-serviceAccount.yaml -rw-r--r-- 1 root root 408 12月 17 10:17 prometheus-adapter-serviceMonitor.yaml -rw-r--r-- 1 root root 236 12月 17 10:17 prometheus-adapter-service.yaml -rw-r--r-- 1 root root 269 12月 17 10:17 prometheus-clusterRoleBinding.yaml -rw-r--r-- 1 root root 216 12月 17 10:17 prometheus-clusterRole.yaml -rw-r--r-- 1 root root 621 12月 17 10:17 prometheus-operator-serviceMonitor.yaml -rw-r--r-- 1 root root 800 12月 17 10:25 prometheus-prometheus.yaml -rw-r--r-- 1 root root 293 12月 17 10:17 prometheus-roleBindingConfig.yaml -rw-r--r-- 1 root root 983 12月 17 10:17 prometheus-roleBindingSpecificNamespaces.yaml -rw-r--r-- 1 root root 188 12月 17 10:17 prometheus-roleConfig.yaml -rw-r--r-- 1 root root 1141 12月 17 10:17 prometheus-roleSpecificNamespaces.yaml -rw-r--r-- 1 root root 99490 12月 17 10:17 prometheus-rules.yaml -rw-r--r-- 1 root root 93 12月 17 10:17 prometheus-serviceAccount.yaml -rw-r--r-- 1 root root 6821 12月 17 10:17 prometheus-serviceMonitorApiserver.yaml -rw-r--r-- 1 root root 395 12月 17 10:17 prometheus-serviceMonitorCoreDNS.yaml -rw-r--r-- 1 root root 6310 12月 17 10:17 prometheus-serviceMonitorKubeControllerManager.yaml -rw-r--r-- 1 root root 7126 12月 17 10:17 prometheus-serviceMonitorKubelet.yaml -rw-r--r-- 1 root root 485 12月 17 10:17 prometheus-serviceMonitorKubeScheduler.yaml -rw-r--r-- 1 root root 247 12月 17 10:17 prometheus-serviceMonitor.yaml -rw-r--r-- 1 root root 315 12月 17 10:19 prometheus-service.yaml drwxr-xr-x 2 root root 4096 12月 17 10:18 setup
修改镜像源
国外镜像源某些镜像无法拉取,我们这里修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的镜像源为国内镜像源。我这里使用的是中科大的镜像源。
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' setup/prometheus-operator-deployment.yaml sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheus-prometheus.yaml sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' alertmanager-alertmanager.yaml sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' kube-state-metrics-deployment.yaml sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' node-exporter-daemonset.yaml sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheus-adapter-deployment.yaml
修改类型为NodePort
为了可以从外部访问prometheus,alertmanager,grafana,我们这里修改promethes,alertmanager,grafana的service类型为NodePort类型。
修改prometheus的service
cat prometheus-service.yaml
输出:
apiVersion: v1 kind: Service metadata: labels: prometheus: k8s name: prometheus-k8s namespace: monitoring spec: type: NodePort # 新增 ports: - name: web port: 9090 targetPort: web nodePort: 30090 # 新增 selector: app: prometheus prometheus: k8s sessionAffinity: ClientIP
修改alertmanager的service
cat alertmanager-service.yaml
输出:
apiVersion: v1 kind: Service metadata: labels: alertmanager: main name: alertmanager-main namespace: monitoring spec: type: NodePort # 新增 ports: - name: web port: 9093 targetPort: web nodePort: 30093 # 新增 selector: alertmanager: main app: alertmanager sessionAffinity: ClientIP
修改grafana的service
cat grafana-service.yaml
输出:
apiVersion: v1 kind: Service metadata: labels: app: grafana name: grafana namespace: monitoring spec: type: NodePort # 新增 ports: - name: http port: 3000 targetPort: http nodePort: 32000 # 新增 selector: app: grafana type: NodePort
修改副本数量
默认alertmanager副本数为3,prometheus副本数为2。这是官方基于高可用考虑的,由于我的服务器配置比较差,开这么副本比较浪费性能。
因此需要将副本数,统一改为1
修改alertmanager
vi alertmanager-alertmanager.yaml
将 replicas: 3,改为replicas: 1
修改prometheus
vi prometheus-prometheus.yaml
将 replicas: 2,改为replicas: 1
安装kube-prometheus并确认状态
安装CRD和prometheus-operator
kubectl apply -f setup/
下载prometheus-operator镜像需要花费几分钟,这里等待几分钟,直到prometheus-operator变成running状态
kubectl get pod -n monitoring
输出:
NAME READY STATUS RESTARTS AGE prometheus-operator-5d96f4f876-tjgmp 2/2 Running 0 35m
安装prometheus, alertmanager, grafana, kube-state-metrics, node-exporter等资源
kubectl apply -f .
下载镜像比较花费时间,可以先去泡杯咖啡,等上半小时再回来,然后查看命名空间monitoring下面的pod状态,直到monitoring命名空间下所有pod都变为running状态,就大功告成了。
kubectl get pod -n monitoring
输出:
NAME READY STATUS RESTARTS AGE alertmanager-main-0 2/2 Running 0 30m grafana-675dbb6748-sg6sk 1/1 Running 0 34m kube-state-metrics-77bb8444b8-b9svz 3/3 Running 0 34m node-exporter-pj4x9 2/2 Running 0 34m node-exporter-sw9zb 2/2 Running 0 34m prometheus-adapter-5dbb4cb95f-wwxb2 1/1 Running 0 34m prometheus-k8s-0 2/2 Running 1 34m prometheus-operator-5d96f4f876-tjgmp 2/2 Running 0 35m
三、访问页面
prometheus
浏览器打开 http://10.212.82.63:30090/targets,注意:10.212.82.63为k8s-master的ip
确保state的状态都是UP
alertmanager
浏览器打开 http://10.212.82.63:30093/
grafana
浏览器打开 http://10.212.82.63:32000/
首次登录,用户名和密码,都是admin
登录之后,会提示修改密码,可以选择跳过skip
点击左侧的设置图标,默认就已经帮你填写了prometheus地址,是不是很贴心呀!
查看dashboards,根据下图,点击Default
这里面有很多,先来看pod监控,点击 Kubernetes / Compute Resources / Node (Pods)
这里可以看到pod运行状态,比如cpu和内存。下图展示的是k8s-master主机,运行的所有pod。
回到刚才的页面,再来看看node监控,点击 Nodes
这里可以看到关于node服务器的一些基本信息,包括cpu,内存,网络等等
Default里面还有其他图表,这里就不一一展示了。
本文参考链接:
https://blog.csdn.net/guoxiaobo2010/article/details/106532357/