管理數(shù)百個(gè)Kubernetes集群需要什么?
要點(diǎn):
- 部署一個(gè)具備生產(chǎn)就緒所需所有依賴關(guān)系的Kubernetes集群需要數(shù)天時(shí)間。
- 如果不自動(dòng)化這個(gè)過(guò)程,管理Kubernetes集群的浮動(dòng)是非常困難的。
- 在多個(gè)集群提供商之間管理Kubernetes集群的浮動(dòng)更加困難。
- 升級(jí)Kubernetes集群需要進(jìn)行密集測(cè)試,以確保更改不會(huì)破壞任何功能。這不是像通常建議的那樣按下“升級(jí)”按鈕就夠了。
管理一個(gè)Kubernetes集群很難,管理全球數(shù)百個(gè)Kubernetes集群又如何呢?
數(shù)百個(gè)Kubernetes集群,包含多個(gè)節(jié)點(diǎn)、服務(wù)、應(yīng)用程序和負(fù)載均衡器。這就是我們?cè)赒overy所做的:管理全球數(shù)百個(gè)Kubernetes生產(chǎn)集群,幫助16000多名開發(fā)者在AWS上部署應(yīng)用。
運(yùn)行和管理數(shù)百個(gè)Kubernetes集群需要什么?這就是本文分享的內(nèi)容。
一些背景
有了Qovery,每個(gè)用戶都可以在幾秒鐘內(nèi)開始在AWS上部署應(yīng)用程序。目標(biāo)是將AWS轉(zhuǎn)變?yōu)榱鲿车拈_發(fā)者體驗(yàn)。通常,我們的用戶來(lái)自Heroku,希望跳入AWS。他們希望擁有Heroku的簡(jiǎn)單性和AWS的靈活性。這就是使用Qovery的意義所在。
為了在這條道路上取得成功,Qovery使用EKS(AWS托管的Kubernetes)來(lái)運(yùn)行和擴(kuò)展無(wú)狀態(tài)應(yīng)用程序。每個(gè)用戶至少有一個(gè)或多個(gè)Kubernetes集群。Qovery的承諾是讓Kubernetes集群生產(chǎn)就緒,這意味著Kubernetes的部署、運(yùn)行和管理都由我們來(lái)完成。負(fù)責(zé)管理集群的軟件稱為Qovery Engine,它是開源的。
部署生產(chǎn)就緒的Kubernetes集群
為了在AWS上自動(dòng)部署Kubernetes,我們創(chuàng)建了一個(gè)開源部署引擎,一個(gè)用Rust編寫的應(yīng)用程序?;旧希鼮镵ubernetes、ingress、auto scaler、Loki、S3初始化虛擬私有云(VPC),以存儲(chǔ)Kubernetes日志,最后是Kubernetes。Qovery引擎使用Terraform、Helm和AWS API。在AWS上,從零到生產(chǎn)就緒的Kubernetes集群需要30分鐘,而不是幾周。
首次在AWS帳戶上使用Qovery時(shí),會(huì)設(shè)置一個(gè)VPC和一個(gè)EKS集群。完全設(shè)置后,Qovery Engine將安裝并連接到Qovery控制平面,以接收應(yīng)用程序部署指令。
運(yùn)行Kubernetes
由于Qovery依賴AWS(EKS)提供的托管Kubernetes,因此運(yùn)行和管理Kubernetes變得簡(jiǎn)單(無(wú)需管理etcd、主節(jié)點(diǎn)和網(wǎng)絡(luò)覆蓋)。AWS通過(guò)管理負(fù)責(zé)整個(gè)集群完整性的主節(jié)點(diǎn),確保集群始終處于運(yùn)行狀態(tài)。
Qovery的附加值是簡(jiǎn)化應(yīng)用程序部署,確保這些應(yīng)用程序正確運(yùn)行。如果出現(xiàn)問(wèn)題,這些應(yīng)用程序和集群本身的所有信息都會(huì)實(shí)時(shí)報(bào)告給用戶。這是由Qovery Engine和Qovery Agent處理的。
讓Kubernetes保持最新
Kubernetes每10周發(fā)布一個(gè)新版本。以這種速度,跟上時(shí)代是一項(xiàng)挑戰(zhàn)。尤其是在發(fā)生重大變化時(shí)。在生產(chǎn)環(huán)境中進(jìn)行升級(jí)之前,必須在臨時(shí)集群上測(cè)試升級(jí),但需要相當(dāng)長(zhǎng)的時(shí)間。
對(duì)我們來(lái)說(shuō)也是如此。在Qovery,有一個(gè)專門的團(tuán)隊(duì)負(fù)責(zé)管理用戶Kubernetes集群的升級(jí)。好消息是,一旦做了一次,它對(duì)每個(gè)集群的效果(幾乎)都是一樣的。
出于安全原因,Qovery Engine連接到Qovery控制平面,并提取集群更新指令。Qovery Engine負(fù)責(zé)所有Kubernetes worker節(jié)點(diǎn)上的滾動(dòng)更新,更新版本和相關(guān)依賴關(guān)系(Loki、ingresses等)。Qovery Engine保證集群完全可運(yùn)行,并準(zhǔn)備好接收新的應(yīng)用部署。
收尾
在本文中,我們已經(jīng)看到了由數(shù)百個(gè)Kubernetes集群組成的浮動(dòng)是如何由Qovery Engine管理的,Qovery Engine是一個(gè)用Rust編寫的開源庫(kù)。部署、運(yùn)行和更新Kubernetes集群需要花費(fèi)大量時(shí)間,并且需要自動(dòng)化以保證其正常運(yùn)行時(shí)間。