溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控

發(fā)布時(shí)間:2020-07-17 19:25:06 來(lái)源:網(wǎng)絡(luò) 閱讀:695 作者:RancherLabs 欄目:云計(jì)算

據(jù)Sysdig發(fā)布的容器報(bào)告,容器以及如Kubernetes等編排工具的使用增長(zhǎng)了51%以上,大家開(kāi)始將工作負(fù)載在集群中進(jìn)行托管并管理。鑒于集群中短暫的狀態(tài),對(duì)于端到端的集群有一個(gè)十分重要的需求,即能夠詳細(xì)監(jiān)控節(jié)點(diǎn)、容器以及pod。
 

IT工程師需要管理應(yīng)用程序、集群(節(jié)點(diǎn)和數(shù)據(jù)),并且需要減少手動(dòng)配置service、目標(biāo)和數(shù)據(jù)存儲(chǔ)的工作量,同時(shí)在應(yīng)用程序每次關(guān)閉和返回時(shí)進(jìn)行監(jiān)控。這就需要一個(gè)無(wú)縫部署以及管理高可用監(jiān)控系統(tǒng)(如Prometheus),其中可以與Operator一起處理抓取目標(biāo)的動(dòng)態(tài)配置、服務(wù)發(fā)現(xiàn)以及用于告警集群中各種目標(biāo)的配置規(guī)則。同時(shí),使用Operator模式編寫(xiě)代碼以減少人工干預(yù)。
 

本文,我們將關(guān)注Prometheus Operator是如何工作的,service monitor在Prometheus Operator中是如何發(fā)現(xiàn)目標(biāo)和獲取指標(biāo)的。
 

在集群監(jiān)控中Prometheus Operator所扮演的角色

 

  • 能夠使用原生Kubernetes配置選項(xiàng)無(wú)縫安裝Prometheus Operator

  • 能夠在Kubernetes命名空間中創(chuàng)建和摧毀一個(gè)Prometheus實(shí)例,某個(gè)特定的應(yīng)用程序或者團(tuán)隊(duì)能夠輕松地使用Operator

  • 能夠預(yù)配置配置文件,包括Kubernetes資源的版本、持久性、保留策略和replica

  • 能夠使用標(biāo)簽發(fā)現(xiàn)目標(biāo)service,并根據(jù)熟悉的Kubernetes標(biāo)簽查詢(xún)自動(dòng)生成監(jiān)控目標(biāo)配置。
     
    例如:當(dāng)pod /service銷(xiāo)毀并返回時(shí),Prometheus Operator可以自動(dòng)創(chuàng)建新的配置文件,無(wú)需人工干預(yù)。
     

    在Operator模式下所需的組件

 

  • Custom Resource Definition(CRD):創(chuàng)建一個(gè)新的自定義資源,包括可指定的名稱(chēng)和模式,無(wú)需任何編程。Kubernetes API提供和處理自定義資源的存儲(chǔ)。

 

  • 自定義資源:擴(kuò)展Kubernetes API或允許將自定義API引入kubernetes集群的對(duì)象。

 

  • 自定義控制器:以新的方式處理內(nèi)置的Kubernetes對(duì)象,如Deployment、Service等,或管理自定義資源,如同管理本機(jī)Kubernetes組件

 

  • Operator模式(適用于CRD和自定義控制器):Operator基于Kubernetes資源和控制器增加了允許Operator執(zhí)行常見(jiàn)應(yīng)用程序任務(wù)的配置。
     
    實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
     

    Operator的工作流程

 

Operator在后臺(tái)執(zhí)行以下操作以管理自定義資源:

 

1、CRD創(chuàng)建:CRD定義規(guī)范和元數(shù)據(jù),基于該規(guī)范和元數(shù)據(jù)應(yīng)創(chuàng)建自定義資源。當(dāng)創(chuàng)建CRD的請(qǐng)求時(shí),使用Kubernetes內(nèi)部模式類(lèi)型(OpenAPI v3模式)驗(yàn)證元數(shù)據(jù),然后創(chuàng)建自定義資源定義(CRD)對(duì)象
 
實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 
2、自定義資源創(chuàng)建根據(jù)元數(shù)據(jù)和CRD規(guī)范驗(yàn)證對(duì)象,并相應(yīng)地創(chuàng)建自定義對(duì)象創(chuàng)建。
 
實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 
3、Operator(自定義控制器)開(kāi)始監(jiān)控event及其狀態(tài)變更,并基于CRD管理自定義資源。它可以提供event在自定義資源上執(zhí)行CRUD操作,因此每當(dāng)更改自定義資源的狀態(tài)時(shí),都能被觸發(fā)相應(yīng)的event。
 
實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 

服務(wù)發(fā)現(xiàn)及自動(dòng)配置獲取的目標(biāo)

 

Prometheus Operator使用Service Monitor CRD執(zhí)行自動(dòng)發(fā)現(xiàn)和自動(dòng)配置獲取的目標(biāo)。

 

ServiceMonitoring包括以下組件:

 

  • Service:實(shí)際上是service/deployment,它在定義的端點(diǎn)、端口暴露指標(biāo),并使用對(duì)應(yīng)的標(biāo)簽進(jìn)行標(biāo)識(shí)。每當(dāng)service或pod發(fā)生故障時(shí),該service以相同的標(biāo)簽返回,因此使得它可被service monitor發(fā)現(xiàn)。

  • Service Monitor:可基于匹配的標(biāo)簽發(fā)現(xiàn)service的自定義資源。Servicemonitor處于部署了Prometheus CRD的命名空間中,但通過(guò)使用NamespaceSelector,它依舊能夠發(fā)現(xiàn)部署在其他命名空間中的service。

  • Prometheus CRD:基于標(biāo)簽與service monitor相匹配并且能夠生成Prometheus的配置。

  • Prometheus Operator:它可調(diào)用config-reloader組件以自動(dòng)更新yaml配置,其中包含抓取目標(biāo)的詳細(xì)信息。
     
    實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
     
    接下來(lái)我們來(lái)看一個(gè)簡(jiǎn)單的使用案例,以此理解Prometheus Operator時(shí)如何監(jiān)控service的。
     

    使用案例:使用Prometheus Operator進(jìn)行Gerrit服務(wù)監(jiān)控

     
    Gerrit是一個(gè)代碼review工具,主要用于DevOps CI流水線(xiàn),在代碼入庫(kù)前對(duì)每個(gè)提交進(jìn)行審閱。本文假設(shè)Gerrit已經(jīng)在Kubernetes集群中運(yùn)行,因此不再贅述Gerrit在Kubernetes作為服務(wù)運(yùn)行的步驟。
     

如果你還沒(méi)有Prometheus Operator,可以使用helm chart來(lái)安裝或直接使用Rancher,在Rancher2.2及以上的版本中,Rancher會(huì)在新添加的集群中部署一個(gè)Prometheus Operator。以下組件將會(huì)被默認(rèn)下載安裝:

 

  • 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如何自動(dòng)發(fā)現(xiàn)運(yùn)行在Kubernetes集群上的Gerrit服務(wù)以及如何從Gerrit中抓取指標(biāo)。
 

使用Gerrit-Prometheus插件暴露指標(biāo)

 

可以使用Prometheus jar插件暴露Gerrit指標(biāo),但需要提前將該插件安裝在Gerrit實(shí)例上運(yùn)行。

 

  1. Prometheus jar插件下載地址:

  2. https://gerrit-ci.gerritforge.com/ ,將jar放在Gerrit插件目錄中:/var/gerrit/review_site/plugins/,并重啟gerrit服務(wù)。

  3. 在管理員的web界面校驗(yàn)Prometheus插件:Gerrit -> Plugins -> Prometheus plugin。

  4. 創(chuàng)建一個(gè)賬號(hào)和組并給予查看指標(biāo)的訪問(wèn)權(quán)限

  5. 以管理員權(quán)限登錄到Gerrit的web界面,訪問(wèn):Projects>List>All-Projects。點(diǎn)擊【Access】標(biāo)簽,再點(diǎn)擊【edit】按鈕。

  6. 在block global capabilities中,點(diǎn)擊【Add Permission】并且在下拉列表中選擇【View Metrics】。

  7. 在Gerrit中為用戶(hù)生成一個(gè)token。

  8. 選擇我們此前創(chuàng)建的組“Prometheus Metrics“,點(diǎn)擊【Add】按鈕。

  9. 滑至頁(yè)面底部并點(diǎn)擊【Save Changes】按鈕。
     
    實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
     

    創(chuàng)建secret以訪問(wèn)Gerrit服務(wù)

 

  1. 在Gerrit中生成token之后,你可以使用用戶(hù)id和token來(lái)生成Base64編碼格式的用戶(hù)id和token,用于將憑證存儲(chǔ)在Kubernetes中。

  2. 使用secret的詳細(xì)信息創(chuàng)建一個(gè)yaml并在Kubernetes中創(chuàng)建secret。

  3. kubectl apply -f gerrit-secret.yaml
     
    實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
     

    將標(biāo)簽應(yīng)用到服務(wù)

 

使用兩個(gè)標(biāo)簽標(biāo)記Gerrit服務(wù),例如:app: gerrit and release: prometheus-operator

 

kubectl label svc gerrit app=gerrit release=prometheus-operator

 

為Gerrit創(chuàng)建Service Monitor

 

在servicemonitoring添加端點(diǎn)的詳細(xì)信息以發(fā)現(xiàn)Gerrit服務(wù)指標(biāo)以及具有匹配標(biāo)簽的的selector,如下所示:

 

帶標(biāo)簽的service selector

 

Selector下的標(biāo)簽是用于標(biāo)識(shí)服務(wù)的標(biāo)簽:
 

Selector:
matchLabels:
app: gerrit
release: prometheus-operator

 

ServiceMonitor selector

 

元數(shù)據(jù)部分下的標(biāo)簽是指用于通過(guò)Prometheus CRD識(shí)別服務(wù)監(jiān)視器的標(biāo)簽。
 

Metadata:
labels:
app: gerrit
release: prometheus-operator

 
Namespaceselector:在Gerrit服務(wù)所運(yùn)行的Kubernetes集群中提供命名空間。Service可以在任何命名空間中運(yùn)行,但service monitor只能在Prometheus Operator運(yùn)行的命名空間創(chuàng)建,這樣Prometheus CRD就可以識(shí)別service monitor對(duì)象。
 
實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 

在Prometheus中匹配Service Monitor selector

 

使用以下命令驗(yàn)證Prometheus對(duì)象中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部署,標(biāo)簽release=Prometheus-operator已經(jīng)應(yīng)用到Prometheus對(duì)象上。我們依舊需要在service monitor中匹配這個(gè)標(biāo)簽,因?yàn)镻rometheus CRD需要確定合適的service monitor。

 

以上servicemonitor創(chuàng)建步驟可以使用prometheus-operator helm自定義values.yaml來(lái)完成。
 

自動(dòng)發(fā)現(xiàn)Gerrit服務(wù)

 

標(biāo)簽更新之后,Prometheus自定義對(duì)象將會(huì)自動(dòng)調(diào)用config-reloader來(lái)讀取終端并更新Prometheus配置文件。這是Prometheus Operator的一個(gè)好處,無(wú)需手動(dòng)介入創(chuàng)建Prometheus配置文件和更新抓取的配置。

 

1、 打開(kāi)Prometheus url:http://prometheusip:nodeport

kubectl get svc prometheus以獲取nodeport詳細(xì)信息并用節(jié)點(diǎn)的詳細(xì)信息來(lái)替代IP。

 

2、 訪問(wèn)菜單:Status -> Configuration,來(lái)查看使用抓取配置自動(dòng)加載的Prometheus配置。在scrape_configs部分,可以查看Gerrit service monitor的詳細(xì)信息,如下所示:
 
實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 
3、 訪問(wèn)菜單 -> Status -> Targets or Service Discovery。如果service monitor已經(jīng)成功抓取Gerrit的指標(biāo),目標(biāo)應(yīng)該顯示為健康[1/1up]。
 
實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 

在Grafana中的Gerrit 健康指標(biāo)

 

Gerrit暴露了各種指標(biāo),如JVM運(yùn)行時(shí)間、線(xiàn)程內(nèi)存、heap size、error等。這些都可以在Grafana儀表板中配置以監(jiān)控Gerrit的性能和運(yùn)行狀況(如下所示)。

 
Gerrit指標(biāo)在scrape url下暴露:

http://gerrit-svcip:nodeport/a/plugins/metrics-reporter-prometheus/metrics

 

kubectl get svc prometheus-獲取service 節(jié)點(diǎn)端口。

 
將gerrit-svcip、nodeport替換為gerrit服務(wù)的gerrit IP / nodeport的詳細(xì)信息,暴露的指標(biāo)將如下所示。

 

指標(biāo)的值可以在Prometheus -> Graph 中的表達(dá)字段進(jìn)行評(píng)估,如:caches_disk_cached_git_tags

實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控

實(shí)操案例:使用Prometheus Operator進(jìn)行集群監(jiān)控
 
在Grafana中配置指標(biāo)以監(jiān)控Gerrit的健康狀況,選擇數(shù)據(jù)源為Prometheus并在dashboard中配置widget。一些已經(jīng)配置的關(guān)鍵指標(biāo)有JVM_threads、Uptime、Http_Plugin errors、內(nèi)存使用情況、事件等。

 

Prometheus Operator有助于Prometheus的無(wú)縫部署和管理、抓取目標(biāo)的動(dòng)態(tài)配置、服務(wù)發(fā)現(xiàn)、可擴(kuò)展性、以及內(nèi)置的SRE專(zhuān)業(yè)知識(shí),這可以加速集群監(jiān)控。

 

開(kāi)箱即用的Prometheus

 

2018年年末,Rancher Labs宣布加強(qiáng)對(duì)Prometheus的支持,這將為跨多個(gè)Kubernetes集群和多個(gè)隔離租戶(hù)環(huán)境提供更高的可見(jiàn)性。在Rancher2.2及以上的版本中,每當(dāng)添加一個(gè)新的Kubernetes集群到Rancher中,Rancher都將在集群中部署一個(gè)Prometheus operator,然后在集群中創(chuàng)建一個(gè)Prometheus部署。此外,還支持以下兩個(gè)功能:

 

  • 集群范圍內(nèi)的Prometheus部署將被用于存儲(chǔ)集群指標(biāo)(如CPU節(jié)點(diǎn)和內(nèi)存消耗),并存儲(chǔ)從單個(gè)用戶(hù)部署的應(yīng)用程序中收集的項(xiàng)目級(jí)指標(biāo)。

  • 項(xiàng)目級(jí)的Grafana與Prometheus的通信將通過(guò)安全代理完成,該代理可為Prometheus實(shí)現(xiàn)多租戶(hù)。安全代理工具PromQL語(yǔ)句可確保僅能通過(guò)用戶(hù)項(xiàng)目的命名空間進(jìn)行查詢(xún)。

 

Rancher對(duì)Prometheus的增強(qiáng)支持,可確保為所有Kubernetes集群、所有項(xiàng)目和所有用戶(hù)進(jìn)行高效的部署和有效的監(jiān)測(cè)。安全代理確保不在多租戶(hù)之間重復(fù)共享數(shù)據(jù),并且對(duì)多租戶(hù)進(jìn)行隔離。除此之外,Rancher還收集使用Prometheus處理的數(shù)據(jù)公開(kāi)端點(diǎn)的任意自定義指標(biāo)。所有指標(biāo)均可用于Rancher內(nèi)部的告警和決策,通過(guò)通知用戶(hù)的Slack及PagerDuty進(jìn)行簡(jiǎn)單操作,通過(guò)啟動(dòng)工作負(fù)載的橫向擴(kuò)展最終增加負(fù)載進(jìn)行復(fù)雜操作。Rancher現(xiàn)在還擁有完全安全隔離和RBAC的集群級(jí)和項(xiàng)目級(jí)的指標(biāo)和儀表盤(pán)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI