您好,登錄后才能下訂單哦!
據(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)的。
能夠使用原生Kubernetes配置選項(xiàng)無(wú)縫安裝Prometheus Operator
能夠在Kubernetes命名空間中創(chuàng)建和摧毀一個(gè)Prometheus實(shí)例,某個(gè)特定的應(yīng)用程序或者團(tuán)隊(duì)能夠輕松地使用Operator
能夠預(yù)配置配置文件,包括Kubernetes資源的版本、持久性、保留策略和replica
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ì)象
2、自定義資源創(chuàng)建根據(jù)元數(shù)據(jù)和CRD規(guī)范驗(yàn)證對(duì)象,并相應(yīng)地創(chuàng)建自定義對(duì)象創(chuàng)建。
3、Operator(自定義控制器)開(kāi)始監(jiān)控event及其狀態(tài)變更,并基于CRD管理自定義資源。它可以提供event在自定義資源上執(zhí)行CRUD操作,因此每當(dāng)更改自定義資源的狀態(tài)時(shí),都能被觸發(fā)相應(yīng)的event。
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的配置。
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)。
可以使用Prometheus jar插件暴露Gerrit指標(biāo),但需要提前將該插件安裝在Gerrit實(shí)例上運(yùn)行。
Prometheus jar插件下載地址:
https://gerrit-ci.gerritforge.com/ ,將jar放在Gerrit插件目錄中:/var/gerrit/review_site/plugins/,并重啟gerrit服務(wù)。
在管理員的web界面校驗(yàn)Prometheus插件:Gerrit -> Plugins -> Prometheus plugin。
創(chuàng)建一個(gè)賬號(hào)和組并給予查看指標(biāo)的訪問(wèn)權(quán)限
以管理員權(quán)限登錄到Gerrit的web界面,訪問(wèn):Projects>List>All-Projects。點(diǎn)擊【Access】標(biāo)簽,再點(diǎn)擊【edit】按鈕。
在block global capabilities中,點(diǎn)擊【Add Permission】并且在下拉列表中選擇【View Metrics】。
在Gerrit中為用戶(hù)生成一個(gè)token。
選擇我們此前創(chuàng)建的組“Prometheus Metrics“,點(diǎn)擊【Add】按鈕。
在Gerrit中生成token之后,你可以使用用戶(hù)id和token來(lái)生成Base64編碼格式的用戶(hù)id和token,用于將憑證存儲(chǔ)在Kubernetes中。
使用secret的詳細(xì)信息創(chuàng)建一個(gè)yaml并在Kubernetes中創(chuàng)建secret。
kubectl apply -f gerrit-secret.yaml
使用兩個(gè)標(biāo)簽標(biāo)記Gerrit服務(wù),例如:app: gerrit and release: prometheus-operator
kubectl label svc gerrit app=gerrit release=prometheus-operator
在servicemonitoring添加端點(diǎn)的詳細(xì)信息以發(fā)現(xiàn)Gerrit服務(wù)指標(biāo)以及具有匹配標(biāo)簽的的selector,如下所示:
Selector下的標(biāo)簽是用于標(biāo)識(shí)服務(wù)的標(biāo)簽:
Selector:
matchLabels:
app: gerrit
release: prometheus-operator
元數(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ì)象。
使用以下命令驗(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)完成。
標(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ì)信息,如下所示:
3、 訪問(wèn)菜單 -> Status -> Targets or Service Discovery。如果service monitor已經(jīng)成功抓取Gerrit的指標(biāo),目標(biāo)應(yīng)該顯示為健康[1/1up]。
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
在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)控。
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)。
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)。
免責(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)容。