摘要:冒煙類型測(cè)試冒煙測(cè)試這個(gè)術(shù)語(yǔ)的定義一系列初步的測(cè)試來(lái)揭示一些簡(jiǎn)單的故障的嚴(yán)重性,以此來(lái)拒絕預(yù)期中軟件的發(fā)布。冒煙測(cè)試最頻繁的特點(diǎn)就是它運(yùn)行的很快,通常是秒級(jí)的。
Satellite是硅谷初創(chuàng)公司Gravitational公司旗下一個(gè)用Go寫的開源項(xiàng)目,可用來(lái)收集Kubernetes集群的健康信息,它既是一個(gè)library,也是一個(gè)應(yīng)用。作為library,可以用做監(jiān)控方案。在這篇文章里,Satellite項(xiàng)目成員為我們分享了在一些場(chǎng)景下在底層(包括AWS 和裸機(jī)上)部署Kubernetes集群時(shí)遇到的問(wèn)題和他們?cè)陂_發(fā)過(guò)程中用來(lái)解決其中一些問(wèn)題的解決方案。
監(jiān)測(cè)Kubernetes組件監(jiān)測(cè)Kubernetes集群不是一個(gè)簡(jiǎn)單的事情。為了闡述可能會(huì)發(fā)生的錯(cuò)誤的類型,這里是我們?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è)清晰的理解。
在聯(lián)系到主節(jié)點(diǎn),看了SkyDNS pod的日志之后,他們用etcd揭露一個(gè)問(wèn)題。SkyDNS無(wú)法連接,或者連接在它建立之后立刻變得不穩(wěn)定了。etcd它本身就是在運(yùn)行的,那么問(wèn)題是出在哪里呢?
在做了相當(dāng)一部分的調(diào)查之后,我們找到了答案。高延遲網(wǎng)絡(luò)連接磁盤導(dǎo)致讀寫錯(cuò)誤,這就導(dǎo)致了etcd無(wú)法寫到文件系統(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的參加者交流了一些意見,頭腦風(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è)試
傳統(tǒng)的監(jiān)控監(jiān)測(cè)方法還沒(méi)有出現(xiàn)短缺。這個(gè)種類之中最好的選擇之一就是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ò)寫腳本來(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)另這些信息保持更新。
“冒煙測(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í)的。”
以我們已有的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)交流:
Kubernetes關(guān)鍵組件的Agents監(jiān)控狀態(tài)——etcd,scheduler,API服務(wù)器和另外一些東西,還有一些執(zhí)行冒煙程序——?jiǎng)?chuàng)建可以互相交流的輕量級(jí)容器。
Agent定期同步數(shù)據(jù),這樣每個(gè)節(jié)點(diǎn)都是隨時(shí)更新關(guān)于集群作為一個(gè)整體的信息。由于Serf提供的一致性保證比較弱,導(dǎo)致更新信息也不是很嚴(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)的診斷信息:
這里是在部分損壞的系統(tǒng)截圖:
限制由于它的簡(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)的話,就可以消除很大部分的復(fù)雜性。Satellite項(xiàng)目已經(jīng)證明當(dāng)操作集群的時(shí)候?qū)ξ覀兪怯杏玫模晕覀儧Q定對(duì)它進(jìn)行開源,希望它可以成為一個(gè)幫助提升kubernetes發(fā)現(xiàn)錯(cuò)誤系統(tǒng)。
(如果需要轉(zhuǎn)載,請(qǐng)聯(lián)系我們哦,尊重知識(shí)產(chǎn)權(quán)人人有責(zé))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/32446.html
摘要:使用社區(qū)檢測(cè)教程測(cè)試新的結(jié)合,并通過(guò)有關(guān)在中使用的新教程進(jìn)一步提高高級(jí)技能。衛(wèi)星集合衛(wèi)星集合是這次合作的令人振奮的結(jié)果。然后,會(huì)將部分結(jié)果發(fā)送回協(xié)調(diào)器,該協(xié)調(diào)器匯總了最終結(jié)果。 經(jīng)過(guò)數(shù)月的研發(fā)測(cè)評(píng),開源多模型數(shù)據(jù)庫(kù)ArangoDB 終于發(fā)布了其 3.2 正式版,該版本消除了兩個(gè)重大的障礙,添加了一個(gè)期待已久的功能,還集成了一個(gè)有趣的功能。此外,官方團(tuán)隊(duì)表示新版本將 ArangoDB 的...
摘要:使用社區(qū)檢測(cè)教程測(cè)試新的結(jié)合,并通過(guò)有關(guān)在中使用的新教程進(jìn)一步提高高級(jí)技能。衛(wèi)星集合衛(wèi)星集合是這次合作的令人振奮的結(jié)果。然后,會(huì)將部分結(jié)果發(fā)送回協(xié)調(diào)器,該協(xié)調(diào)器匯總了最終結(jié)果。 經(jīng)過(guò)數(shù)月的研發(fā)測(cè)評(píng),開源多模型數(shù)據(jù)庫(kù)ArangoDB 終于發(fā)布了其 3.2 正式版,該版本消除了兩個(gè)重大的障礙,添加了一個(gè)期待已久的功能,還集成了一個(gè)有趣的功能。此外,官方團(tuán)隊(duì)表示新版本將 ArangoDB 的...
摘要:挑戰(zhàn)缺乏端到端的可視性傳統(tǒng)監(jiān)控的最常見問(wèn)題之一,是缺乏對(duì)客戶接觸點(diǎn)和分布式應(yīng)用程序的端到端可視性。為了解決這個(gè)問(wèn)題,使用基于正常性能的監(jiān)控解決方案非常重要,并且可以利用機(jī)器學(xué)習(xí)的強(qiáng)大功能,從而在出現(xiàn)問(wèn)題時(shí)智能地向團(tuán)隊(duì)發(fā)出警報(bào)。 Kubernetes(K8S)現(xiàn)在似乎是管理和部署基于微服務(wù)和容器的應(yīng)用程序的事實(shí)標(biāo)準(zhǔn)——其中緣由亦不難理解。Kubernetes是最大的開源社區(qū),它由云原生計(jì)...
摘要:宋體自年被開源以來(lái),很快便成為了容器編排領(lǐng)域的標(biāo)準(zhǔn)。宋體年月,樂(lè)心醫(yī)療的第一個(gè)生產(chǎn)用集群正式上線。所以于年推出后,樂(lè)心醫(yī)療的運(yùn)維團(tuán)隊(duì)在開會(huì)討論之后一致決定盡快遷移到。Kubernetes 自 2014 年被 Google 開源以來(lái),很快便成為了容器編排領(lǐng)域的標(biāo)準(zhǔn)。因其支持自動(dòng)化部署、大規(guī)模可伸縮和容器化管理等天然優(yōu)勢(shì),已經(jīng)被廣泛接納。但由于 Kubernetes 本身的復(fù)雜性,也讓很多企業(yè)的...
閱讀 2072·2021-10-12 10:12
閱讀 791·2021-09-24 09:47
閱讀 1192·2021-08-19 11:12
閱讀 3468·2019-08-29 13:06
閱讀 689·2019-08-26 11:43
閱讀 2571·2019-08-23 17:20
閱讀 1154·2019-08-23 16:52
閱讀 2601·2019-08-23 14:27