Linux企業運維——Kubernetes(二十)Prometheus監控
文章目錄
-
- Linux企業運維——Kubernetes(二十)Prometheus監控
- 一、Prometheus簡介
- 二、k8s部署Prometheus
- 三、Prometheus監控nginx通路量
- 四、Prometheus實作hpa動态伸縮
一、Prometheus簡介
除了資源名額(如CPU、記憶體)以外,使用者或管理者需要了解更多的名額資料,比如Kubernetes名額、容器名額、節點資源名額以及應用程式名額等等。自定義名額API允許請求任意的名額,其名額API的實作要指定相應的後端監視系統。
Prometheus是第一個開發了相應擴充卡的監控系統。
Prometheus是一個開源的服務監控系統和時序資料庫,其提供了通用的資料模型和快捷資料采集、存儲和查詢接口。它的核心元件Prometheus伺服器定期從靜态配置的監控目标或者基于服務發現自動配置的目标中進行拉取資料,新拉取到的資料大于配置的記憶體緩存區時,資料就會持久化到儲存設備當中。
如上圖,每個被監控的主機都可以通過專用的exporter程式提供輸出監控資料的接口,并等待Prometheus伺服器周期性的進行資料抓取。如果存在告警規則,則抓取到資料之後會根據規則進行計算,滿足告警條件則會生成告警,并發送到Alertmanager完成告警的彙總和分發。當被監控的目标有主動推送資料的需求時,可以以Pushgateway元件進行接收并臨時存儲資料,然後等待Prometheus伺服器完成資料的采集。
二、k8s部署Prometheus
server2添加apphub倉庫源
查找prometheus-operator并拉取
在harbor倉庫建立一個項目名為kubeapps
真實主機将prometheus-operator包發送給server1
server1加載prometheus-operator鏡像
将prometheus-operator鏡像上傳至倉庫
server2解壓prometheus-operator包并進入目錄,編輯values.yaml
把報警、Grafana、Prometheus三個元件的Ingress打開,将所有鏡像(8個)都指向私有倉庫
248 repository: kubeapps/quay-alertmanager
991 repository: kubeapps/ghostunnel
1008 repository: kubeapps/kube-webhook-certgen
1177 repository: kubeapps/quay-prometheus-operator
1184 repository: kubeapps/quay-configmap-reload
1190 repository: kubeapps/quay-prometheus-config-reloader
1204 repository: kubeapps/k8s-gcr-hyperkube
1417 repository: kubeapps/quay-prometheus
編輯完成後去依賴性子目錄charts/中,可以看到三個元件:
-
kube-state-metrics:
Prometheus提供的多項名額資料格式與k8s資料格式不相容,還需要一個中間元件,kube-state-metrics負責從prometheus的資料格式轉換為k8s叢集可以識别的格式。
-
prometheus-node-exporter:
安裝在被監控端,負責采集多種資料。Prometheus通常去不同client端拉取資料,但有些應用資料無法拉取,這時候這些應用将資料push到Pushgateway網關,由Pushgateway網關将資料發送給server端。
-
grafana:
是用來展示名額的圖形化管理工具
進入grafana/目錄下,編輯values.yaml配置檔案,打開Ingress,配置hosts,将鏡像指向私有倉庫
52 repository: kubeapps/grafana
65 image: "kubeapps/bats"
91 repository: kubeapps/curl
209 repository: kubeapps/busybox
432 image: kubeapps/k8s-sidecar:0.1.20
進入kube-state-metrics/目錄下,編輯values.yaml配置檔案
将鏡像指向私有倉庫
進入prometheus-node-exporter/目錄下,編輯values.yaml配置檔案
将鏡像指向私有倉庫
建立prometheus-operator命名空間,将prometheus-operator安裝在prometheus-operator命名空間下
(注意主控端和叢集虛拟機時間要同步,因為Prometheus是以時間序列方式采集資料)
檢視所有pod
控制器也就緒
prometheus-operator-kube-state-metrics:相容資料
檢視prometheus-operator命名空間内的ingress也正常運作
為測試通路,為真實主機添加域名解析
通過浏覽器通路prometheus.westos.org,進入status菜單欄内的service discovery
服務正常顯示
通路grafana.westos.org,輸入配置檔案中設定好的使用者名和密碼
在設定中,資料源預設為prometheus
顯示資料源正常工作,點選測試
找到prometheus将其添加到監控面闆
可以看到監控頁面正常運作
三、Prometheus監控nginx通路量
通過圖形化界面直接安裝nginx
應用名稱設定為nginx,使用9.4.1版本,服務類型為LoadBalancer
副本數量選擇1個,打開Prometheus監控選項,Prometheus專門監控nginx的agent插件:nginx-exporter
修改yaml配置檔案,更改鏡像倉庫位址
設定鏡像倉庫和标簽
下圖是我們剛指定的鏡像
指定服務部署在prometheus-operator命名空間内
整體配置如下圖所示
配置完成後等待鏡像部署完成
通過浏覽器通路上圖nginx應用的URL,可以看到正常通路
在指令行界面檢視pod資訊,可以看到剛建立的nginx及其服務和外部通路位址
為nginx添加
release=prometheus-operator
這個标簽
現在在圖形管理界面可以看到nginx服務
點選Graph,将通路流量統計圖添加進統計頁
可以看到nginx通路流量效果圖
四、Prometheus實作hpa動态伸縮
server2檢視pod資訊可以看到prometheus-operator-kube-state-metrics
執行
kubectl api-versions
檢視api group ,metrics為v1beta1版本
查找prometheus-adapter插件,拉取到本地并解壓,編輯values.yaml配置檔案
配置鏡像位址和prometheus的服務位址
配置檔案中的prometheus的服務位址可以通過下圖指令檢視
可以拉起一個新的容器并進入,測試是否能通路到上面prometheus的服務位址
在prometheus-operator命名空間下安裝prometheus-adapter,複制下圖指令
檢視prometheus-operator命名空間下的pod資訊,都正常運作
可以檢視到剛才複制的指令中的api
執行剛才複制的指令
再次執行剛才複制的指令,這次指定命名空間、pod和監控名額
指定的監控名額名字就是下圖紅框部分
也可以編寫python腳本運作指令進行參數配置
編輯hpa-nginx.yaml配置檔案并應用
[[email protected] helm]# cat hpa-nginx.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-example
spec:
maxReplicas: 10 #最多伸縮到10個副本
minReplicas: 1 #最少伸縮為1個副本
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
metrics:
- type: Pods
pods:
metric:
name: nginx_http_requests #指定監控nginx通路流量
target:
type: AverageValue #伸縮依據是均值是否在10
averageValue: 10
檢視hpa詳細資訊,HPA可以根據pods的nginx通路流量度量成功計算副本計數
hey用來進行壓力測試,真實主機把hey複制到/usr/local/bin,賦予可執行權限
指令行輸入hey可以看到參數用法
真實主機運作hey進行通路測試,參數設定總共通路一萬次,每秒通路五次,5個線程并發
kubectl get hpa hpa-example -w
檢視hpa的動态狀态變化,可以随着通路壓力的增大hpa開始生效并增加副本數量,逐漸擴容到3個
可以看到圖形化展示