大多數(shù)云計(jì)算提供商都提供了某種無(wú)服務(wù)器平臺(tái),但是企業(yè)可以只使用兩種要素來(lái)構(gòu)建自己的平臺(tái)。其中之一就是Kubernetes,它是容器編排系統(tǒng),已成為構(gòu)建組件化、彈性應(yīng)用程序的標(biāo)準(zhǔn)平臺(tái)。第二個(gè)是用于在Kubernetes中構(gòu)建無(wú)服務(wù)器應(yīng)用程序模式的眾多系統(tǒng)中的任何一個(gè)。
Kubernetes的大多數(shù)無(wú)服務(wù)器框架都具有以下共同特征:
•在本地或遠(yuǎn)程部署到任何支持Kubernetes的環(huán)境,其中包括OpenShift之類的環(huán)境。
•支持以任何語(yǔ)言編寫的運(yùn)行代碼,并且框架中預(yù)先包裝了一些常見(jiàn)的運(yùn)行代碼。
•通過(guò)多種事件觸發(fā)代碼執(zhí)行:HTTP端點(diǎn)、隊(duì)列消息。
在Kubernetes上構(gòu)建無(wú)服務(wù)器的主要優(yōu)勢(shì)之一是可以更好地控制基礎(chǔ)平臺(tái)。許多無(wú)服務(wù)器產(chǎn)品限制了它們運(yùn)行的??功能的行為,有時(shí)使某些類型的應(yīng)用程序不切實(shí)際。使用Kubernetes,企業(yè)可以創(chuàng)建滿足其需求的無(wú)服務(wù)器平臺(tái),將基礎(chǔ)設(shè)施留給Kubernetes運(yùn)營(yíng)商,讓開發(fā)人員專注于編寫基本代碼。
以下是將無(wú)服務(wù)器功能帶入Kubernetes的五個(gè)主要項(xiàng)目:
1.Fission
Fission是由Managed-Kubernetes公司Platform 9創(chuàng)建和維護(hù)的。其主要優(yōu)點(diǎn)是允許企業(yè)創(chuàng)建FaaS應(yīng)用程序,而無(wú)需構(gòu)建容器,只需提供定義文件。
Fission可以安裝或不安裝Helm圖表,并且可以安裝在兩個(gè)版本中。有一個(gè)完整版本的消息隊(duì)列和InfluxDB支持日志記錄,還有一個(gè)具有基本功能的精簡(jiǎn)版本。前者是為生產(chǎn)部署而設(shè)計(jì)的,而后者則是為了進(jìn)行測(cè)試。
要將代碼添加到Fission部署中,請(qǐng)使用基于YAML的規(guī)范文件。使用Fission的命令行工具,企業(yè)可以為函數(shù)以及用于觸發(fā)其入口點(diǎn)的路由創(chuàng)建YAML文件。spec文件還允許企業(yè)為代碼提供環(huán)境變量、輔助容器、卷和Kubernetes容差控件。
Fission還提供“工作流”。工作流由Helm圖表安裝,將一個(gè)功能的輸出傳遞給另一個(gè)功能。這些功能甚至不必使用相同的語(yǔ)言。需要注意,盡管工作流系統(tǒng)支持許多常見(jiàn)的原始二進(jìn)制類型以降低開銷(例如整數(shù)或通用字節(jié)流),但這會(huì)以性能為代價(jià),因?yàn)槊總€(gè)功能的輸出都呈現(xiàn)為交換格式。
最初與FaaS關(guān)聯(lián)的缺點(diǎn)之一是,第一次調(diào)用功能時(shí),啟動(dòng)與之關(guān)聯(lián)的容器會(huì)有明顯的延遲。Fission使容器保持預(yù)熱狀態(tài),以最大程度地減少功能首次運(yùn)行時(shí)的延遲。
Fission為開發(fā)人員和管理人員提供了其他便利。可以將服務(wù)部署到?jīng)]有外部互聯(lián)網(wǎng)訪問(wèn)的集群中,并且可以根據(jù)需要將代碼重新加載到集群中。還可以記錄并重放功能活動(dòng),以幫助調(diào)試。
Fission項(xiàng)目是在高度自由的Apache許可下提供的,因此可以根據(jù)需要自由修改。
2.Knative
Knative最初是由谷歌公司創(chuàng)建的,用于在Kubernetes上運(yùn)行無(wú)服務(wù)器應(yīng)用程序,而Knative則專注于生產(chǎn)中無(wú)服務(wù)器部署所共有的模式。但是,Knative需要直接專業(yè)知識(shí)來(lái)管理許多Kubernetes組件才能有效使用。
除了Kubernetes,Knative還需要路由系統(tǒng)或服務(wù)網(wǎng)格(例如Istio),但也可以使用其他選項(xiàng)(例如Ambassador和Gloo)。這意味著需要做更多的工作,但是該項(xiàng)目提供了在各種云計(jì)算服務(wù)和Kubernetes環(huán)境(包括普通Kubernetes)中使用每個(gè)選項(xiàng)的詳細(xì)指南。
Knative主要通過(guò)利用或擴(kuò)展現(xiàn)有的Kubernetes工具和功能來(lái)工作。應(yīng)用或功能通過(guò)YAML文件進(jìn)行配置,并作為企業(yè)構(gòu)建的Docker容器交付。通過(guò)kubectl命令行應(yīng)用程序可以添加、修改或刪除定義。有關(guān)Knative應(yīng)用的指標(biāo),需要使用Grafana??s放可以使用Knative自己的自動(dòng)縮放器,也可以使用任何其他與Kubernetes兼容的縮放器,其中包括定制的縮放器。
Knative正在大力開發(fā)中,其許多專用工具仍處于粗糙狀態(tài)。其中包括knctl,這是專門用于Knative的CLI,如果企業(yè)只想專注于Knative,則可以避免使用Kubernetes的其他工具來(lái)管理Knative的麻煩。通過(guò)消除容器構(gòu)建步驟在Knative上構(gòu)建Go應(yīng)用的工具。
3.Kubeless
Kubeless由Bitnami公司創(chuàng)建,Bitnami是通用Web應(yīng)用程序堆棧的便捷安裝程序的開發(fā)商。Kubeless使用Kubernetes的本地自定義資源定義來(lái)處理功能,因此Kubernetes和Kubeless功能之間的抽象程度略有下降。
大多數(shù)常見(jiàn)的語(yǔ)言運(yùn)行時(shí)都帶有平臺(tái):.NET、Java、Python、Node.js、PHP、Ruby、Go,甚至還有用于云原生開發(fā)的新Ballerina語(yǔ)言。運(yùn)行時(shí)只是Docker映像,盡管Kubeless有一種特定的打包格式,用于使用Dockerfiles構(gòu)建自定義運(yùn)行時(shí)。
另一個(gè)便捷的Kubeless功能是其CLI,該命令與AWS Lambda CLI相同。如果企業(yè)想從AWS Lambda遷移而又想保留一些現(xiàn)有的管理腳本,或者不必學(xué)習(xí)全新的命令集,這將非常方便。
Kubeless還充當(dāng)Serverless Framework的插件,Serverless Framework是一種用于在各種體系結(jié)構(gòu)上構(gòu)建無(wú)服務(wù)器應(yīng)用程序的系統(tǒng)。如果企業(yè)已經(jīng)使用Serverless或Kubeless,則添加其中之一比使用其他功能要容易。
Kubeless還充當(dāng)Serverless Framework的插件,Serverless Framework是一種用于在各種體系結(jié)構(gòu)上構(gòu)建無(wú)服務(wù)器應(yīng)用程序的系統(tǒng)。如果企業(yè)已經(jīng)使用Serverless或Kubeless,則添加其中之一比使用其他功能要容易。
4.OpenFaaS
OpenFaaS的主題是簡(jiǎn)化了無(wú)服務(wù)器功能。簡(jiǎn)單來(lái)說(shuō),開發(fā)人員的意思是“沒(méi)有比部署Docker容器困難得多”。
OpenFaaS可以部署到Kubernetes或Docker Swarm集群(用于本地測(cè)試或低需求使用)。企業(yè)可以使用OpenFaaS CLI將Docker映像構(gòu)建,推送和部署到集群中以運(yùn)行功能?,F(xiàn)有的模板提供了預(yù)制的方式來(lái)部署用Go、Python、Node.js、.NET、Ruby、Java或PHP 7編寫的應(yīng)用程序,盡管企業(yè)始終可以自己采用應(yīng)用程序。OpenFaaS CLI還為企業(yè)提供了管理集群中機(jī)密的方法,而內(nèi)置的Web UI允許企業(yè)創(chuàng)建和管理新功能。
OpenFaaS的另一個(gè)版本OpenFaaS Cloud重新打包了OpenFaaS,為多個(gè)開發(fā)人員提供功能,包括與Git集成(包括GitHub和GitLab的自托管版本)、持續(xù)集成(CI)/持續(xù)部署(CD)、機(jī)密管理、HTTPS,以及將事件饋送到Slack和其他服務(wù)器的功能。OpenFaas Cloud可作為免費(fèi)的開源產(chǎn)品獲得,并且具有托管版本,當(dāng)前可以免費(fèi)使用。
5.OpenWhisk
Apache OpenWhisk被稱為通用無(wú)服務(wù)器平臺(tái)。Kubernetes只是可用于在OpenWhisk中運(yùn)行容器的幾個(gè)選項(xiàng)之一,因?yàn)镺penWhisk還支持Mesos和Docker Compose。盡管如此,Kubernetes是首選,因?yàn)樗哂杏糜趹?yīng)用程序部署的工具,尤其是Helm圖表。IBM Cloud Functions基于OpenWhisk項(xiàng)目,因此也可以使用OpenWhisk CLI命令。
與大多數(shù)其他無(wú)服務(wù)器Kubernetes框架不同,OpenWhisk是用Scala語(yǔ)言而不是Go(Kubernetes和Docker都用Go編寫)編寫的。只有當(dāng)企業(yè)想對(duì)OpenWhisk進(jìn)行黑客攻擊并且只有Go的使用經(jīng)驗(yàn)時(shí),這才可能成為問(wèn)題。
大多數(shù)流行的應(yīng)用程序運(yùn)行時(shí)選項(xiàng)都預(yù)包裝有OpenWhisk:Java、Node.js、Python、Ruby、PHP和.NET。此外,還包括許多深?yuàn)W和前沿的選項(xiàng):Scala、Ballerina、Swift和Rust。運(yùn)行時(shí)只是Docker容器,因此很容易提供其自己的容器。
一個(gè)方便的OpenWhisk部署功能是“zip動(dòng)作”。使用代碼包的清單文件將代碼和輔助文件的.zip存檔指向OpenWhisk,OpenWhisk將從中創(chuàng)建一個(gè)動(dòng)作。OpenWhisk CLI還包括將代碼目錄樹轉(zhuǎn)換為此類歸檔文件的工具。服務(wù)包目錄使企業(yè)可以輕松地將應(yīng)用程序插入常見(jiàn)的第三方產(chǎn)品中,例如GitHub、Slack、Apache Kafka或Jira。
版權(quán)聲明:本文為企業(yè)網(wǎng)D1Net編譯,轉(zhuǎn)載需注明出處為:企業(yè)網(wǎng)D1Net,如果不注明出處,企業(yè)網(wǎng)D1Net將保留追究其法律責(zé)任的權(quán)利。