據Sysdig發佈的容器報告,容器以及如Kubernetes等編排工具的使用增加了51%以上,你們開始將工做負載在集羣中進行託管並管理。鑑於集羣中短暫的狀態,對於端到端的集羣有一個十分重要的需求,即可以詳細監控節點、容器以及pod。node
IT工程師須要管理應用程序、集羣(節點和數據),而且須要減小手動配置service、目標和數據存儲的工做量,同時在應用程序每次關閉和返回時進行監控。這就須要一個無縫部署以及管理高可用監控系統(如Prometheus),其中能夠與Operator一塊兒處理抓取目標的動態配置、服務發現以及用於告警集羣中各類目標的配置規則。同時,使用Operator模式編寫代碼以減小人工干預。git
本文,咱們將關注Prometheus Operator是如何工做的,service monitor在Prometheus Operator中是如何發現目標和獲取指標的。web
例如:當pod /service銷燬並返回時,Prometheus Operator能夠自動建立新的配置文件,無需人工干預。編程
Operator在後臺執行如下操做以管理自定義資源:api
一、CRD建立:CRD定義規範和元數據,基於該規範和元數據應建立自定義資源。當建立CRD的請求時,使用Kubernetes內部模式類型(OpenAPI v3模式)驗證元數據,而後建立自定義資源定義(CRD)對象安全
二、自定義資源建立根據元數據和CRD規範驗證對象,並相應地建立自定義對象建立。app
三、Operator(自定義控制器)開始監控event及其狀態變動,並基於CRD管理自定義資源。它能夠提供event在自定義資源上執行CRUD操做,所以每當更改自定義資源的狀態時,都能被觸發相應的event。工具
Prometheus Operator使用Service Monitor CRD執行自動發現和自動配置獲取的目標。性能
ServiceMonitoring包括如下組件:編碼
接下來咱們來看一個簡單的使用案例,以此理解Prometheus Operator時如何監控service的。
Gerrit是一個代碼review工具,主要用於DevOps CI流水線,在代碼入庫前對每一個提交進行審閱。本文假設Gerrit已經在Kubernetes集羣中運行,所以再也不贅述Gerrit在Kubernetes做爲服務運行的步驟。
若是你尚未Prometheus Operator,可使用helm chart來安裝或直接使用Rancher,在Rancher2.2及以上的版本中,Rancher會在新添加的集羣中部署一個Prometheus Operator。如下組件將會被默認下載安裝:
kube-apiserver
kube-scheduler
kube-controller-manager
etcd
kube-dns/coredns
如下步驟將展現Prometheus Operator如何自動發現運行在Kubernetes集羣上的Gerrit服務以及如何從Gerrit中抓取指標。
可使用Prometheus jar插件暴露Gerrit指標,但須要提早將該插件安裝在Gerrit實例上運行。
kubectl apply -f gerrit-secret.yaml
使用兩個標籤標記Gerrit服務,例如:app: gerrit and release: prometheus-operator
kubectl label svc gerrit app=gerrit release=prometheus-operator
在servicemonitoring添加端點的詳細信息以發現Gerrit服務指標以及具備匹配標籤的的selector,以下所示:
Selector下的標籤是用於標識服務的標籤:
Selector: matchLabels: app: gerrit release: prometheus-operator
元數據部分下的標籤是指用於經過Prometheus CRD識別服務監視器的標籤。
Metadata: labels: app: gerrit release: prometheus-operator
Namespaceselector:在Gerrit服務所運行的Kubernetes集羣中提供命名空間。Service能夠在任何命名空間中運行,但service monitor只能在Prometheus Operator運行的命名空間建立,這樣Prometheus CRD就能夠識別service monitor對象。
使用如下命令驗證Prometheus對象中Service Monitor selector的部分:
kubectl get prometheus Match and apply the label as given in step 4b for the Prometheus object. serviceMonitorSelector: matchLabels: release: prometheus-operator
注意:若是Prometheus-operator使用helm部署,標籤release=Prometheus-operator已經應用到Prometheus對象上。咱們依舊須要在service monitor中匹配這個標籤,由於Prometheus CRD須要肯定合適的service monitor。
以上servicemonitor建立步驟可使用prometheus-operator helm自定義values.yaml來完成。
標籤更新以後,Prometheus自定義對象將會自動調用config-reloader來讀取終端並更新Prometheus配置文件。這是Prometheus Operator的一個好處,無需手動介入建立Prometheus配置文件和更新抓取的配置。
一、 打開Prometheus url:http://prometheusip:nodeport
kubectl get svc prometheus以獲取nodeport詳細信息並用節點的詳細信息來替代IP。
二、 訪問菜單:Status -> Configuration,來查看使用抓取配置自動加載的Prometheus配置。在scrape_configs部分,能夠查看Gerrit service monitor的詳細信息,以下所示:
三、 訪問菜單 -> Status -> Targets or Service Discovery。若是service monitor已經成功抓取Gerrit的指標,目標應該顯示爲健康[1/1up]。
Gerrit暴露了各類指標,如JVM運行時間、線程內存、heap size、error等。這些均可以在Grafana儀表板中配置以監控Gerrit的性能和運行情況(以下所示)。
Gerrit指標在scrape url下暴露:
http://gerrit-svcip:nodeport/a/plugins/metrics-reporter-prometheus/metrics
kubectl get svc prometheus
-獲取service 節點端口。
將gerrit-svcip、nodeport替換爲gerrit服務的gerrit IP / nodeport的詳細信息,暴露的指標將以下所示。
指標的值能夠在Prometheus -> Graph 中的表達字段進行評估,如:caches_disk_cached_git_tags
在Grafana中配置指標以監控Gerrit的健康情況,選擇數據源爲Prometheus並在dashboard中配置widget。一些已經配置的關鍵指標有JVM_threads、Uptime、Http_Plugin errors、內存使用狀況、事件等。
Prometheus Operator有助於Prometheus的無縫部署和管理、抓取目標的動態配置、服務發現、可擴展性、以及內置的SRE專業知識,這能夠加速集羣監控。
2018年年底,Rancher Labs宣佈增強對Prometheus的支持,這將爲跨多個Kubernetes集羣和多個隔離租戶環境提供更高的可見性。在Rancher2.2及以上的版本中,每當添加一個新的Kubernetes集羣到Rancher中,Rancher都將在集羣中部署一個Prometheus operator,而後在集羣中建立一個Prometheus部署。此外,還支持如下兩個功能:
Rancher對Prometheus的加強支持,可確保爲全部Kubernetes集羣、全部項目和全部用戶進行高效的部署和有效的監測。安全代理確保不在多租戶之間重複共享數據,而且對多租戶進行隔離。除此以外,Rancher還收集使用Prometheus處理的數據公開端點的任意自定義指標。全部指標都可用於Rancher內部的告警和決策,經過通知用戶的Slack及PagerDuty進行簡單操做,經過啓動工做負載的橫向擴展最終增長負載進行復雜操做。Rancher如今還擁有徹底安全隔離和RBAC的集羣級和項目級的指標和儀表盤。