您好,登錄后才能下訂單哦!
據Sysdig發布的容器報告,容器以及如Kubernetes等編排工具的使用增長了51%以上,大家開始將工作負載在集群中進行托管并管理。鑒于集群中短暫的狀態,對于端到端的集群有一個十分重要的需求,即能夠詳細監控節點、容器以及pod。
IT工程師需要管理應用程序、集群(節點和數據),并且需要減少手動配置service、目標和數據存儲的工作量,同時在應用程序每次關閉和返回時進行監控。這就需要一個無縫部署以及管理高可用監控系統(如Prometheus),其中可以與Operator一起處理抓取目標的動態配置、服務發現以及用于告警集群中各種目標的配置規則。同時,使用Operator模式編寫代碼以減少人工干預。
本文,我們將關注Prometheus Operator是如何工作的,service monitor在Prometheus Operator中是如何發現目標和獲取指標的。
能夠使用原生Kubernetes配置選項無縫安裝Prometheus Operator
能夠在Kubernetes命名空間中創建和摧毀一個Prometheus實例,某個特定的應用程序或者團隊能夠輕松地使用Operator
能夠預配置配置文件,包括Kubernetes資源的版本、持久性、保留策略和replica
Operator在后臺執行以下操作以管理自定義資源:
1、CRD創建:CRD定義規范和元數據,基于該規范和元數據應創建自定義資源。當創建CRD的請求時,使用Kubernetes內部模式類型(OpenAPI v3模式)驗證元數據,然后創建自定義資源定義(CRD)對象
2、自定義資源創建根據元數據和CRD規范驗證對象,并相應地創建自定義對象創建。
3、Operator(自定義控制器)開始監控event及其狀態變更,并基于CRD管理自定義資源。它可以提供event在自定義資源上執行CRUD操作,因此每當更改自定義資源的狀態時,都能被觸發相應的event。
Prometheus Operator使用Service Monitor CRD執行自動發現和自動配置獲取的目標。
ServiceMonitoring包括以下組件:
Service:實際上是service/deployment,它在定義的端點、端口暴露指標,并使用對應的標簽進行標識。每當service或pod發生故障時,該service以相同的標簽返回,因此使得它可被service monitor發現。
Service Monitor:可基于匹配的標簽發現service的自定義資源。Servicemonitor處于部署了Prometheus CRD的命名空間中,但通過使用NamespaceSelector,它依舊能夠發現部署在其他命名空間中的service。
Prometheus CRD:基于標簽與service monitor相匹配并且能夠生成Prometheus的配置。
Gerrit是一個代碼review工具,主要用于DevOps CI流水線,在代碼入庫前對每個提交進行審閱。本文假設Gerrit已經在Kubernetes集群中運行,因此不再贅述Gerrit在Kubernetes作為服務運行的步驟。
如果你還沒有Prometheus Operator,可以使用helm chart來安裝或直接使用Rancher,在Rancher2.2及以上的版本中,Rancher會在新添加的集群中部署一個Prometheus Operator。以下組件將會被默認下載安裝:
prometheus-operator
prometheus
alertmanager
node-exporter
kube-state-metrics
grafana
service monitors to scrape internal kubernetes components
kube-apiserver
kube-scheduler
kube-controller-manager
etcd
kube-dns/coredns
以下步驟將展示Prometheus Operator如何自動發現運行在Kubernetes集群上的Gerrit服務以及如何從Gerrit中抓取指標。
可以使用Prometheus jar插件暴露Gerrit指標,但需要提前將該插件安裝在Gerrit實例上運行。
Prometheus jar插件下載地址:
https://gerrit-ci.gerritforge.com/ ,將jar放在Gerrit插件目錄中:/var/gerrit/review_site/plugins/,并重啟gerrit服務。
在管理員的web界面校驗Prometheus插件:Gerrit -> Plugins -> Prometheus plugin。
創建一個賬號和組并給予查看指標的訪問權限
以管理員權限登錄到Gerrit的web界面,訪問:Projects>List>All-Projects。點擊【Access】標簽,再點擊【edit】按鈕。
在block global capabilities中,點擊【Add Permission】并且在下拉列表中選擇【View Metrics】。
在Gerrit中為用戶生成一個token。
選擇我們此前創建的組“Prometheus Metrics“,點擊【Add】按鈕。
在Gerrit中生成token之后,你可以使用用戶id和token來生成Base64編碼格式的用戶id和token,用于將憑證存儲在Kubernetes中。
使用secret的詳細信息創建一個yaml并在Kubernetes中創建secret。
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配置文件和更新抓取的配置。
1、 打開Prometheus url:http://prometheusip:nodeport
kubectl get svc prometheus以獲取nodeport詳細信息并用節點的詳細信息來替代IP。
2、 訪問菜單:Status -> Configuration,來查看使用抓取配置自動加載的Prometheus配置。在scrape_configs部分,可以查看Gerrit service monitor的詳細信息,如下所示:
3、 訪問菜單 -> 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部署。此外,還支持以下兩個功能:
集群范圍內的Prometheus部署將被用于存儲集群指標(如CPU節點和內存消耗),并存儲從單個用戶部署的應用程序中收集的項目級指標。
Rancher對Prometheus的增強支持,可確保為所有Kubernetes集群、所有項目和所有用戶進行高效的部署和有效的監測。安全代理確保不在多租戶之間重復共享數據,并且對多租戶進行隔離。除此之外,Rancher還收集使用Prometheus處理的數據公開端點的任意自定義指標。所有指標均可用于Rancher內部的告警和決策,通過通知用戶的Slack及PagerDuty進行簡單操作,通過啟動工作負載的橫向擴展最終增加負載進行復雜操作。Rancher現在還擁有完全安全隔離和RBAC的集群級和項目級的指標和儀表盤。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。