Kubernetes(k8s)部署Promehteus

大數據老司機 發佈 2022-07-08T20:33:55.392963+00:00

一、概述在1.8版本以後heapster由metrics-server替代;從k8s的v1.

一、概述

在1.8版本以後heapster由metrics-server替代;從k8s的v1.11版本開始已經全面轉向以Prometheus為核心的新監控體系架構;kube-prometheus 中包含了 prometheus 監控所用到的所有組件,當然也包含 prometheus-operator。

Helm中心倉庫的PrometheusOperator Chart,在2020年9月已經不維護了,新的Chart在Prometheus Community的Repo中,叫 kube-prometheus-stack,使用時需要先添加該Repo。

heapster-》metrics-Server-》prometheus-operator -》kube-prometheus-》kube-prometheus-stack

  • prometheus-operator GitHub地址
  • kube-prometheus gitHub地址
  • kube-prometheus-stack GitHub地址

1)metrics-server簡介

metrics-server 通過kubelet(cAdvisor)獲取監控數據,主要作用是為kube-scheduler,HPA等k8s核心組件,以及kubectl top命令和Dashboard等UI組件提供數據來源。

【注意】如果要部署prometheus,就不用部署了metrics-server了,否則衝突,推薦只部署prometheus,所以這裡也只講prometheus的部署。

2)Prometheus簡介

Prometheus是一個開源監控系統,它前身是SoundCloud的警告工具包。從2012年開始,許多公司和組織開始使用Prometheus。

Prometheus的主要特徵有:

  • 多維度數據模型
  • 靈活的查詢語言
  • 不依賴分布式存儲,單個伺服器節點是自主的
  • 以HTTP方式,通過pull模型拉去時間序列數據
  • 也通過中間網關支持push模型
  • 通過服務發現或者靜態配置,來發現目標服務對象
  • 支持多種多樣的圖表和界面展示,grafana也支持它

組件
Prometheus生態包括了很多組件,它們中的一些是可選的:

  • 主服務Prometheus Server負責抓取和存儲時間序列數據
  • 客戶庫負責檢測應用程式代碼
  • 支持短生命周期的PUSH網關
  • 基於Rails/SQL儀錶盤構建器的GUI
  • 多種導出工具,可以支持Prometheus存儲數據轉化為HAProxy、StatsD、Graphite等工具所需要的數據存儲格式
  • 警告管理器
  • 命令行查詢工具
  • 其他各種支撐工具

3)Prometheus Operator

Prometheus Operator的本職就是一組用戶自定義的CRD資源以及Controller的實現,Prometheus Operator負責監聽這些自定義資源的變化,並且根據這些資源的定義自動化的完成如Prometheus Server自身以及配置的自動化管理工作。以下是Prometheus Operator的架構圖:

4)metrics-server&Promehteus對比&特性

  • 使用metric-server收集數據給k8s集群內使用,如kubectl,hpa,scheduler等
  • 使用prometheus-operator部署prometheus,存儲監控數據
  • 使用kube-state-metrics收集k8s集群內資源對象數據
  • 使用node_exporter收集集群中各節點的數據
  • 使用prometheus收集apiserver,scheduler,controller-manager,kubelet組件數據
  • 使用alertmanager實現監控報警
  • 使用grafana實現數據可視化

5)Prometheus Operator VS kube-prometheus

最開始是Heapster+cAdvisor方式監控,這是Prometheus Operator出現之前的k8s監控方案。後來出現了Prometheus Operator,但是目前Prometheus Operator已經不包含完整功能,完整的解決方案已經變為kube-prometheus。

  • Prometheus Operator 是CoreOS的一個開源項目,用來增強Prometheus在Kubernetes中的管理運維能力。利用kubernetes的自定義資源定義 (Custom Resource Definition)的特性,實現聲明式管理運維Prometheus監控告警系統。
  • kube-prometheus 為基於 Prometheus 和 Prometheus Operator 的完整集群監控堆棧提供示例配置。這包括部署多個 Prometheus 和 Alertmanager 實例、指標導出器(例如用於收集節點指標的 node_exporter)、抓取將 Prometheus 連結到各種指標端點的目標配置,以及用於通知集群中潛在問題的示例警報規則。
  • 兩個項目的關係:前者只包含了Prometheus Operator,後者既包含了Operator,又包含了Prometheus相關組件的部署及常用的Prometheus自定義監控,具體包含下面的組件The Prometheus Operator:創建CRD自定義的資源對象Highly available Prometheus:創建高可用的PrometheusHighly available Alertmanager:創建高可用的告警組件Prometheus node-exporter:創建主機的監控組件Prometheus Adapter for Kubernetes Metrics APIs:創建自定義監控的指標工具(例如可以通過nginx的request來進行應用的自動伸縮)kube-state-metrics:監控k8s相關資源對象的狀態指標Grafana:進行圖像展示

二、安裝kube-prometheus

前面我們學習了Heapster+cAdvisor方式監控,這是Prometheus Operator出現之前的k8s監控方案。後來出現了Prometheus Operator,但是目前Prometheus Operator已經不包含完整功能,完整的解決方案已經變為kube-prometheus。項目地址為:https://github.com/coreos/kube-prometheus。

1)安裝git

$ yum install -y git

2)下載kube-prometheus

# 下載
$ git clone https://github.com/prometheus-operator/kube-prometheus.git
$ cd kube-prometheus/manifests
# yaml文件比較多,下面進行歸檔
$ mkdir -p serviceMonitor prometheus adapter node-exporter blackbox kube-state-metrics grafana alertmanager operator other/{nfs-storage,ingress}
$ mv alertmanager-* alertmanager/ && mv blackbox-exporter-* blackbox/ &&  mv grafana-* grafana/ && mv kube-state-metrics-* kube-state-metrics/ && mv node-exporter-*  node-exporter/ && mv prometheus-adapter-* adapter/ && mv prometheus-* prometheus/ && mv kubernetes-serviceMonitor* serviceMonitor/

2)修改鏡像源

國外鏡像源某些鏡像無法拉取,我們這裡修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的鏡像源為國內鏡像源。我這裡使用的是中科大的鏡像源。

# 查找
$ grep -rn 'quay.io' *
# 批量替換
$ sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' `grep "quay.io" -rl *`
# 再查找
$ grep -rn 'quay.io' *
$ grep -rn 'image: ' *

3)修改類型為NodePort

為了可以從外部訪問prometheus,alertmanager,grafana,我們這裡修改promethes,alertmanager,grafana的service類型為NodePort類型。

1、修改prometheus的service

# 設置對外訪問埠:30080
$ cat prometheus-service.yaml

2、修改grafana的service

# 設置對外訪問埠:30081
$ cat grafana-service.yaml

3、修改alertmanager的service

# 設置對外訪問埠:30082
$ cat alertmanager-service.yaml

4、安裝CRD和prometheus-operator

【溫馨提示】CustomResourceDefinition:自定義資源

$ kubectl apply -f setup/

下載prometheus-operator鏡像需要花費幾分鐘,這裡等待幾分鐘,直到prometheus-operator變成running狀態

$ kubectl get pod -n monitoring

5、安裝prometheus, alertmanager, grafana, kube-state-metrics, node-exporter等資源

$ kubectl apply -f .

稍等一段時間再查看,查看命名空間monitoring下面的pod狀態,直到monitoring命名空間下所有pod都變為running狀態,就大功告成了。

$ kubectl get pod -n monitoring

如果上面下載鏡像失敗,可以使用以下地址下載,當然也可以去hub.docker.com下載。

連結:https://pan.baidu.com/s/1JUx_m-JAJ8gUeJE-Gmhzig
提取碼:8888

6、工作流程

Prometheus Server定期從配置好的Exporters/Jobs中拉metrics,或者來著pushgateway發過來的metrics,或者其它的metrics,收集完後運行定義好的alert.rules,記錄時間序列或者向Alertmanager推送警報。

7、組件說明

  • node_exporter:用來監控運算節點上的宿主機的資源信息,需要部署到所有運算節點
  • kube-state-metric:prometheus採集k8s資源數據的exporter,能夠採集絕大多數k8s內置資源的相關數據,例如pod、deploy、service等等。同時它也提供自己的數據,主要是資源採集個數和採集發生的異常次數統計
  • blackbox_exporter:監控業務容器存活性
  • prometheus-adapter:由於本身prometheus屬於第三方的 解決方案,原生的k8s系統並不能對Prometheus的自定義指標進行解析,就需要藉助於k8s-prometheus-adapter將這些指標數據查詢接口轉換為標準的Kubernetes自定義指標。

8、驗證

$ kubectl get svc -n monitoring

瀏覽器訪問
prometheus:http://192.168.0.113:30080/

grafana:http://192.168.0.113:30081/login
默認帳號/密碼:admin/admin

alertmanager:http://192.168.0.113:30082/

9、Grafana添加數據源

1、修改prometheus地址

10、導入DashBoards

dashboards地址:https://grafana.com/grafana/dashboards/
1)從官網下載模板,導入模板

2)kubernetes模板導入(k8s模板)

三、使用Helm3安裝kube-prometheus-stack

# 添加repo
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm search repo prometheus-community/prometheus

1)下載kube-prometheus-stack包

# 拉包
$ helm pull prometheus-community/kube-prometheus-stack
# 解包
$ tar -xf kube-prometheus-stack-19.2.3.tgz

查看所需要的鏡像,最好提前下載鏡像,要不然很大可能會因為下載鏡像失敗而安裝失敗。

$ grep -A3 'image:' kube-prometheus-stack/values.yaml

這裡提供鏡像下載地址,當前也可以去hub.docker.com網站上下載,或者其它地方下載,如果下載不到對應的版本號,可以下載最新的,然後tag一個就行了。

連結:https://pan.baidu.com/s/1NDHckhvVgDngq98BXlHLFw
提取碼:8888

2)導入鏡像(所有節點都執行)

$ docker image load -i k8s.gcr.io-ingress-nginx-kube-webhook-certgen-v1.0.tar
$ docker image load -i quay.io-prometheus-alertmanager-v0.22.2.tar
$ docker image load -i quay.io-prometheus-operator-prometheus-operator-v0.50.0.tar
$ docker image load -i quay.io-prometheus-prometheus-v2.28.1.tar

3)安裝kube-prometheus-stack

# 創建命名空間
$ kubectl create ns kube-prometheus-stack
$ helm install mykube-prometheus-stack kube-prometheus-stack \
  -n kube-prometheus-stack \
  --set prometheus-node-exporter.hostRootFsMount=false \
  --set prometheus.ingress.enabled=true \
  --set prometheus.ingress.hosts='{prometheus.k8s.local}' \
  --set prometheus.ingress.paths='{/}' \
  --set prometheus.ingress.pathType=Prefix \
  --set alertmanager.ingress.enabled=true \
  --set alertmanager.ingress.hosts='{alertmanager.k8s.local}' \
  --set alertmanager.ingress.paths='{/}' \
  --set alertmanager.ingress.pathType=Prefix \
  --set grafana.ingress.enabled=true \
  --set grafana.ingress.hosts='{grafana.k8s.local}' \
  --set grafana.ingress.paths='{/}' \
  --set grafana.ingress.pathType=Prefix

這裡我沒跑起來,機器跑的東西太多,已經不能支撐跑kube-prometheus-stack了,有興趣的小夥伴可以試試~

發現K8s v1.21+,PSP已經被廢棄,不建議使用,完全移除在v1.25版本。再不學習它就學不到了。PSP官方講解

4)清理

$ helm uninstall mykube-prometheus-stack -n kube-prometheus-stack

更多實戰監控知識,請耐心等待~

關鍵字: