自動(dòng)化管理大規(guī)模生產(chǎn)級(jí)Kubernetes的七個(gè)方法
譯文【51CTO.com快譯】Kubernetes開(kāi)源容器編排引擎不是一個(gè)管理平臺(tái),也不應(yīng)該被誤認(rèn)為是一個(gè)管理平臺(tái)。編排的要點(diǎn)在于,可靠地讓自動(dòng)化系統(tǒng)能夠便于大規(guī)模部署和管理應(yīng)用程序,不需要在每個(gè)步驟都有人干預(yù)。如果你使用的面向Kubernetes的工具不支持自動(dòng)化,那么你沒(méi)有真正利用編排的好處。
為此,這七個(gè)方法可以讓你自動(dòng)管理生產(chǎn)環(huán)境的Kubernetes集群。
1.日志
任何Kubernetes生產(chǎn)環(huán)境都將高度依賴日志。在Kenzan,我們通常會(huì)努力將平臺(tái)日志與應(yīng)用程序日志分開(kāi)來(lái)。這可以通過(guò)全然不同的工具和應(yīng)用程序來(lái)做到,甚至通過(guò)日志本身里面的過(guò)濾和標(biāo)記來(lái)做到。與任何分布式系統(tǒng)一樣,日志為準(zhǔn)確跟蹤特定的調(diào)用提供了重要的證據(jù),即使它們針對(duì)不同的微服務(wù),那樣就能查明根本原因。
2.自我修復(fù)
我們認(rèn)為,要是沒(méi)有自我修復(fù)功能,你的系統(tǒng)幾乎不可能獲得很長(zhǎng)的正常運(yùn)行時(shí)間,尤其是在分布式環(huán)境中。Kubernetes可以定期監(jiān)測(cè)pod和容器的健康狀況,立即采取措施解決遇到的問(wèn)題。Kubernetes可直接識(shí)別的兩種對(duì)象類型是pod狀態(tài)(podstatus)和容器狀態(tài)(containerstatus)。
容器探針(livenessProbe和readinessProbe)讓你可以定義希望Kubernetes如何監(jiān)測(cè)容器是否處于活動(dòng)狀態(tài)且準(zhǔn)備就緒。readiness probe(就緒探針)尤其有用,因?yàn)槿绻结樖?,它?shí)際上會(huì)讓pod處于運(yùn)行狀態(tài),但并不傳送任何流量。
不過(guò)要注意,雖然每半小時(shí)重啟之類的自我修復(fù)功能很有用,但也可能會(huì)掩蓋應(yīng)用程序的問(wèn)題。你需要足夠強(qiáng)大,能夠發(fā)現(xiàn)出現(xiàn)的任何問(wèn)題的監(jiān)測(cè)和日志功能。
3.彈性測(cè)試
彈性測(cè)試應(yīng)該是你平臺(tái)的一部分,這取決于你應(yīng)用程序的要求(比如99.999%的正常運(yùn)行時(shí)間)。應(yīng)用程序任何級(jí)別的失效都應(yīng)該可以恢復(fù),那樣沒(méi)人會(huì)遇到任何停機(jī)時(shí)間。根據(jù)我們的經(jīng)驗(yàn),如果開(kāi)發(fā)團(tuán)隊(duì)事先知道他們的開(kāi)發(fā)工作會(huì)接受廣泛的彈性測(cè)試,才有可能開(kāi)發(fā)出可靠的應(yīng)用程序。
雖然你可以通過(guò)最簡(jiǎn)單的手動(dòng)方法進(jìn)行一種彈性測(cè)試,比如手動(dòng)關(guān)閉數(shù)據(jù)庫(kù)或隨機(jī)終結(jié)pod,但我們的經(jīng)驗(yàn)證明,這些方法在實(shí)現(xiàn)自動(dòng)化后有效得多。雖然Netflix的Chaos Monkey是一種在亞馬遜網(wǎng)絡(luò)服務(wù)中運(yùn)行的非常強(qiáng)大的、極其有用的彈性測(cè)試工具,但它不是為Kubernetes構(gòu)建的。幸好,Kubernetes領(lǐng)域出現(xiàn)了新興的彈性測(cè)試框架,其中兩個(gè)框架是fabric8 Chaos Monkey(fabric8集成開(kāi)發(fā)環(huán)境的一部分)和kube-monkey。
4.例行審計(jì)
無(wú)論你落實(shí)了多少制衡措施,你的Kubernetes生產(chǎn)環(huán)境都將得益于例行維護(hù)和審計(jì)。例行審計(jì)將涵蓋平常監(jiān)測(cè)涵蓋不了的方面。傳統(tǒng)上,審計(jì)是作為手動(dòng)過(guò)程進(jìn)行的,而這個(gè)領(lǐng)域的自動(dòng)化工具在迅速而顯著地改進(jìn)。
5.自動(dòng)擴(kuò)展
對(duì)于Kubernetes來(lái)說(shuō),擴(kuò)展通常意味著兩者之一:
- 擴(kuò)展pod
 - 擴(kuò)展集群內(nèi)的節(jié)點(diǎn)
 
擴(kuò)展pod絕對(duì)是最常見(jiàn)的擴(kuò)展形式。這將添加更多的服務(wù)實(shí)例,讓它們準(zhǔn)備開(kāi)始接受流量。通常,pod級(jí)別的擴(kuò)展使用Heapster度量標(biāo)準(zhǔn)來(lái)執(zhí)行,確定是否需要?jiǎng)?chuàng)建新實(shí)例。我們通常實(shí)際上將最小pod數(shù)量設(shè)置得很低,讓Kubernetes Horizontal Pod Autoscaler正確設(shè)置最小副本數(shù)量。我們的確始終將最小值設(shè)置成大于每個(gè)群集一個(gè)副本,以免出現(xiàn)單點(diǎn)故障情況。
擴(kuò)展節(jié)點(diǎn)屬于比較少見(jiàn)的情形,但對(duì)于高度彈性的應(yīng)用程序來(lái)說(shuō)是一種非常有用的擴(kuò)展機(jī)制。節(jié)點(diǎn)擴(kuò)展需要底層IaaS(AWS和GCP等)來(lái)擴(kuò)展,并注冊(cè)到Kubernetes集群。這個(gè)過(guò)程可以采用手動(dòng)操作,不過(guò)我們不建議這么做。通常我們使用可以自動(dòng)擴(kuò)展單個(gè)節(jié)點(diǎn)的工具。節(jié)點(diǎn)級(jí)別的自動(dòng)擴(kuò)展器將執(zhí)行兩個(gè)主要操作,***個(gè)是需要時(shí)添加更多節(jié)點(diǎn),第二個(gè)是刪除未充分利用的節(jié)點(diǎn)。
6.資源配額
資源配額讓你可以限制Kubernetes平臺(tái)里面的命名空間,確保一個(gè)應(yīng)用程序不會(huì)占用所有資源,不會(huì)影響其他應(yīng)用程序。設(shè)置資源配額可能有點(diǎn)困難。根據(jù)我們的經(jīng)驗(yàn),按預(yù)期負(fù)載來(lái)劃分命名空間,并使用一個(gè)比率來(lái)計(jì)算集群的百分比是最穩(wěn)妥的方法。運(yùn)行Heapster就可以使用kubectl top {node | pod}命令,該命令顯示當(dāng)前節(jié)點(diǎn)或pod的資源使用情況,這有時(shí)還有助于配額。之后,使用監(jiān)視和審計(jì)來(lái)確定你的分區(qū)是否正確。
7.容器資源約束
搞清楚單個(gè)容器或pod需要多少資源可以說(shuō)已成了一門藝術(shù)。過(guò)去,開(kāi)發(fā)團(tuán)隊(duì)估計(jì)的資源比實(shí)際需要的資源多得多。我們?cè)噲D執(zhí)行某種級(jí)別的負(fù)載測(cè)試,觀察故障切換是如何進(jìn)行的,然后適當(dāng)?shù)胤峙滟Y源。Netflix稱這個(gè)方法為“擠壓測(cè)試”(squeeze testing)。
原文標(biāo)題:7 WAYS TO AUTOMATE KUBERNETES AT SCALE IN PRODUCTION,作者:Craig Martin
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】















 
 
 
















 
 
 
 