FONK 乙個面向K8S的無伺服器LAMP技術棧

2021-09-17 05:43:21 字數 2302 閱讀 4701

關於無伺服器,有一種說法我聽過很多次:「無伺服器是一種自找麻煩的解決方案」。

當一項新技術破壞了人們習慣的工作流程時,就會出現類似的防禦性宣告。這種宣告也是在告訴無伺服器社群裡的所有人,無伺服器的學習曲線有多陡峭。

如果人們理解了無伺服器,他們就不會說出這麼負面的話。因此,我提出了乙個問題:如何馴服無伺服器的學習曲線?

我給出的答案是乙個web應用程式。讓我來解釋一下。

去年春天,我第四次聽到開頭那句話。所以我問自己,「你能用無伺服器構建的最簡單的東西是什麼?人們可以把它與自己已經知道的東西聯絡起來。」

我認為,我可以向人們展示他們可以如何做他們現在正在做的事情,只是以更簡單的方式,以此來展示無伺服器的價值。

因此,我構建了乙個web應用示例,稱之為guestbook。

就是每個人都知道的lamp技術棧。

它很簡單,並且提供了可選的元件,這可以說明它為什麼在過去20多年裡如此流行。我們甚至在kubernetes(k8s)的學習曲線中看到了它的影響:

guestbook是大多數人在第一次學習kubernetes時最先部署的應用程式之一,儘管它使用nosql伺服器代替了mysql,但仍然是基本的lamp結構。

有鑑於此,降低無伺服器學習曲線的一種方法是向人們展示如何用更少的**和配置構建同樣複雜的web應用程式。

使用aws構建,則該web應用程式如下所示:

雖然這只需要大約一半的**和配置,但它也把你鎖定在aws中。

如果你可以建立乙個類似lamp的設計模式,但使用k8s上的無伺服器概念來確保可移植性,那會怎麼樣?

aws體系結構的元件分別是函式即服務(faas)執行時、物件儲存和nosql伺服器。

如果你在任何超過3000 star的github專案或其他流行開源元件上使用了五個faas執行時之一,那麼整個技術棧就可以像下面這樣安裝在k8s上:

把它們都放在一起,就可以得到乙個簡潔的無伺服器設計模式縮寫:

(我把這個動物圖示歸功於我的女兒,她說:「fonk聽起來就像是鵝說的話。」)

為了讓人們更容易地從本地k8s過渡,這些web應用程式中的第乙個示例就是guestbook。以下是我們的早期進展:

只有create和list函式的guestbook是自然而然的第一選擇,不過,我們的計畫是讓這個應用程式變得更加複雜。我們希望新增待辦(完整crudl操作)、部落格(經過身份驗證的cud、公共rl)和論壇(經過身份驗證的crudl)。

更長遠來看,內建一些ci/cd功能,包括列測試自動化或跨行效能基準測試,這會很酷。

在構建第一組示例的過程中,我們學到了很多比較faas執行時的知識。

從開發人員體驗的角度來看,以下是一些早期研究結果:

基於k8s執行時上的某些faas開發,其體驗和本地k8s開發類似;它公開了函式將在其上執行的映象的一些內部結構。其他的則更接近於遮蔽了映象細節的aws lambda模型。

在這個領域,谷歌的knative是那只重達800磅的大猩猩,它在github上還沒有達到3000星的門檻,過了這個門檻,我們就提供guestbook示例。但是,我們正密切關注它的進展,因為它很可能會實現這一目標。

一旦開始實施這個想法,我們認為最好有乙個以它為中心的社群。所以,我們試著讓整件事成為成為一件有吸引力的事。

雖然並不是所有基於k8s執行時的faas都支援無伺服器框架,但是kubeless和openwhisk做得非常好。乙個簡單的入門方法是從頭到尾做乙個完整的示例:

我們很感激您的github之星,但是,我們更希望看到乙個新的faas執行時/語言組合pr。

你可以檢出我們在github上的fonk專案,自己嘗試一些例子。或者,你可以提出任何faas/語言組合請求,我們會構建所有可能的guestbook!

檢視英文原文:

k8s初識建立乙個pod

vim nginx.yaml apiversion v1 kind pod metadata name nginx labels web spec containers name nginx image nginx 1.13 ports containerport 80建立的命令 需要apiserv...

K8s手工建立乙個POD

mkdir opt yml p cd opt yml master節點操作 vim k8s pod.yml apiversion v1 kind pod metadata name nginx labels spec containers name nginx image 192.168.2.50 ...

K8S修改乙個節點的名字

部署了乙個k8s一主兩從,不幸的是忘記了初始化從節點的host name,node那一欄一長串的字串非常不友好,必須要解決這個問題。root izhp31kuvshz2kea5g99lpz kubectl get pods a o wide namespace name ready status r...