在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!
作者 |?Bram Dingelstad
譯者?| 彎月?責(zé)編 |徐威龍
封圖|?CSDN下載于視覺中國
我們都遇到過這種情況:有人發(fā)現(xiàn)了一個(gè)bug,然而這不是一般的軟件bug,甚至都不是通常意義上的bug,其本質(zhì)上是人員的問題:盲目跟風(fēng)的開發(fā)者。
一開始時(shí)這個(gè)bug很小,他只是在勸說團(tuán)隊(duì)采用新的技術(shù),或者在項(xiàng)目里采用一個(gè)新的模塊,但在不知不覺之間,到處都是奇怪的項(xiàng)目和天花亂墜的文檔,聲稱只需要三步就能解決你的業(yè)務(wù)問題!然而,要想真的解決問題,似乎還需要花費(fèi)更多的工夫。
我們都遇到過這種情況,而去年的類似情況之一就是一個(gè)名為Kubernetes的項(xiàng)目。有些公司和團(tuán)隊(duì)已經(jīng)被Kubernetes淹沒,有些公司還沒有入坑。我處于中間地帶,剛剛開始構(gòu)建一個(gè)超級(jí)復(fù)雜的系統(tǒng)準(zhǔn)備入坑。
但在這之前,我想先介紹一下怎樣在Kubernetes上部署一個(gè)簡單的、類PaaS的平臺(tái)。
尋找完美的類PaaS平臺(tái)
從何處下手呢?一定有一個(gè)完美的方法,對(duì)不對(duì)?也許吧,我們先做一下搜索:
DuckDuckGo搜索不會(huì)顯示很多答案
嗯……顯然,k8s并不是PaaS。我想在PaaS之上構(gòu)建PaaS,而不是把k8s當(dāng)做PaaS使用。
那接下來該怎么辦?先在HackerNews上研究一番吧!最后我找到了兩篇不錯(cuò)的文章
https://hn.algolia.com/?dateRange=all&page=0&prefix=false&query=paas%20kubernetes&sort=byPopularity&type=story
awesome-list:https://github.com/ramitsurana/awesome-kubernetes
經(jīng)過一番仔細(xì)的搜索后,我列出了一些候選的項(xiàng)目:
Knative
OpenFaas Cloud
Convox
Garden
Rio
還有許多其他的替代項(xiàng)目,一些項(xiàng)目我曾經(jīng)嘗試過,一些項(xiàng)目并不是太活躍,一些項(xiàng)目顯然是給大型企業(yè)用的。
我希望只要一個(gè)按鈕就完事兒
我的情況是怎樣的?我們需要在一個(gè)基本的DigitalOcean droplet上運(yùn)行一個(gè)電商網(wǎng)站,上面只有一個(gè)簡單的Wordpress。盡管只需要一個(gè)簡單的bash腳本就可以把網(wǎng)站建起來,還能在本地建一臺(tái)測(cè)試用的服務(wù)器,但我想做一個(gè)工業(yè)標(biāo)準(zhǔn)的平臺(tái),而不是簡單的腳本。寫腳本很有趣,自己做部署棧也很方便,但遵循標(biāo)準(zhǔn)、不需要自己考慮工具的事情,才是我真正想要的。
我想先在一臺(tái)k3s的垃圾服務(wù)器上測(cè)試一下這些項(xiàng)目。k3s有一個(gè)反向代理,指向DigitalOcean上的droplet,而不是直接在互聯(lián)網(wǎng)上公開。也就是說,這些項(xiàng)目必須支持本地部署(on-premise deployment)。?
另一個(gè)需求是,該項(xiàng)目必須完全從k8s中抽象出來。也就是說,我不想處理大量的yaml文件也不想一直部署helm charts,我想從我自己的應(yīng)用程序的方面來思考,只需要通過命令行就可以完成一切工作。?
用一句話總結(jié)就是:我希望只要按一個(gè)按鈕就能完成一切工作。
我們的應(yīng)用程序有許多可動(dòng)的部分,一部分僅是簡單的腳本,一部分是大型應(yīng)用程序,給游戲客戶端提供通訊功能。不管是什么應(yīng)用程序,我們的平臺(tái)需要支持大量不同類型的應(yīng)用程序。通常這意味著需要支持通過Dockerfile進(jìn)行部署。
我們打算運(yùn)行的絕大多數(shù)應(yīng)用程序都是有狀態(tài)的。例如,Wordpress需要一個(gè)地方來保存圖片。許多應(yīng)用程序內(nèi)部的圖片也需要存儲(chǔ)。因此,應(yīng)用程序需要某種形式的持久存儲(chǔ)。?
許多項(xiàng)目都很好,但好項(xiàng)目和偉大項(xiàng)目的區(qū)別就是社區(qū)和行業(yè)的接受度。使用一個(gè)在GitHub上只有三個(gè)用戶的項(xiàng)目,跟自己寫bash腳本沒有區(qū)別。萬一你搞壞了什么東西,或者需要什么幫助,一個(gè)活躍的社區(qū)將是你的依靠。
該選擇哪個(gè)項(xiàng)目來幫助我實(shí)現(xiàn)目標(biāo)?
1、Knative
Knative最初給我的體驗(yàn)棒極了!看了Knative之后,我發(fā)現(xiàn)我可以運(yùn)行一個(gè)跟Google自家用的PaaS一樣的平臺(tái)。考慮到k8s就是Google做的,那么Knative項(xiàng)目肯定是完美的!不過安裝要比想像的難了一點(diǎn)。似乎沒有太簡單的方法來安裝,而無法簡單地嘗試,在未來可能是一個(gè)風(fēng)險(xiǎn)。也許只有我這樣想,也許我應(yīng)該更深入地研究一下Knative,不過由于這點(diǎn)原因,我把目光轉(zhuǎn)向了下一個(gè)候選。
2、OpenFaaS Cloud
安裝非常容易!很快我就能運(yùn)行這個(gè)平臺(tái)了。它能滿足我的大部分要求,但似乎它更側(cè)重于實(shí)現(xiàn)OpenFaaS,本身并不是一個(gè)完整的PaaS。我不太明白如何利用這個(gè)平臺(tái)解決我們的問題。如果你使用的是耦合性更小的項(xiàng)目,或者有許多小功能,那OpenFaaS絕對(duì)是最佳選擇!也許以后我可以看看看,但現(xiàn)在我已經(jīng)決定看看下一個(gè)候選。
3、Convox?
Convox看上去非常好!它是由幾名前Heroku工程師在k8s的基礎(chǔ)上構(gòu)建的。我在DigitalOpen的k8s集群上迅速部署了一下。開發(fā)者的體驗(yàn)非常棒!但是,似乎該項(xiàng)目并不支持本地部署。而且,該項(xiàng)目的社區(qū)似乎并不大,只有一些早期的使用者。該項(xiàng)目不太出名,所以我還是選擇了其他項(xiàng)目。
4、Garden
這個(gè)項(xiàng)目非常酷。我喜歡它,是因?yàn)樗墒且粋€(gè)獨(dú)立的小公司開發(fā)的非常有創(chuàng)意的解決方案。設(shè)置非常簡單,他們的方法論也是由k8s得出的非常好的抽象,但該項(xiàng)目還可以在某種形式上允許你用傳統(tǒng)的方式控制k8s,比如yaml文件等。我非常喜歡這個(gè)實(shí)現(xiàn),而且它工作得很好!盡管我注意到命令行界面有些粗糙,但這畢竟是小問題,而且最終可能會(huì)被解決。?
不過我還是決定看看下一個(gè)(也是最后一個(gè))項(xiàng)目。
5、Rio
這個(gè)項(xiàng)目能滿足我的所有需求。易用的命令行界面,不需要與k8s交互,使用Dockerfile進(jìn)行部署。還有一長串其他平臺(tái)未能實(shí)現(xiàn)或?qū)崿F(xiàn)得不太好的功能。Rio從Rancher中派生而來,似乎從Rancher活躍的社區(qū)中得到了許多支持。
在我的垃圾服務(wù)器上設(shè)置Rio
?
我迅速地設(shè)置好了通向我的k3s實(shí)例的反向代理,然后開始設(shè)置Rio。
根據(jù)他們的GitHub上的快速上手指南,設(shè)置非常簡單:
#?Setting?up?the?reverse?proxy?to?k3s ssh?-nNTL?6443:localhost:6443?droplet?&#?Installing?Rio curl?-sfL?https://get.rio.io?|?sh?-#?Running?the?example?project rio?run?https://github.com/rancher/rio-demo?這就好了!我迫不及待地想看看我們已有的基礎(chǔ)設(shè)施是否能夠同樣容易地遷移到這個(gè)平臺(tái)上。
Rio的默認(rèn)安裝允許你使用他們的rDNS服務(wù)(位于on-rio.io),這一點(diǎn)非常酷,但我放在反向代理后面的垃圾服務(wù)器并不需要。我也沒用過Linkerd,所以暫時(shí)先禁用了該功能。使用 ?rio install --disable-feature rdns,letsencrypt,linkerd 語句重新安裝,就得到了我需要的結(jié)果。?
下一步,使用kubectl安裝自定義的ClusterDomain,這樣我就可以使用on-rio.io之外的域名了。我最終安裝了dnsmasq,設(shè)置了一個(gè)假的域名app.rio供應(yīng)用程序使用。通過它可以很容易地在垃圾服務(wù)器上測(cè)試應(yīng)用程序的連通性。?
apiVersion:?admin.rio.cattle.io/v1 kind:?ClusterDomain metadata:name:?app.rio spec:httpPort:?80我還要想個(gè)辦法從我的DigitalOcean droplot上連接到這個(gè)集群。我的方法是從垃圾服務(wù)器的80端口反向代理到droplet的8080端口上。Rio采用80端口安裝Gloo的gateway-proxy。
最后一步,設(shè)置nginx配置指向Gloo的網(wǎng)關(guān):?
server?{listen?80;server_name?your.domain.name;location?/?{proxy_http_version?1.1;proxy_set_header?Host?$host;proxy_pass?http://localhost:8080;} }此處的兩個(gè)重點(diǎn)是proxy_http_version 1.1和proxy_set_header Host。?
proxy_http_version非常重要,因?yàn)榛贓nvoy的Gloo并不支持在http__version 1.0上進(jìn)行網(wǎng)管服務(wù),只能使用1.1。否則會(huì)返回426 Upgrade Required錯(cuò)誤。
Host頭很重要,因?yàn)樾枰獙?shí)現(xiàn)PublicDomain。添加PublicDomain時(shí)的重點(diǎn)是要匹配server_name或代理的Host頭,否則Gloo無法識(shí)別要連接哪個(gè)服務(wù)。
rio?domain?register?your.domain.name?rio-demo?以上就是我探索基于Kubernetes的最合適的PaaS之旅。?感謝閱讀!
原文:https://bram.dingelstad.xyz/blog/finding-the-right-paas-for-k8s/
?
同時(shí),歡迎所有開發(fā)者掃描下方二維碼填寫《開發(fā)者與AI大調(diào)研》,只需2分鐘,便可收獲價(jià)值299元的「AI開發(fā)者萬人大會(huì)」在線直播門票!
推薦閱讀:從未如此簡單:10分鐘帶你逆襲Kafka!大麥云原生邊緣計(jì)算探索,讓觀眾劇院看戲也能實(shí)現(xiàn)個(gè)性化華為集齊 AI 龍珠,“召喚神龍”為期不遠(yuǎn)互聯(lián)網(wǎng)之父確診新冠,一代傳奇:任谷歌副總裁、NASA 訪問科學(xué)家京東商城背后的AI技術(shù)能力揭秘 - 基于關(guān)鍵詞自動(dòng)生成摘要韓國新法案提出禁止加密資產(chǎn)抵押借貸,DeFi平臺(tái)或遭禁真香,朕在看了!總結(jié)
以上是生活随笔為你收集整理的在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AirPods Pro 到底「Pro」在
- 下一篇: 扎根中国20年,F5“代码到用户”线上峰