溫馨提示×

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

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

Kubernetes集群監(jiān)控詳解

發(fā)布時(shí)間:2020-07-16 16:02:53 來源:網(wǎng)絡(luò) 閱讀:390 作者:RancherLabs 欄目:云計(jì)算

介 紹

Kubernetes在Github上擁有超過4萬顆星,7萬以上的commits,以及像Google這樣的主要貢獻(xiàn)者。Kubernetes可以說已經(jīng)快速地接管了容器生態(tài)系統(tǒng),成為了容器編排平臺(tái)中的真正領(lǐng)頭羊。

理解Kubernetes和它的Abstractions

在基礎(chǔ)設(shè)施層,Kubernetes集群好比是一組扮演特定角色的物理或虛擬機(jī)器。其中扮演Master角色的機(jī)器作為全部操作的大腦,并由運(yùn)行在節(jié)點(diǎn)上的編排容器控制。

  • Master組件管理pod的生命周期,pod是Kubernetes集群中部署的基本單元。pod完成周期,Controller會(huì)創(chuàng)建一個(gè)新的。如果我們向上或向下(增加減少)Pod副本的數(shù)量,Controller會(huì)相應(yīng)的創(chuàng)建和銷毀pod來滿足請(qǐng)求。Master角色包含了下面組件:

°kube-apiserver – 為其他master組件提供APIs

°etcd – 具有一致性且高可用的key/value存儲(chǔ),用于存儲(chǔ)所有內(nèi)部集群數(shù)據(jù)

°kube-scheduler – 使用pod規(guī)范中的信息來確定運(yùn)行pod的節(jié)點(diǎn)

°kube-controller-manager – 負(fù)責(zé)節(jié)點(diǎn)管理(檢測(cè)節(jié)點(diǎn)是否失?。?、pod復(fù)制和端點(diǎn)創(chuàng)建

°cloud-controller-manager – 運(yùn)行與底層云提供商交互的controller

  • Node組件是Kubernetes中的worker機(jī)器,由Master來管理。一個(gè)節(jié)點(diǎn)可能表示未一個(gè)虛擬機(jī)(VM)或者物理機(jī),而Kubernetes都可以在它們上面運(yùn)行。每個(gè)節(jié)點(diǎn)都包含了運(yùn)行pods所需要的組件:

°kubelet:處理Master和運(yùn)行它的節(jié)點(diǎn)之間的所有通信。它在使用container runtime時(shí)提供接口來部署和監(jiān)視容器。

° kube-proxy:維護(hù)主機(jī)上的網(wǎng)絡(luò)規(guī)則,處理在pods、host和外部世界之間包的傳輸。

°container runtime:負(fù)責(zé)在host上運(yùn)行容器。雖然Kubernetes支持來自rkt、runc以及其他各式的container runtime,當(dāng)下最流行的引擎還是Docker。

Kubernetes集群監(jiān)控詳解

從邏輯層面來看,Kubernetes部署由各種組件組成,每個(gè)組件在集群中提供的服務(wù)都有特定的目的。

  • Pods是Kubernetes部署時(shí)的基本單元。一個(gè)pod由一個(gè)或者多個(gè)共享相同網(wǎng)絡(luò)命名空間和IP地址的容器組成。最佳實(shí)踐推薦我們?yōu)槊總€(gè)應(yīng)用程序創(chuàng)建一個(gè)pod,這樣你就可以分別擴(kuò)展和控制它們。

  • Services設(shè)置在pods集合之前,給它們提供一致的IP地址以及一套策略用來控制對(duì)它們的訪問。Service所針對(duì)的pod集合通常由label selector(標(biāo)簽選擇器)決定。這樣在升級(jí)或者藍(lán)/綠部署期間很容易就讓Service指向不同的pod集合。

  • ReplicaSets由部署控制,并確保運(yùn)行該部署所需要的pods數(shù)量。

  • Namespaces為諸如pods和services資源定義了一個(gè)邏輯命名空間。它們?cè)试S資源使用相同的名稱,而單個(gè)命名空間中的資源名稱必須唯一。Rancher使用命名空間和機(jī)遇角色的訪問控制,為命名空間和其中運(yùn)行的資源之間提供安全隔離。

  • Metadata根據(jù)容器的部署特性來標(biāo)記容器。

Kubernetes集群監(jiān)控詳解

監(jiān)控Kubernetes

多個(gè)服務(wù)和命名空間可以跨基礎(chǔ)設(shè)施分布。就像上面所說,每個(gè)服務(wù)都是由pods組成,而pod可以包含一個(gè)或多個(gè)容器。有了如此多的移動(dòng)部件,即便是監(jiān)控一個(gè)小型的Kubernetes集群也會(huì)帶來挑戰(zhàn)。為了高效地監(jiān)控它,這就需要深入了解應(yīng)用程序體系結(jié)構(gòu)和功能。

Kubernetes提供了用于監(jiān)控集群的工具:

  • Probes能積極地監(jiān)控容器的健康狀態(tài)。如果Probe檢測(cè)到容器不健康,那么它就會(huì)重啟容器。

  • cAdvisor是一個(gè)開源代理,它監(jiān)控資源的使用情況并分析容器的性能。cAdvisor最初由Google創(chuàng)建,現(xiàn)在已經(jīng)和Kubelet集成。它能夠收集、聚合、處理和導(dǎo)出在給定節(jié)點(diǎn)上運(yùn)行的所有勇氣的度量指標(biāo),比如CPU、內(nèi)存、文件和網(wǎng)絡(luò)的使用情況。

  • kubernetes dashboard(儀表板)是一個(gè)附加組件,它能提供集群上運(yùn)行的資源的概述信息。此外還提供了非?;镜姆椒▉聿渴疬@些資源并和它們交互。

Kubernetes由從故障中自動(dòng)回復(fù)的強(qiáng)大能力。如果進(jìn)程發(fā)生崩潰,它可以重新啟動(dòng)pods,如果節(jié)點(diǎn)出現(xiàn)錯(cuò)誤,它能重新分配pods。然而,盡管有如此能力,還是會(huì)有不能解決問題的情況。為了檢測(cè)到這些情況,我們還需要額外的監(jiān)控。

監(jiān)控的層次

基礎(chǔ)設(shè)施

服務(wù)器級(jí)別的問題會(huì)在工作負(fù)載中出現(xiàn),因此所有集群都應(yīng)該監(jiān)控底層服務(wù)器組件

監(jiān)控什么

CPU利用率。監(jiān)控CPU既能顯示系統(tǒng)和用戶的開銷,也能顯示iowait。擋在云中或者任何網(wǎng)絡(luò)存儲(chǔ)中運(yùn)行集群時(shí),iowait會(huì)提示存儲(chǔ)讀寫(i/o過程)的瓶頸等待時(shí)間。超額訂閱的存儲(chǔ)框架會(huì)影響性能。

內(nèi)存使用情況。監(jiān)控內(nèi)存可以顯示出有多少內(nèi)存在使用,以及有多少可用內(nèi)存,可用內(nèi)存可以是空閑內(nèi)存,也可以是緩存。出現(xiàn)內(nèi)存限制的系統(tǒng)會(huì)開始進(jìn)行交換(swap),交換會(huì)迅速降低性能。

磁盤壓力。如果系統(tǒng)正在運(yùn)行諸如etcd或者任何數(shù)據(jù)存儲(chǔ)這樣的寫入密集型服務(wù)時(shí),如果磁盤空間耗盡,那將是災(zāi)難性的問題。不能寫入數(shù)據(jù)會(huì)出現(xiàn)崩潰,而這種崩潰會(huì)轉(zhuǎn)化為真實(shí)世界的損失。有了像LVM這樣的技術(shù),就能很容易地根據(jù)需要增加磁盤空間,但是盡管如此還是要監(jiān)控它。

網(wǎng)絡(luò)帶寬。在當(dāng)今千兆接口的時(shí)代,似乎帶寬永遠(yuǎn)都不會(huì)耗盡。然而,僅僅是出現(xiàn)一些異常的服務(wù)、數(shù)據(jù)泄漏、系統(tǒng)損壞或者DOS***,就可能耗盡所有的帶寬導(dǎo)致停機(jī)。如果了解自己的正常數(shù)據(jù)使用情況和應(yīng)用程序的模式,就能有效降低成本,有助于規(guī)劃容量。

Pod資源。如果能知道pod需要什么資源的話,Kubernetes調(diào)度器就能最大化發(fā)揮作用。它可以確保在可用的節(jié)點(diǎn)上放置pod。在設(shè)計(jì)網(wǎng)絡(luò)時(shí),為了避免剩余節(jié)點(diǎn)無法運(yùn)行所有所需的資源的情況,需要預(yù)先考慮有多少節(jié)點(diǎn)可能會(huì)失敗。使用云自動(dòng)伸縮組之類的服務(wù)可以快速恢復(fù),但要確保其余節(jié)點(diǎn)在失敗節(jié)點(diǎn)恢復(fù)回來之前,能夠處理增加的負(fù)載。

Kubernetes服務(wù)

組成Kubernetes Master或者Worker的所有組件(包括etcd)都對(duì)應(yīng)用程序的健康運(yùn)行至關(guān)重要。如果其中任何一個(gè)出現(xiàn)失敗,監(jiān)控系統(tǒng)就需要檢測(cè)失敗,修復(fù)它并且發(fā)送警告。

內(nèi)部服務(wù)

最后一層是Kubernetes資源本身。Kubernetes公開了關(guān)于資源的度量,我們還可以直接監(jiān)控應(yīng)用程序。雖然Kubernetes會(huì)盡力維持理想的狀態(tài),但如果它無能為力的話,我們就需要一種由人類干預(yù)和解決問題的方法了。

用Rancher來監(jiān)控

除了管理運(yùn)行在任何提供者上、任何位置的Kubernetes集群外,Rancher還會(huì)監(jiān)控這些集群中運(yùn)行的資源,并在資源超過定義的閾值時(shí)發(fā)送警報(bào)。

現(xiàn)在已經(jīng)有許多關(guān)于如何部署Rancher的教程。如果你還沒有正在運(yùn)行的集群,請(qǐng)先在這里暫停,進(jìn)入我們的快速上手指南:https://rancher.com/quick-start/。等到集群正在運(yùn)行了再返回到這里開始監(jiān)控。

集群概述可以讓你了解正在使用的資源和Kubernetes組件的狀態(tài)。在我們的例子中,我們使用了78%的CPU、26%的RAM和11%的最大pod數(shù)量。

Kubernetes集群監(jiān)控詳解

點(diǎn)擊Nodes選項(xiàng)卡,你可以看到關(guān)于運(yùn)行在集群上每個(gè)節(jié)點(diǎn)的附加信息,點(diǎn)擊具體節(jié)點(diǎn)時(shí),可以看到關(guān)于該成員的健康狀況。

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Workloads選項(xiàng)卡顯示了運(yùn)行在集群上的pods。如果你還沒有任何運(yùn)行的pod,先發(fā)布一個(gè)運(yùn)行nginx鏡像的工作負(fù)載,把它擴(kuò)展成多個(gè)副本。

當(dāng)需要選擇工作負(fù)載名稱時(shí),Rancher會(huì)彈出一個(gè)顯示有關(guān)該工作負(fù)載的信息頁面。在頁面頂部,它展示了每個(gè)pod所運(yùn)行的節(jié)點(diǎn),pod的IP地址以及它們的狀態(tài)。點(diǎn)擊任何一個(gè)pod會(huì)看到更多內(nèi)容,現(xiàn)在我們看到了關(guān)于該pod的詳細(xì)信息。右上角的漢堡菜單圖標(biāo)能讓我們和pod交互,通過該圖標(biāo),我們可以執(zhí)行shell、查看日志或者刪除pod。

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Other選項(xiàng)卡展示了不同Kubernetes資源的信息,包括ingress或LoadBalancer類型的服務(wù)的Load Balancing,其他服務(wù)類型的Service Discovery以及在集群中配置卷的Volumes。

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

使用Prometheus監(jiān)控

Rancher UI中可以看到的信息對(duì)故障排除非常有幫助,不過這并不是在集群生命周期的每一時(shí)刻積極追蹤集群狀態(tài)的最佳方法。我們將使用Prometheus,它是Kubernetes公司的一個(gè)兄弟項(xiàng)目,由Cloud Native Computing Foundation負(fù)責(zé)維護(hù)和運(yùn)營。我們還將使用到Grafana工具,它能把時(shí)間序列數(shù)據(jù)轉(zhuǎn)換成漂亮的圖形和儀表板顯示。

Prometheus是一個(gè)用來監(jiān)控系統(tǒng)和生成警報(bào)的開源應(yīng)用程序。從服務(wù)器到應(yīng)用程序、數(shù)據(jù)庫、甚至單個(gè)進(jìn)程,它幾乎可以監(jiān)控任何東西。在Prometheus的詞表中,它監(jiān)控targets,目標(biāo)的每個(gè)單位稱為metric。檢索關(guān)于目標(biāo)信息的行為稱為scraping(抓?。rometheus將在指定的時(shí)間間隔內(nèi)采集目標(biāo),并把信息存儲(chǔ)在時(shí)間序列數(shù)據(jù)庫中。Prometheus擁有自己的腳本語言PromQL。

Grafana也是開源的,可以作為Web應(yīng)用程序運(yùn)行。雖然它經(jīng)常和Prometheus一起使用,但也支持后端數(shù)據(jù)存儲(chǔ),如fluxDB、Graphite、Elasticsearch等等。Grafana可以很容易地創(chuàng)建圖形,并且把它們合并稱儀表板,而這些儀表板由一個(gè)強(qiáng)大的身份驗(yàn)證和授權(quán)層保護(hù),它們還可以和其他儀表板進(jìn)行共享而不需要訪問服務(wù)器本身。Grafana在其對(duì)象定義中大量使用JSON,這樣它的圖形和儀表板都非常容易移植,并且版本控制非常方便。

在Rancher的應(yīng)用程序目錄中已經(jīng)同時(shí)包含了Prometheus和Grafana,我們只需點(diǎn)擊幾下鼠標(biāo)就能部署它們了。

安裝Prometheus和Grafana

訪問集群的Catalog Apps頁面,搜索Prometheus。安裝它的同時(shí)還會(huì)安裝Grafana和AlertManager。對(duì)本文來說,所有內(nèi)容都使用默認(rèn)值就可以了,但如果考慮到生產(chǎn)部署,請(qǐng)閱讀Detailed Descriptions下的信息,看看圖表中有多少配置可供使用。

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

單擊Launch,Rancher將把應(yīng)用程序部署到集群中,幾分鐘之后,你就能看到prometheus命名空間下所有工作負(fù)載處于Active狀態(tài)。

Kubernetes集群監(jiān)控詳解

默認(rèn)情況下使用了xip.io設(shè)置Layer7 ingress,我們可以在Load Balancing選項(xiàng)卡上看到它,單擊鏈接打開Grafana儀表板。

Kubernetes集群監(jiān)控詳解

Prometheus的安裝還在Grafana中部署了幾個(gè)儀表板,因此我們可以馬上看到關(guān)于集群的信息,查看它的性能。

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

Kubernetes集群監(jiān)控詳解

總 結(jié)

Kubernetes能盡可能保持應(yīng)用程序的運(yùn)行,但這并不說明我們就不需要了解應(yīng)用程序運(yùn)行的情況。當(dāng)你開始使用Kubernetes工作時(shí),還需要去部署監(jiān)控系統(tǒng),幫助你了解情況并作出決策。

Prometheus和Grafana將幫助你完成這一項(xiàng)工作,如果你使用了Rancher,那部署這兩個(gè)應(yīng)用程序只需要短短幾分鐘。而在即將發(fā)布的Rancher 2.2中,配備了完全集成的Prometheus和Grafana,增強(qiáng)所有Kubernetes集群的可見性,同時(shí)確保不同項(xiàng)目與用戶之間的隔離。Rancher也因此成為唯一一個(gè)在多集群、多租戶環(huán)境中支持Prometheus的解決方案。

使用Prometheus監(jiān)控Rancher管理的Kubernetes環(huán)境,只需要兩個(gè)步驟:

  1. 選擇集群

  2. 一鍵啟動(dòng)監(jiān)控

你可以在此了解如何更加簡(jiǎn)單快速地在多Kubernetes集群和多租戶環(huán)境中使用Prometheus監(jiān)控!

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

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

AI