Kubernetes已經(jīng)成為容器編排系統(tǒng)的事實(shí)標(biāo)準(zhǔn),是現(xiàn)在主流的跨云容器化應(yīng)用操作系統(tǒng)。
但是,Kubernetes的目標(biāo)并不是容器本身,而是承載其上的應(yīng)用,本質(zhì)上是為了解決(容器化)應(yīng)用上云這個(gè)難題。
容器和K8s的出現(xiàn), 提供了一套統(tǒng)一的抽象核心,使得圍繞他們實(shí)現(xiàn)多云業(yè)務(wù)成為可能。
那么,非容器化應(yīng)用怎么辦?
本篇將告訴你,K8s不管的,我們?cè)趺垂埽?/strong>
容器化應(yīng)用怎么跑多云?
我們從K8s學(xué)到了三個(gè)大招
非容器化應(yīng)用怎么跑多云?
多云環(huán)境下,如果某些云出現(xiàn)不可抗拒性故障時(shí),對(duì)上層企業(yè)應(yīng)用有多少影響?
非容器化應(yīng)用,即不支持容器化的應(yīng)用,既包括了Legacy APP,也包括那些因?yàn)樯虡I(yè)原因不支持容器化的應(yīng)用,比如很多傳統(tǒng)HPC應(yīng)用。我們面向的像生命科學(xué)/半導(dǎo)體/汽車制造這些行業(yè)用戶很多時(shí)候使用的就是非容器化應(yīng)用。

基于本地+多云的系統(tǒng)架構(gòu),大致分為以下四個(gè)層面:應(yīng)用層,業(yè)務(wù)調(diào)度層,資源配置層,云提供商層。

云提供商提供的是底層基礎(chǔ)設(shè)施和資源。
資源配置層是把云提供商的資源進(jìn)行集群化管理,再進(jìn)一步池化,抽象,變成一個(gè)動(dòng)態(tài)的池子。
因?yàn)槲覀兊挠脩舻男枨蟛皇且粋€(gè)恒定的值,是有波動(dòng)的,有時(shí)候短期內(nèi)會(huì)有很大的需求,但除了這些時(shí)間之外,大部分時(shí)候沒有那么大需求,所以我們需要?jiǎng)討B(tài)管理/動(dòng)態(tài)申請(qǐng)?jiān)瀑Y源的抽象。
業(yè)務(wù)調(diào)度層解決的問題是怎么把應(yīng)用把跑在我們抽象好的這些資源上面,跑在哪里,怎么跑,這些問題。
1
容器化應(yīng)用怎么跑多云
對(duì)于容器化應(yīng)用來說:
K8s解決了業(yè)務(wù)調(diào)度這一層,怎么把應(yīng)用跑在我們配置的環(huán)境上面,容器化應(yīng)用提供了統(tǒng)一的調(diào)度對(duì)象。因?yàn)镵8s有一個(gè)統(tǒng)一的抽象了,所以你可以把K8s部署在不同的云上面,通過統(tǒng)一的管理方式,實(shí)現(xiàn)多云的工作負(fù)載分配。

但是K8s沒有解決的問題是,怎么構(gòu)建各個(gè)云上的K8s集群。
雖然說CNCF(云原生計(jì)算基金會(huì))社區(qū)里有很多各種各樣的工具,比如說像terraform,可以幫助用戶構(gòu)建集群,但是畢竟它是一個(gè)獨(dú)立的工具,難免會(huì)增加用戶的學(xué)習(xí)成本。而且,你如果想要控制某一個(gè)workload,動(dòng)態(tài)地申請(qǐng)這些資源,就得自己去開發(fā)定制這些額外的東西。
對(duì)用戶來說,這些都是實(shí)現(xiàn)多云的阻礙。
2
我們從K8s學(xué)到了三個(gè)大招
統(tǒng)一的抽象層
通過抽象統(tǒng)一的控制界面(API),可以屏蔽掉底層的區(qū)別,來管理不同的云上類似的資源。用戶不需要直接接觸使用底層的資源,我們可以根據(jù)這個(gè)抽象來提供更可擴(kuò)展的stack。
聲明式的基礎(chǔ)架構(gòu)描述方式
利用抽象出來的控制界面,統(tǒng)一描述云上互相關(guān)聯(lián)的計(jì)算資源,而這同一套描述可以應(yīng)用在不同的云上。
K8s描述的是一個(gè)狀態(tài),我們覺得這是一個(gè)很好的東西。為什么呢?
因?yàn)槁暶魇降臉?gòu)架描述的是狀態(tài),所以把怎么樣達(dá)到這個(gè)狀態(tài)這件事情,交給了平臺(tái)本身,我們就可以根據(jù)現(xiàn)在平臺(tái)的狀態(tài)以及這些資源的狀態(tài),比如說價(jià)格這些方面來調(diào)配我們?cè)趺礃尤ミ_(dá)到這個(gè)狀態(tài)。
自動(dòng)化管理
利用API,大多數(shù)的業(yè)務(wù)流程可以實(shí)現(xiàn)自動(dòng)化,減少維護(hù)人員負(fù)擔(dān)。
例如根據(jù)業(yè)務(wù)的規(guī)模和用戶指定的策略,動(dòng)態(tài)地伸縮集群規(guī)模,實(shí)現(xiàn)最大化地利用資源。對(duì)于一些可被替換的計(jì)算實(shí)例,同時(shí)可實(shí)現(xiàn)自動(dòng)化替換和計(jì)算恢復(fù)等。
3
非容器化應(yīng)用怎么跑多云?
我們要解決的核心需求是:對(duì)于不適合容器化的應(yīng)用,我們也可以采用聲明的方式定義資源需求和運(yùn)行方式,在不改變應(yīng)用內(nèi)部邏輯的情況下,將應(yīng)用運(yùn)行在多云的環(huán)境中。
用戶在使用這些應(yīng)用的時(shí)候會(huì)有一個(gè)順序,比如說先跑某個(gè)應(yīng)用,然后產(chǎn)生了一些中間數(shù)據(jù),中間數(shù)據(jù)會(huì)被喂給下一級(jí)的應(yīng)用,被下一級(jí)的應(yīng)用消耗,以這樣的工作流達(dá)到最終他要的目的。這個(gè)流程就變成我們用來調(diào)度和抽象,分配這些應(yīng)用的點(diǎn)。
我們的系統(tǒng)里面設(shè)計(jì)了五個(gè)主要的組件:
云服務(wù)抽象Serverless層
統(tǒng)一集群描述系統(tǒng)
智能策略調(diào)度系統(tǒng)
工作流引擎
分布式文件緩存系統(tǒng)

云服務(wù)抽象Serverless層
云抽象層把每個(gè)云上面常用的一些組件,比如說像instance虛機(jī),網(wǎng)絡(luò),鏡像,子網(wǎng)、防火墻,對(duì)這些常見的功能我們做了抽象。將所有的云資源,不管是本地還是公有的,變?yōu)橐粋€(gè)大的資源池。并且能夠把功能和資源拆分開,利用下層的異構(gòu)的多云的計(jì)算資源,動(dòng)態(tài)地為用戶提供服務(wù)。對(duì)于每種資源的操作,轉(zhuǎn)換為對(duì)應(yīng)云提供商API的操作。
這個(gè)抽象層還可以幫助我們實(shí)現(xiàn)一些有的云有,有的云沒有的功能。
比如AWS現(xiàn)在有一個(gè)Spot Fleet的功能,你可以告訴它我需要多少臺(tái)機(jī)器,什么樣的機(jī)器,然后你可以在一個(gè)范圍里去選擇。這個(gè)功能我們?cè)诎⒗镌苹蛘咂渌粕蠜]有見到,現(xiàn)在我們可以通過抽象來自己實(shí)現(xiàn)這樣一個(gè)功能。
很可惜,不是所有的云資源都能通過這樣統(tǒng)一的抽象,特別是一些高端的資源,比如AWS Lambda這種我們就沒法抽象。因?yàn)樗抢昧说讓淤Y源做了一個(gè)更高級(jí)別的優(yōu)化,或者說是更高級(jí)別的簡(jiǎn)化而形成的,在不同的云上是不一樣的,有些云可能沒有。
統(tǒng)一集群描述系統(tǒng)
我們學(xué)習(xí)了K8s,在這個(gè)基礎(chǔ)上提供了一個(gè)統(tǒng)一的基礎(chǔ)架構(gòu)描述系統(tǒng),通過聲明式描述來定義基礎(chǔ)架構(gòu)。簡(jiǎn)單來說,你要的這些虛機(jī)或者是這些虛機(jī)之間的關(guān)系是怎么樣去定義的。
像Hashicorp提供的terraform就提出“infrastructure as code”,架構(gòu)即代碼。我們也用了這個(gè)理念,好處是你能夠明確看到你的架構(gòu)是什么樣的,并且你可以描述這個(gè)狀態(tài)。比如說你在一個(gè)云上面定義并實(shí)現(xiàn)了這樣一個(gè)架構(gòu),你就可以把它搬到另一個(gè)云上去,而且不會(huì)出錯(cuò)。
實(shí)現(xiàn)“Write once, run anywhere”的跨云浮動(dòng)。
智能策略調(diào)度系統(tǒng)
有了前面兩個(gè)作為基礎(chǔ),我們就可以實(shí)現(xiàn)根據(jù)用戶偏好的智能調(diào)度。
前面我們提過我們的集群是一個(gè)動(dòng)態(tài)的集群,是可以根據(jù)某種策略或者云上的狀態(tài)來決定這些業(yè)務(wù)跑在哪里的一個(gè)過程,所以我們有一個(gè)智能調(diào)度策略系統(tǒng),它會(huì)根據(jù)用戶的輸入,這個(gè)數(shù)據(jù)有多大,用戶的偏好是什么來進(jìn)行調(diào)度。
如果用戶偏好是成本,可以接受一定程度上的慢。我們就可以找一些便宜的資源,比如像AWS的Spot instance(spot是我們可以以很低的價(jià)格來使用的資源),但這種資源并不保證一直都有。如果用戶選擇了這樣的偏好,我們系統(tǒng)會(huì)在一定程度上去等這個(gè)資源,當(dāng)這個(gè)資源有的時(shí)候我們?nèi)ヅ埽梢栽谕砩希蛘哂匈Y源的時(shí)候再跑這個(gè)任務(wù)。如果用戶非常希望很快地把結(jié)果算出來,我們可以調(diào)動(dòng)云上我們可以申請(qǐng)得到的最快的資源來幫用戶把這個(gè)事情給計(jì)算出來。
工作流引擎
通常,用戶在使用他們的應(yīng)用的時(shí)候會(huì)有一個(gè)工作流程。比如第一步使用什么程序,第二步使用什么程序。我們?cè)谙到y(tǒng)里集成了一個(gè)工作流引擎,用戶可以通過圖形化的方式來編輯這個(gè)工作流。而且系統(tǒng)里已經(jīng)預(yù)裝了一些常見的流程,支持順序地執(zhí)行任務(wù)。
不同的步驟有不同的特點(diǎn)。比如有些步驟可能需要很多節(jié)點(diǎn)同時(shí)來執(zhí)行一些任務(wù),并發(fā)量比較大,有些步驟可能沒有那么大。我們可以根據(jù)這個(gè)工作流來調(diào)整我們的集群規(guī)模,這樣也可以幫用戶節(jié)省成本。

分布式文件緩存系統(tǒng)
這是一個(gè)比較重要的點(diǎn):數(shù)據(jù)訪問。
一個(gè)程序或者一個(gè)應(yīng)用是不能單獨(dú)完成工作的,肯定需要數(shù)據(jù)。傳統(tǒng)應(yīng)用大部分是設(shè)計(jì)在Linux/UNIX上面的,用戶可以直接通過文件的方式訪問這些數(shù)據(jù)的。
所以我們需要兩點(diǎn):
一、有一個(gè)直接訪問數(shù)據(jù)的方式,并且把數(shù)據(jù)訪問構(gòu)建在多云上面。
二、用戶的數(shù)據(jù)可能已經(jīng)存在現(xiàn)有的一些存儲(chǔ)系統(tǒng)上,比如S3/OSS/NFS。我們覺得應(yīng)該直接去利用用戶現(xiàn)有的這些數(shù)據(jù),而不是再?gòu)?fù)制一遍,做一個(gè)新的存儲(chǔ)系統(tǒng)。一種常見方式是:把集群建立起來,建立一個(gè)臨時(shí)的數(shù)據(jù)倉(cāng)庫(kù),把數(shù)據(jù)從原來的地方復(fù)制到這個(gè)數(shù)據(jù)倉(cāng)庫(kù)里使用,使用完了之后再?gòu)?fù)制回去。我們想建立這樣的一個(gè)緩存系統(tǒng)來避免這種復(fù)制,這樣可以節(jié)省用戶集群構(gòu)建的時(shí)間。很多時(shí)候用戶都是把數(shù)據(jù)放在一個(gè)很大的集合里,原來那種方式很難避免把不需要用的數(shù)據(jù)也復(fù)制過來。比如說我們有一個(gè)分布式計(jì)算,這個(gè)計(jì)算中不需要使用的數(shù)據(jù)我們也要把它復(fù)制出來。考慮到這一點(diǎn),我們只把需要使用的那個(gè)部分緩存到現(xiàn)有系統(tǒng)里來,計(jì)算完后再寫回到目標(biāo)的存儲(chǔ)系統(tǒng)里面。

而且這個(gè)設(shè)計(jì)是一個(gè)scale out架構(gòu),當(dāng)性能達(dá)不到用戶要求的時(shí)候,可以通過增加節(jié)點(diǎn)的方式來擴(kuò)展性能。
我們還支持不同的緩存策略。可以有多個(gè)不同的data server,數(shù)據(jù)服務(wù)器可以在不同的云上,這樣的話就把數(shù)據(jù)緩存在了計(jì)算真正需要的地方,可以加速數(shù)據(jù)訪問。比如說我的計(jì)算是在這個(gè)云上面,算完之后,希望把它寫回到某個(gè)目標(biāo)的存儲(chǔ)上面。
支持自動(dòng)預(yù)取和手動(dòng)預(yù)取。意思是說,我們?cè)谧鲇?jì)算的時(shí)候知道應(yīng)用放在哪里,所以我們可以告訴我們的緩存系統(tǒng),需要把數(shù)據(jù)先遷移到哪里去,這樣就避免了不必要的拷貝,在訪問的時(shí)候能夠很快地去使用數(shù)據(jù)。
4
多云環(huán)境下,如果某些云出現(xiàn)不可抗拒性故障,對(duì)上層企業(yè)應(yīng)用有多少影響?
具體的影響需要看具體的部署方式和應(yīng)用本身來分析。
我們采用的是雙層調(diào)度的概念:
第一層調(diào)度分配業(yè)務(wù)位置,解決的問題是我要把資源放在哪里。
第二層調(diào)度分配業(yè)務(wù)內(nèi)部工作負(fù)載。
我已經(jīng)決定把工作負(fù)載放在這個(gè)云上的時(shí)候,我會(huì)在這個(gè)云上建立一個(gè)集群。任務(wù)的一部分就會(huì)在這個(gè)集群里運(yùn)行,我們?cè)谡麄€(gè)過程都是在監(jiān)控的,如果某種原因某個(gè)地方被停掉了,發(fā)生障礙,上層調(diào)度會(huì)發(fā)現(xiàn)這件事情,我們會(huì)自動(dòng)把任務(wù)調(diào)度到另外一個(gè)地方去,或者另一個(gè)云上。一般調(diào)度時(shí), 業(yè)務(wù)整體會(huì)被分配到一個(gè)云上。如果由于某種原因整個(gè)云上資源不可訪問時(shí),第一層調(diào)度會(huì)把業(yè)務(wù)調(diào)度到另外的云上。
所以我們才能支持使用spot這種可被搶占的資源,可以及時(shí)調(diào)度到另外的地方去。
- END -
關(guān)于我們:
速石科技專為有高算力需求的企業(yè)級(jí)用戶提供一站式算力運(yùn)營(yíng)解決方案,幫助用戶提升10-20倍業(yè)務(wù)運(yùn)算效率,降低成本達(dá)到75%以上,加快市場(chǎng)響應(yīng)速度。目前主要應(yīng)用領(lǐng)域包括藥物研發(fā)、基因測(cè)序分析、半導(dǎo)體行業(yè)的EDA仿真及電路設(shè)計(jì)、汽車行業(yè)的自動(dòng)駕駛開發(fā)、虛擬碰撞試驗(yàn)以及AI人工智能。
想了解更多,可添加小F微信(ID:imfastone)
文章推薦:
>>AWS、阿里云、Azure、Google Cloud、華為云、騰訊云 各種云服務(wù)器價(jià)格收費(fèi)對(duì)比(上)
>>云資源中的低成本戰(zhàn)斗機(jī)——競(jìng)價(jià)實(shí)例,AWS、阿里云等六家云廠商完全用戶使用指南