目錄
一、描述
二、監(jiān)控流程
三、Kubernetes監(jiān)控指標
四、使用Prometheus監(jiān)控k8s
一、描述
Cadvisor + node-exporter + prometheus + grafana是一套非常流行的Kubernetes監(jiān)控方案。它們的功能如下:
- Cadvisor:容器資源監(jiān)控工具,可以實時監(jiān)控CPU、內(nèi)存、存儲、網(wǎng)絡等容器指標,并暴露Metrics接口。
- node-exporter:節(jié)點級指標導出工具,可以監(jiān)控節(jié)點的CPU、內(nèi)存、磁盤、網(wǎng)絡等指標,并暴露Metrics接口。
- Prometheus:時間序列數(shù)據(jù)庫和監(jiān)控報警工具,可以抓取Cadvisor和node-exporter暴露的Metrics接口,存儲時序數(shù)據(jù),并提供PromQL查詢語言進行監(jiān)控分析和報警。
- Grafana:圖表和Dashboard工具,可以查詢Prometheus中的數(shù)據(jù),并通過圖表的方式直觀展示Kubernetes集群的運行指標和狀態(tài)。
二、監(jiān)控流程
1. 在Kubernetes集群的每個節(jié)點安裝Cadvisor和node-exporter,用于采集容器和節(jié)點級指標數(shù)據(jù)。
2. 部署Prometheus,配置抓取Cadvisor和node-exporter的Metrics接口,存儲 containers 和 nodes 的時序數(shù)據(jù)。
3. 使用Grafana構(gòu)建監(jiān)控儀表盤,選擇Prometheus作為數(shù)據(jù)源,編寫PromQL查詢語句,展示K8S集群的CPU使用率、內(nèi)存使用率、網(wǎng)絡流量等監(jiān)控指標。
4. 根據(jù)監(jiān)控結(jié)果,可以設置Prometheus的報警規(guī)則,當監(jiān)控指標超過閾值時發(fā)送報警信息。這套方案能夠全面監(jiān)控Kubernetes集群的容器和節(jié)點,通過Metrics指標和儀表盤直觀反映集群狀態(tài),并實現(xiàn)自動報警,非常適合K8S環(huán)境下微服務應用的穩(wěn)定運行。
具體實現(xiàn)方案如下:
- Cadvisor:在集群中每個節(jié)點作為DaemonSet部署cadvisor,采集容器Metrics。
- node-exporter:在每個節(jié)點也作為DaemonSet運行,采集節(jié)點Metrics。
- Prometheus:部署Prometheus Operator實現(xiàn),作為Deployment運行,用于抓取Metrics和報警。
- Grafana:部署Grafana Operator實現(xiàn),用于儀表盤展示。
三、Kubernetes監(jiān)控指標
K8S本身的監(jiān)控指標
1. CPU利用率:包括節(jié)點CPU利用率、Pod CPU利用率、容器CPU利用率等,用于監(jiān)控CPU資源使用情況。
2. 內(nèi)存利用率:包括節(jié)點內(nèi)存利用率、Pod內(nèi)存利用率、容器內(nèi)存利用率等,用于監(jiān)控內(nèi)存資源使用情況。
3. 網(wǎng)絡流量:節(jié)點網(wǎng)絡流量、Pod網(wǎng)絡流量、容器網(wǎng)絡流量,用于監(jiān)控網(wǎng)絡收發(fā)包大小和帶寬利用率。
4. 磁盤使用率:節(jié)點磁盤使用率,用于監(jiān)控節(jié)點磁盤空間使用情況。
5. Pod狀態(tài):Pod的Running、Waiting、Succeeded、Failed等狀態(tài)數(shù)量,用于監(jiān)控Pod運行狀態(tài)。
6. 節(jié)點狀態(tài):節(jié)點的Ready、NotReady和Unreachable狀態(tài)數(shù)量,用于監(jiān)控節(jié)點運行狀態(tài)。
7. 容器重啟次數(shù):單個容器或Pod內(nèi)所有容器的重啟次數(shù),用于監(jiān)控容器穩(wěn)定性。
8. API服務指標:Kubernetes API Server的請求LATENCY、請求QPS、錯誤碼數(shù)量等,用于監(jiān)控API Server性能。
9. 集群組件指標:etcd、kubelet、kube-proxy等組件的運行指標,用于監(jiān)控組件運行狀態(tài)。這些都是Kubernetes集群運行狀態(tài)的關鍵指標,通過Prometheus等工具可以進行收集和存儲,然后在Grafana中設計相應的Dashboard進行可視化展示。當這些指標超出正常范圍時,也可以根據(jù)閾值設置報警,保證Kubernetes集群和服務的穩(wěn)定運行。
例如:
- CPU利用率超過80%報警
- 內(nèi)存利用率超過90%報警
- 網(wǎng)絡流量/磁盤空間突增報警
- Pod/節(jié)點 NotReady狀態(tài)超過10%報警?
- API Server請求LATENCY超過200ms報警
- etcd節(jié)點Down報警等等。
這些報警規(guī)則的設置需要根據(jù)集群大小和服務負載進行評估。
四、使用Prometheus監(jiān)控k8s
部署前準備
下載prometheus、grafana、node-exporter
GitHub - redhatxl/k8s-prometheus-grafana: k8s monitor of prometheus-grafanak8s monitor of prometheus-grafana. Contribute to redhatxl/k8s-prometheus-grafana development by creating an account on GitHub.https://github.com/redhatxl/k8s-prometheus-grafana.git
?
?這里我下載下來上傳了該附件,可自行下載
https://download.csdn.net/download/qq_40322236/87918488
拉去鏡像:
[root@master ~]# docker pull prom/node-exporter?
[root@master ~]# docker pull prom/prometheus:v2.0.0
[root@master ~]# docker pull grafana/grafana:6.1.4
解壓zip得到如下
[root@master prometheus]# ls
k8s-prometheus-grafana-master k8s-prometheus-grafana-master.zip
[root@master prometheus]# cd k8s-prometheus-grafana-master/
[root@master k8s-prometheus-grafana-master]# ls
grafana node-exporter.yaml prometheus README.md
[root@master k8s-prometheus-grafana-master]# ll
總用量 8
drwxr-xr-x 2 root root 81 1月 7 2019 grafana
-rw-r--r-- 1 root root 714 6月 13 22:29 node-exporter.yaml
drwxr-xr-x 2 root root 106 1月 7 2019 prometheus
-rw-r--r-- 1 root root 117 6月 13 22:29 README.md
先安裝node-exporter.yaml
[root@master k8s-prometheus-grafana-master]# kubectl apply -f node-exporter.yaml
daemonset.apps/node-exporter created
service/node-exporter created
[root@master k8s-prometheus-grafana-master]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-9d85f5447-7nhgv 1/1 Running 5 22d
kube-system coredns-9d85f5447-sfr9j 1/1 Running 5 22d
kube-system etcd-master 1/1 Running 6 22d
kube-system kube-apiserver-master 1/1 Running 6 22d
kube-system kube-controller-manager-master 1/1 Running 7 22d
kube-system kube-flannel-ds-77w47 1/1 Running 4 22d
kube-system kube-flannel-ds-trrcv 1/1 Running 6 22d
kube-system kube-flannel-ds-xcqgs 1/1 Running 4 22d
kube-system kube-proxy-674k4 1/1 Running 4 22d
kube-system kube-proxy-7l9bk 1/1 Running 6 22d
kube-system kube-proxy-kd449 1/1 Running 4 22d
kube-system kube-scheduler-master 1/1 Running 7 22d
kube-system metrics-server-59d984f5b7-2nt8z 2/2 Running 8 22d
kube-system node-exporter-5swxx 1/1 Running 1 3d
kube-system node-exporter-pbx6c 1/1 Running 1 3d
[root@master k8s-prometheus-grafana-master]# kubectl get daemonset -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system kube-flannel-ds 3 3 3 3 3 <none> 22d
kube-system kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 22d
kube-system node-exporter 2 2 2 2 2 <none> 3d
[root@master k8s-prometheus-grafana-master]# kubectl get service -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22d 3d
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 22d
kube-system node-exporter NodePort 10.102.164.149 <none> 9100:31672/TCP 3d 3d
部署prometheus
[root@master k8s-prometheus-grafana-master]# cd prometheus/
[root@master prometheus]# ls
configmap.yaml prometheus.deploy.yml prometheus.svc.yml rbac-setup.yaml
[root@master prometheus]# kubectl apply -f rbac-setup.yaml
clusterrole.rbac.authorization.k8s.io/prometheus configured
serviceaccount/prometheus configured
clusterrolebinding.rbac.authorization.k8s.io/prometheus configured
[root@master prometheus]# kubectl apply -f configmap.yaml
configmap/prometheus-config configured
[root@master prometheus]# kubectl apply -f prometheus.deploy.yml
deployment.apps/prometheus created
[root@master prometheus]# kubectl apply -f prometheus.svc.yml
service/prometheus created
部署grafana
[root@master prometheus]# cd ../grafana/
[root@master grafana]# ls
grafana-deploy.yaml grafana-ing.yaml grafana-svc.yaml
[root@master grafana]# kubectl apply -f grafana-deploy.yaml
deployment.apps/grafana-core created
[root@master grafana]# kubectl apply -f grafana-svc.yaml
service/grafana created
[root@master grafana]# kubectl apply -f grafana-ing.yaml
ingress.extensions/grafana created
?查看前面安裝的pod和service?
訪問http://192.168.159.180:31672/metrics,這是node-exporter采集的數(shù)據(jù)
?
?訪問prometheus地址http://192.168.159.180:30003/graph
訪問grafana的地址http://192.168.159.180:32418/login,默認用戶密碼都是admin,登錄后會默認讓你修改密碼
?
添加grafana?數(shù)據(jù)源,選擇prometheus?
?
?
?
?
把K8S的Dashboard的模板導入
導入315模板等待一會,或者可以下載好json文件,然后復制到下面的文本框中,點擊load
最后就部署完成啦文章來源:http://www.zghlxwxcb.cn/news/detail-784880.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-784880.html
到了這里,關于Prometheus監(jiān)控K8S的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!