溫馨提示×

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

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

如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes

發(fā)布時(shí)間:2021-12-28 16:24:38 來(lái)源:億速云 閱讀:123 作者:小新 欄目:云計(jì)算

這篇文章給大家分享的是有關(guān)如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

監(jiān)測(cè)Kubernetes組件

監(jiān)測(cè)Kubernetes集群不是一個(gè)簡(jiǎn)單的事情。為了闡述可能會(huì)發(fā)生的錯(cuò)誤的類(lèi)型,這里是我們?cè)贏WS配置上的一個(gè)例子。


我們集群中的一個(gè)例子完美展示了用SkyDNS運(yùn)行以及所有pods啟動(dòng)的健康狀態(tài),然而,在幾分鐘之后,SkyDNS就進(jìn)入“CrashLoopBackoff”狀態(tài)了。應(yīng)用程序容器已經(jīng)是啟動(dòng)的,但是還在功能失調(diào)階段,因?yàn)樗麄冊(cè)诘谝淮沃匦聠?dòng)的時(shí)候無(wú)法到達(dá)數(shù)據(jù)庫(kù)。


結(jié)果原來(lái)是集群宕機(jī),但是我們只能盯著事件和pods狀態(tài),對(duì)于發(fā)生了什么無(wú)法得到一個(gè)清晰的理解。

如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes

在聯(lián)系到主節(jié)點(diǎn),看了SkyDNS pod的日志之后,他們用etcd揭露一個(gè)問(wèn)題。SkyDNS無(wú)法連接,或者連接在它建立之后立刻變得不穩(wěn)定了。etcd它本身就是在運(yùn)行的,那么問(wèn)題是出在哪里呢?


在做了相當(dāng)一部分的調(diào)查之后,我們找到了answer。高延遲網(wǎng)絡(luò)連接磁盤(pán)導(dǎo)致讀寫(xiě)錯(cuò)誤,這就導(dǎo)致了etcd無(wú)法寫(xiě)到文件系統(tǒng)。雖然它是正確配置而且也在運(yùn)行工作,但是它并不是一直可為Kubernetes服務(wù)所用。


吸取教訓(xùn)——即使你已經(jīng)成功地建立起集群,但也不能保證它就可以像預(yù)期的那樣繼續(xù)工作。
那么在配置期間哪些問(wèn)題比較容易出錯(cuò)呢?問(wèn)題主要有以下這些:

  • 主機(jī)之間沒(méi)有聯(lián)系

  • etcd宕機(jī)或者不穩(wěn)定/錯(cuò)誤配置導(dǎo)致滯后

  • 主機(jī)間的覆蓋網(wǎng)絡(luò)層損壞

  • 單個(gè)節(jié)點(diǎn)中的任意一個(gè)都會(huì)宕機(jī)

  • Kubernetes API服務(wù)器或者控制器管理者宕機(jī)

  • Docker無(wú)法啟動(dòng)容器

  • 網(wǎng)絡(luò)分割會(huì)影響節(jié)點(diǎn)子集

我們?cè)诟谝粚肒ubeCon的參加者交流了一些意見(jiàn),頭腦風(fēng)暴出以下可能的解決辦法:

你怎樣評(píng)估Kubernetes集群的健康?@klizhenas建議創(chuàng)建一個(gè)能夠給pods進(jìn)行調(diào)度以及取消調(diào)度的app;有沒(méi)有人創(chuàng)建一下這個(gè)?

——Brandon Philips(@Brandon  Philips)2015年11月11日

我們?cè)u(píng)估一下來(lái)監(jiān)控Kubernetes的方法:
典型監(jiān)測(cè);
面向應(yīng)用的冒煙測(cè)試

典型監(jiān)測(cè)解決辦法

傳統(tǒng)的監(jiān)控監(jiān)測(cè)方法還沒(méi)有出現(xiàn)短缺。這個(gè)種類(lèi)之中最好的選擇之一就是monit。


這是一個(gè)極其輕便精簡(jiǎn)(單個(gè)執(zhí)行文件),而且久經(jīng)戰(zhàn)場(chǎng)的后臺(tái)程序運(yùn)行在成千上萬(wàn)臺(tái)機(jī)器上面——為小的起步但是是限制到監(jiān)測(cè)單個(gè)系統(tǒng)。這是它最大的缺點(diǎn)。


使用monit過(guò)程中發(fā)現(xiàn)的問(wèn)題之一就是一組測(cè)試執(zhí)行有限和拓展性的缺乏。雖然可配置,但是我們還是不得不通過(guò)寫(xiě)腳本來(lái)拓展它的功能,或者通過(guò)微弱的界面來(lái)使特殊目的程序得到控制。


更加重要的是,我們發(fā)現(xiàn),連接幾個(gè)monit實(shí)例到一個(gè)高可用系統(tǒng)和彈性網(wǎng)絡(luò)是非常難的,而且系統(tǒng)和網(wǎng)絡(luò)還要代理收集自己分享的信息,然后協(xié)同工作來(lái)另這些信息保持更新。

冒煙類(lèi)型測(cè)試

“冒煙測(cè)試”這個(gè)術(shù)語(yǔ)的定義:


“一系列初步的測(cè)試來(lái)揭示一些簡(jiǎn)單的故障的嚴(yán)重性,以此來(lái)拒絕預(yù)期中軟件的發(fā)布。它通常包含一個(gè)子集的測(cè)試,測(cè)試覆蓋了大多數(shù)重要的作用來(lái)確定重要作用在按照預(yù)期運(yùn)行。冒煙測(cè)試最頻繁的特點(diǎn)就是它運(yùn)行的很快,通常是秒級(jí)的?!?/p>


以我們已有的Kubernetes知識(shí),我們堅(jiān)信我們可以使用冒煙測(cè)試用以下特點(diǎn)來(lái)創(chuàng)建一個(gè)監(jiān)視系統(tǒng):

  • 輕量級(jí)定期測(cè)試

  • 高可用性和彈性網(wǎng)絡(luò)分區(qū)

  • 零故障操作環(huán)境

  • 時(shí)間序列作為健康數(shù)據(jù)的歷史

不管故障容易發(fā)生的抽象層次,就算是應(yīng)用程序故障,或者是低層次網(wǎng)絡(luò)錯(cuò)誤,這個(gè)系統(tǒng)都能夠追蹤他們以查到實(shí)際的原因。

Serf啟動(dòng)的監(jiān)測(cè)Agents

我們的高層次解決方案是一系列程序Agent,一個(gè)集群中的一個(gè)節(jié)點(diǎn)駐留在另一個(gè)節(jié)點(diǎn)上。他們互相之間通過(guò)一個(gè)Serf提供的gossip協(xié)議來(lái)交流:

如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes

Kubernetes關(guān)鍵組件的Agents監(jiān)控狀態(tài)——etcd,scheduler,API服務(wù)器和另外一些東西,還有一些執(zhí)行冒煙程序——?jiǎng)?chuàng)建可以互相交流的輕量級(jí)容器。

如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes

Agent定期同步數(shù)據(jù),這樣每個(gè)節(jié)點(diǎn)都是隨時(shí)更新關(guān)于集群作為一個(gè)整體的信息。由于Serf提供的一致性保證比較弱,導(dǎo)致更新信息也不是很?chē)?yán)格。定期測(cè)試結(jié)果保存到后端——這可以很簡(jiǎn)單,就如同一個(gè)SQLite數(shù)據(jù)庫(kù)或者InfluxDB等一系列實(shí)時(shí)數(shù)據(jù)庫(kù)。


擁有一個(gè)對(duì)等系統(tǒng)對(duì)偵測(cè)故障和監(jiān)測(cè)信息十分有幫助,即使系統(tǒng)中的關(guān)鍵部分部分宕機(jī)也沒(méi)有關(guān)系。在下面的例子中,主要節(jié)點(diǎn)以及大部分的節(jié)點(diǎn)都已經(jīng)宕機(jī),這就導(dǎo)致etcd也出了故障。然而,我們?nèi)匀豢梢缘玫疥P(guān)于集群連接到以下任意一個(gè)節(jié)點(diǎn)的診斷信息:

如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes

這里是在部分損壞的系統(tǒng)截圖:

如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes

限制

由于它的簡(jiǎn)易,目前的模型就有了一定的限制。如果是為更小一些的集群(比如8個(gè)節(jié)點(diǎn))就可以運(yùn)行,然而,在一個(gè)再大一點(diǎn)的集群,你就不想每個(gè)節(jié)點(diǎn)都可以互相交流了。這個(gè)解決方式就是我們計(jì)劃采取的方案是創(chuàng)建一個(gè)特殊的聚合器,從Skype的超級(jí)節(jié)點(diǎn)那里或者是從Consul的“anti-entropy catelogs上面借鑒一些想法。

結(jié)語(yǔ)

監(jiān)測(cè)Kubernetes集群的狀態(tài)不是直接使用傳統(tǒng)監(jiān)測(cè)工具就可以了的。手動(dòng)故障排除有一定的復(fù)雜性,在集群里有一個(gè)自動(dòng)反饋循環(huán)的話(huà),就可以消除很大部分的復(fù)雜性。Satellite項(xiàng)目已經(jīng)證明當(dāng)操作集群的時(shí)候?qū)ξ覀兪怯杏玫模晕覀儧Q定對(duì)它進(jìn)行開(kāi)源,希望它可以成為一個(gè)幫助提升kubernetes發(fā)現(xiàn)錯(cuò)誤系統(tǒng)。 

感謝各位的閱讀!關(guān)于“如何在生產(chǎn)過(guò)程中監(jiān)控Kubernetes”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guā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