天天看點

Supergiant.io —— 服務于有狀态應用的容器平台

supergiant是一個使用kubernetes打造的容器托管平台,适用于分布式的有狀态應用。supergiant是由qbox.io團隊所開發的,該團隊同時還提供了托管版本的elasticsearch。

supergiant是一種能夠運作docker容器、以托管有狀态、叢集化應用的架構。它的内部實作利用了kubernetes的功能,但也開發了自有的結構與代碼,以避免出現kubernetes無法滿足需求的場景,例如持久化儲存以及外部的負載均衡。infoq與qbox的ceo和聯合創始人,同時也是supergiant的建立者mark brandon進行了一次訪談,以深入了解supergiant的技術細節。

qbox.io團隊早期的業務是提供托管版本的elasticsearch,當時他們經曆過各種問題,其中包括由于因“吵鬧的鄰居”效應(本意是指某個vm由于存儲而産生的大量i/o操作對同一環境中其他vm的影響)而難以實作擴充的情況。根據團隊的部落格文章所說,對于管理互聯的容器與卷的管理,docker與kubernetes看起來是一種正确的選擇。

部署在supergiant平台上的應用中所涉及的存儲功能都被配置設定在高可用的陣列中,但它并沒有使用kubernetes中的持久化資料卷。aws目前已經提供了對supergiant的支援,supergiant使用了aws中的elastic block store(ebs),是以資料卷可随意在叢集中移動。ebs中的資料卷的行為類似于硬碟,可接入虛拟機中或者撤消(也可進行挂載與解除安裝)。由于ebs資料卷的持久化可支援節點伺服器的重新開機,是以即便某個節點變得不可用,資料也不會丢失。

kubernetes内置了負載均衡與高可用性方面的特性。按照brandon的說法,supergiant特意為外部的負載均衡功能編寫了代碼,因為“雖然kubernetes的内部負載均衡功能十分出色,但它的外部負載均衡政策對于elasticsearch這樣的分布式應用來說并非最佳。”

為了使你的軟體作為一個supergiant應用運作,它必須被打包為一個“元件”。這種元件既可以是一個nosql資料庫,也可以是一個web伺服器或node.js應用。根據brandon所說:“任何一種可被docker化的應用都可以成為一個元件”。supergiant還提供了一套基于http的api,用于元件的定義。

運作在aws環境中的應用都需要滿足一個要求,即可以忍受可用性地域(az)的故障,而對跨區域可用性的支援則是更進階别的能力。根據brandon的說法,supergiant可管理跨多個aws地域的叢集。

本文轉自d1net(轉載)