一、概述
簡介
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/
