天天看點

Linux企業運維——Kubernetes(二十)Prometheus監控

Linux企業運維——Kubernetes(二十)Prometheus監控

文章目錄

    • Linux企業運維——Kubernetes(二十)Prometheus監控
    • 一、Prometheus簡介
    • 二、k8s部署Prometheus
    • 三、Prometheus監控nginx通路量
    • 四、Prometheus實作hpa動态伸縮

一、Prometheus簡介

除了資源名額(如CPU、記憶體)以外,使用者或管理者需要了解更多的名額資料,比如Kubernetes名額、容器名額、節點資源名額以及應用程式名額等等。自定義名額API允許請求任意的名額,其名額API的實作要指定相應的後端監視系統。

Prometheus是第一個開發了相應擴充卡的監控系統。

Linux企業運維——Kubernetes(二十)Prometheus監控

Prometheus是一個開源的服務監控系統和時序資料庫,其提供了通用的資料模型和快捷資料采集、存儲和查詢接口。它的核心元件Prometheus伺服器定期從靜态配置的監控目标或者基于服務發現自動配置的目标中進行拉取資料,新拉取到的資料大于配置的記憶體緩存區時,資料就會持久化到儲存設備當中。

如上圖,每個被監控的主機都可以通過專用的exporter程式提供輸出監控資料的接口,并等待Prometheus伺服器周期性的進行資料抓取。如果存在告警規則,則抓取到資料之後會根據規則進行計算,滿足告警條件則會生成告警,并發送到Alertmanager完成告警的彙總和分發。當被監控的目标有主動推送資料的需求時,可以以Pushgateway元件進行接收并臨時存儲資料,然後等待Prometheus伺服器完成資料的采集。

二、k8s部署Prometheus

server2添加apphub倉庫源

Linux企業運維——Kubernetes(二十)Prometheus監控

查找prometheus-operator并拉取

Linux企業運維——Kubernetes(二十)Prometheus監控

在harbor倉庫建立一個項目名為kubeapps

Linux企業運維——Kubernetes(二十)Prometheus監控

真實主機将prometheus-operator包發送給server1

Linux企業運維——Kubernetes(二十)Prometheus監控

server1加載prometheus-operator鏡像

Linux企業運維——Kubernetes(二十)Prometheus監控

将prometheus-operator鏡像上傳至倉庫

Linux企業運維——Kubernetes(二十)Prometheus監控

server2解壓prometheus-operator包并進入目錄,編輯values.yaml

Linux企業運維——Kubernetes(二十)Prometheus監控

把報警、Grafana、Prometheus三個元件的Ingress打開,将所有鏡像(8個)都指向私有倉庫

Linux企業運維——Kubernetes(二十)Prometheus監控
Linux企業運維——Kubernetes(二十)Prometheus監控
Linux企業運維——Kubernetes(二十)Prometheus監控
Linux企業運維——Kubernetes(二十)Prometheus監控
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:

    是用來展示名額的圖形化管理工具

Linux企業運維——Kubernetes(二十)Prometheus監控

進入grafana/目錄下,編輯values.yaml配置檔案,打開Ingress,配置hosts,将鏡像指向私有倉庫

Linux企業運維——Kubernetes(二十)Prometheus監控
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配置檔案

Linux企業運維——Kubernetes(二十)Prometheus監控

将鏡像指向私有倉庫

Linux企業運維——Kubernetes(二十)Prometheus監控

進入prometheus-node-exporter/目錄下,編輯values.yaml配置檔案

Linux企業運維——Kubernetes(二十)Prometheus監控

将鏡像指向私有倉庫

Linux企業運維——Kubernetes(二十)Prometheus監控

建立prometheus-operator命名空間,将prometheus-operator安裝在prometheus-operator命名空間下

(注意主控端和叢集虛拟機時間要同步,因為Prometheus是以時間序列方式采集資料)

Linux企業運維——Kubernetes(二十)Prometheus監控

檢視所有pod

Linux企業運維——Kubernetes(二十)Prometheus監控

控制器也就緒

prometheus-operator-kube-state-metrics:相容資料

Linux企業運維——Kubernetes(二十)Prometheus監控

檢視prometheus-operator命名空間内的ingress也正常運作

Linux企業運維——Kubernetes(二十)Prometheus監控

為測試通路,為真實主機添加域名解析

Linux企業運維——Kubernetes(二十)Prometheus監控

通過浏覽器通路prometheus.westos.org,進入status菜單欄内的service discovery

Linux企業運維——Kubernetes(二十)Prometheus監控

服務正常顯示

Linux企業運維——Kubernetes(二十)Prometheus監控

通路grafana.westos.org,輸入配置檔案中設定好的使用者名和密碼

Linux企業運維——Kubernetes(二十)Prometheus監控

在設定中,資料源預設為prometheus

Linux企業運維——Kubernetes(二十)Prometheus監控

顯示資料源正常工作,點選測試

Linux企業運維——Kubernetes(二十)Prometheus監控

找到prometheus将其添加到監控面闆

Linux企業運維——Kubernetes(二十)Prometheus監控

可以看到監控頁面正常運作

Linux企業運維——Kubernetes(二十)Prometheus監控

三、Prometheus監控nginx通路量

通過圖形化界面直接安裝nginx

Linux企業運維——Kubernetes(二十)Prometheus監控

應用名稱設定為nginx,使用9.4.1版本,服務類型為LoadBalancer

Linux企業運維——Kubernetes(二十)Prometheus監控

副本數量選擇1個,打開Prometheus監控選項,Prometheus專門監控nginx的agent插件:nginx-exporter

Linux企業運維——Kubernetes(二十)Prometheus監控

修改yaml配置檔案,更改鏡像倉庫位址

Linux企業運維——Kubernetes(二十)Prometheus監控

設定鏡像倉庫和标簽

Linux企業運維——Kubernetes(二十)Prometheus監控

下圖是我們剛指定的鏡像

Linux企業運維——Kubernetes(二十)Prometheus監控

指定服務部署在prometheus-operator命名空間内

Linux企業運維——Kubernetes(二十)Prometheus監控

整體配置如下圖所示

Linux企業運維——Kubernetes(二十)Prometheus監控

配置完成後等待鏡像部署完成

Linux企業運維——Kubernetes(二十)Prometheus監控

通過浏覽器通路上圖nginx應用的URL,可以看到正常通路

Linux企業運維——Kubernetes(二十)Prometheus監控

在指令行界面檢視pod資訊,可以看到剛建立的nginx及其服務和外部通路位址

Linux企業運維——Kubernetes(二十)Prometheus監控

為nginx添加

release=prometheus-operator

這個标簽

Linux企業運維——Kubernetes(二十)Prometheus監控

現在在圖形管理界面可以看到nginx服務

Linux企業運維——Kubernetes(二十)Prometheus監控

點選Graph,将通路流量統計圖添加進統計頁

Linux企業運維——Kubernetes(二十)Prometheus監控
Linux企業運維——Kubernetes(二十)Prometheus監控

可以看到nginx通路流量效果圖

Linux企業運維——Kubernetes(二十)Prometheus監控

四、Prometheus實作hpa動态伸縮

server2檢視pod資訊可以看到prometheus-operator-kube-state-metrics

Linux企業運維——Kubernetes(二十)Prometheus監控

執行

kubectl api-versions

檢視api group ,metrics為v1beta1版本

Linux企業運維——Kubernetes(二十)Prometheus監控

查找prometheus-adapter插件,拉取到本地并解壓,編輯values.yaml配置檔案

Linux企業運維——Kubernetes(二十)Prometheus監控

配置鏡像位址和prometheus的服務位址

Linux企業運維——Kubernetes(二十)Prometheus監控

配置檔案中的prometheus的服務位址可以通過下圖指令檢視

Linux企業運維——Kubernetes(二十)Prometheus監控

可以拉起一個新的容器并進入,測試是否能通路到上面prometheus的服務位址

Linux企業運維——Kubernetes(二十)Prometheus監控

在prometheus-operator命名空間下安裝prometheus-adapter,複制下圖指令

Linux企業運維——Kubernetes(二十)Prometheus監控

檢視prometheus-operator命名空間下的pod資訊,都正常運作

Linux企業運維——Kubernetes(二十)Prometheus監控

可以檢視到剛才複制的指令中的api

Linux企業運維——Kubernetes(二十)Prometheus監控

執行剛才複制的指令

Linux企業運維——Kubernetes(二十)Prometheus監控

再次執行剛才複制的指令,這次指定命名空間、pod和監控名額

Linux企業運維——Kubernetes(二十)Prometheus監控

指定的監控名額名字就是下圖紅框部分

Linux企業運維——Kubernetes(二十)Prometheus監控

也可以編寫python腳本運作指令進行參數配置

Linux企業運維——Kubernetes(二十)Prometheus監控

編輯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

           
Linux企業運維——Kubernetes(二十)Prometheus監控

檢視hpa詳細資訊,HPA可以根據pods的nginx通路流量度量成功計算副本計數

Linux企業運維——Kubernetes(二十)Prometheus監控

hey用來進行壓力測試,真實主機把hey複制到/usr/local/bin,賦予可執行權限

Linux企業運維——Kubernetes(二十)Prometheus監控

指令行輸入hey可以看到參數用法

Linux企業運維——Kubernetes(二十)Prometheus監控

真實主機運作hey進行通路測試,參數設定總共通路一萬次,每秒通路五次,5個線程并發

Linux企業運維——Kubernetes(二十)Prometheus監控

kubectl get hpa hpa-example -w

檢視hpa的動态狀态變化,可以随着通路壓力的增大hpa開始生效并增加副本數量,逐漸擴容到3個

Linux企業運維——Kubernetes(二十)Prometheus監控

可以看到圖形化展示

Linux企業運維——Kubernetes(二十)Prometheus監控

繼續閱讀