2018 Qcon上海站:網(wǎng)易云詳解容器平臺Kubernetes的持續(xù)升級實踐

近日,由InfoQ主辦的Qcon全球軟件開發(fā)大會在上海寶華萬豪酒店舉辦,QCon內(nèi)容源于實踐并面向社區(qū),演講嘉賓依據(jù)熱點話題,面向5年以上工作經(jīng)驗的技術(shù)團(tuán)隊負(fù)責(zé)人、架構(gòu)師、工程總監(jiān)、開發(fā)人員分享技術(shù)創(chuàng)新和實踐。在本次大會中,網(wǎng)易云容器編排負(fù)責(zé)人婁超分享了網(wǎng)易云容器平臺Kubernetes的持續(xù)升級實踐經(jīng)驗。

2018 Qcon上海站:網(wǎng)易云詳解容器平臺Kubernetes的持續(xù)升級實踐

據(jù)婁超介紹,網(wǎng)易云容器服務(wù)的前身是蜂巢,上線于2015年,也是國內(nèi)第一個基于Kubernetes提供多租戶的微服務(wù)容器平臺。Kubernetes多用于私有云,并沒有租戶的概念,網(wǎng)易云在Kubernetes基礎(chǔ)上擴(kuò)展了多租戶的能力,與IaaS做了無縫融合,支持集群虛擬機、物理機和GPU混布的異構(gòu)計算;同時網(wǎng)易云提供的容器服務(wù)是無服務(wù)架構(gòu)的,用戶只需關(guān)心鏡像和對計算資源的需求情況,底層可自動擴(kuò)展和銷毀資源。

目前,網(wǎng)易云容器服務(wù)已經(jīng)在線上持續(xù)運行三年多,歷經(jīng)三個階段:初期,網(wǎng)易云容器服務(wù)是為開發(fā)者打造的容器云平臺,基于Kubernetes 1.0,支持多租戶,僅提供無狀態(tài)/有狀態(tài)兩種負(fù)載;發(fā)展期,網(wǎng)易云容器服務(wù)2.0基于Kubernetes 1.3/1.6,支持單用戶多Namespace,定制有狀態(tài)容器,做了全面的性能優(yōu)化和架構(gòu)重構(gòu);融合期,網(wǎng)易云容器服務(wù)3.0符合Kubernetes一致性認(rèn)證,可以同時支持K8s API和Serverless模式OpenAPI。婁超表示,Kubernetes自開源以來一直有著活躍的社區(qū)和用戶,版本升級周期已經(jīng)穩(wěn)定在三個月,作為基于Kubernetes的容器服務(wù)應(yīng)該選擇在何時升級,升到哪個版本都需要全面的考量。

升級面臨三大挑戰(zhàn)

升級是基于Kubernetes的云平臺和用戶必然會面臨的場景和挑戰(zhàn)。根據(jù)網(wǎng)易云的經(jīng)驗,婁超總結(jié)了三大挑戰(zhàn):首先,社區(qū)更新快,版本變化大,升級工具不夠成熟;其次,容器形態(tài)的不斷演進(jìn)促使網(wǎng)易云要持續(xù)發(fā)展才能跟上社區(qū)節(jié)奏;最后,平臺在升級的過程中要考慮用戶的使用模式和用戶業(yè)務(wù)的穩(wěn)定性。

如何升級?網(wǎng)易云總結(jié)四個經(jīng)驗

那么,網(wǎng)易云容器集群是如何升級的?婁超首先例舉了GKE的升級模式,先升級Master,再升級Slave端,Master服務(wù)鏡像一鍵升級或自動升級,Nodes用戶手動滾動更新或配置自動升級,通過驅(qū)趕老Node用戶容器升級Nodes。為什么Google會采用這種對用戶并不太友好的升級方式呢?Ahmet是GKE的核心開發(fā)人員,曾在twitter上總結(jié)過業(yè)務(wù)零停服的Kubernetes升級建議,包括充分利用Kubernetes多副本,健康探測,信號處理,設(shè)置最長等待時間等特性。實際上,需要平臺供應(yīng)商嚴(yán)格按照最佳實踐方式去用,才能保證業(yè)務(wù)的穩(wěn)定性。

回看網(wǎng)易云容器服務(wù)的Kubernetes的升級,主要經(jīng)歷了三次升級過程。據(jù)婁超透露,網(wǎng)易云容器初期1.0線上用戶中,個人小用戶占了大多數(shù),有狀態(tài)單體容器占大部分,用法也比較隨意。在1.0升級到2.0的過程中,網(wǎng)易云主要要考慮了Kubernetes 1.3和1.0版本的差異,以及容器服務(wù)本身功能的變化。限于Kubernetes版本和Docker版本的兼容性并不好,這次升級主要做了三方面的探索:通過負(fù)載均衡幫用戶將流量平滑地遷移過去;保證K8s集群底層虛擬網(wǎng)絡(luò)互通,用戶可以通過自己的服務(wù)注冊服務(wù)發(fā)現(xiàn)服務(wù)實現(xiàn)遷移;對于將容器當(dāng)做虛擬機來用的用戶,通過docker commit替換本地鏡像,幫用戶升級Node。

隨著容器技術(shù)的普及,網(wǎng)易云容器服務(wù)升級到2.0后,用戶對容器的使用也逐步趨于規(guī)范。婁超分享了在這次升級中對業(yè)務(wù)影響最小的熱升級方案:為了做到對所有容器無感知的升級,要做到不遷移Node,不重啟容器。據(jù)婁超介紹,為了達(dá)到這種Node In-Place升級,網(wǎng)易云主要通過kubelet v1.3可以無縫接管v1.0老容器,實現(xiàn)了容器的不重啟,通過容器網(wǎng)絡(luò)方案兼容實現(xiàn)了網(wǎng)絡(luò)的不中斷。

在升級的過程中,還會遇到Master與Node不兼容的問題。為了解決這個問題,婁超給出的解決方案是,先新建一個新版本的Master,在升級Node的時候,同時把API的地址改到新版本中去,保證升級時所有版本都是兼容的。此外,對于K8s多租戶的集群,升級的風(fēng)險是很大的,網(wǎng)易云采用了灰度升級的方式。

最后,婁超總結(jié)了網(wǎng)易云容器平臺在持續(xù)升級實踐中的經(jīng)驗教訓(xùn)。首先,快速有效地對集群進(jìn)行在線升級的前提是要做好開源選型,這是非常重要的基礎(chǔ),比如Kubernetes就是容器編排領(lǐng)域的最佳選擇;第二,自己造特性需要謹(jǐn)慎,最好不要改開源系統(tǒng)本身的代碼,而要通過API去做功能的擴(kuò)展;第三,要考慮是開源還是自研;第四,要保障版本的快速跟進(jìn)。只有不斷改造原生K8s并與網(wǎng)易云基礎(chǔ)設(shè)施結(jié)合,才能緊跟社區(qū),支撐客戶業(yè)務(wù)多樣化的需求。

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2018-11-12
2018 Qcon上海站:網(wǎng)易云詳解容器平臺Kubernetes的持續(xù)升級實踐
近日,由InfoQ主辦的Qcon全球軟件開發(fā)大會在上海寶華萬豪酒店舉辦,QCon內(nèi)容源于實踐并面向社區(qū),演講嘉賓依據(jù)熱點話題,面向5年以上工作經(jīng)驗的技術(shù)團(tuán)隊負(fù)責(zé)

長按掃碼 閱讀全文