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