在Kubernetes上實現(xiàn)無服務器的5種方法

責任編輯:cres

作者:Serdar Yegulalp

2020-01-16 10:42:57

來源:企業(yè)網(wǎng)D1Net

原創(chuàng)

大多數(shù)云計算提供商都提供了某種無服務器平臺,但是企業(yè)可以只使用兩種要素來構建自己的平臺。

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

鏈接已復制,快去分享吧

企業(yè)網(wǎng)版權所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號