從需求角度介紹PasteSpider(K8S平替部署工具適合於任何開發語言)

PasteSpider發表於2024-05-21

你是否被K8S的強大而吸引,我相信一部分人是被那複雜的配置和各種專業知識而勸退,應該還有一部分人是因為K8S太吃資源而放手!

這裡介紹一款平替工具PasteSpider,PasteSpider是一款使用c#編寫的linux容器部署工具(使用PasteSpider和自己用啥語言開發沒關係哈!),簡單易上手(從0到一鍵釋出30分鐘學習足夠了!)非常節省資源,支援Sqlite/Postgresql資料庫,支援叢集部署,以維護100個docker的container為例,PasteSpider本身消耗的記憶體大概在300MB(下圖是273.4MB)左右!接下來我們將從需求角度介紹PasteSpider是怎麼來的!

我用java開發的,可以使用PasteSpider麼?

我用node開發的,能用PasteSpider部署我的專案麼?

我不開發,只是使用別人的映象的,能用PasteSpider部署我的專案麼?

... .. .

使用PasteSpider部署你的專案,和你的專案本身的開發語言無關,只要滿足以下條件即可

1.你的專案是否需要釋出到linux伺服器上(因為目前PasteSpider還無法在windows伺服器上執行)?

2.你的專案是純靜態的麼?比如html5,這種只要nginx路由一下就能訪問的?這個也是可以的!

3.你的專案透過Dockerfile後,可以打包到容器docker/podman裡面執行麼?

只要是你的專案需要釋出到linux上,是靜態資源或者可以載入到docker/podman裡面執行的就可以使用PasteSpider來部署你的專案

以上是一臺使用PasteSpider(myspider)管理的linux伺服器上的容器執行情況圖,NAME為xxxx_xx_xxx_xxxxxxxxxxx的容器為PasteSpider部署的!

部署現狀

從我的觀察來看,目前市面上部署服務的,大概可以分3類,

1.使用強大工具部署的,比如使用K8S,K3S等,這類有一個通性那就是這些工具消耗的資源足夠大,然後是上手有難度!

2.使用原始的方式部署,就是手打命令,或者從部署的文字或者history歷史複製命令部署,主打一個冷靜,安靜,認真的工作小透明,一不小心就部署錯了!

3.基於自己對部署步驟的理解,編寫sh命令部署,其實和2是一樣的,半手動而已!極大減少部署錯誤,但是不夠自動,也對版本回滾等抓頭抓腦!

綜上,大家迫切需要一款節省資源,又簡單易上手的部署工具!PasteSpider絕對適合你!

執行原理

PasteSpider的執行原理很簡單,簡單一句話就是程式化執行命令,用到的其他工具也就是我們常用的Nginx(作為路由,轉發,代理用),docker/podman(作為容器管理用),PasteSpider沒有K8S的各種POD等概念,遇到問題也不需要找特殊的資料,只要記住PasteSpider只是把部署的命令形成一條一條的命令,按序執行而已,所以遇到問題,你大可檢視日誌,然後找各自的資料!

圖形操作

PasteSpider使用圖形介面,簡單易上手,只要操作介面上的一些表單,即可完成專案,服務等的配置和部署工作!

上圖為PasteSpider管理端的主介面,可以看到大致板塊和功能!

上面是建立一個專案的服務的介面,可以看出都是圖形輸入的,簡單易上手。

執行安全

作為一個工具,輔助工具!必須不能尋賓奪主,提現在2個方面,

1.佔用的資源不能過多,目前很多流行的工具都是油老虎,動不動大幾個GB的記憶體需求,伺服器不要錢的啊???

2.不能干擾主服務的執行,工具就要有工具的覺悟,不能因為工具嘎了就把客戶的主服務也宕了,這不是瞎扯淡嘛!

那麼問題來了,伺服器空閒的資源拿來幹嘛用?空著不好麼?空著應對流量高峰不好麼?空著部署其他服務不好麼?空著省點錢不行麼?

近幾年也有很多新聞,由於工具的原因導致主服務當機的,PasteSpider的執行作用只在於幫助部署和服務執行狀態的資料獲取(用於顯示報表),如果PasteSpider掛了,其他執行的服務是不受影響的,主打的一個就是簡單,乾淨,不牽扯!

很多人部署後,跑起來就不管了,你咋知道你的程式碼有沒有記憶體洩漏,死迴圈等?指望docker等的重啟機制?這種問題往往在關鍵時候掉鏈子,所以及時發現問題及早處理才是正事!

概念清晰

PasteSpider的部署設計主要是基於專案的維度,偏向於微服務(其實我更偏向於說是分散式),比如有一個商城系統,我們把她拆分成api,web,manage,h5,node,grpc等服務,這幾個服務可以透過nginx的location配置串聯起來,比如訪問/api/的路徑,就轉發到api所在的服務,訪問/node/就轉發到Node的websocket實時通訊,以此類推!

專案

一個專案可以包含多個服務,服務有多種型別(純靜態的,不需要構建映象的,直接放宿主伺服器的,比如web,或者是打包後的vue等),需要構建映象,然後載入到容器中執行的(比如.net/java/php/go等編寫的api),其他的元件非自己編寫的程式碼,比如redis等。可以這麼理解,一個或者多個服務有關聯的,可以用一個專案來描述他們!

服務

服務之間是隔離的,比如你可以把node交給張三開發,api交給李四開發,然後在PasteSpider的後臺為張三或李四指定對應的許可權,那麼他們就只能釋出自己的服務。可以簡單理解為子專案為一個服務,比如開發介面的,開發前端的,開發管理端的。在nginx的配置中往往是一個location作為一個服務!

環境

做開發的都知道,開發一般會有至少2個環境,測試環境和正式環境,PasteSpider為了解決不同環境的測試問題,也引入了環境的概念,環境是另外一個維度的劃分,比如nginx的配置,會按照專案和環境進行分割,也可以透過key-value的配置,針對不同環境配置不一樣的啟動環境變數,比如SqlConnectionString等

路由Nginx

部署的升級必須得平滑!為了解決釋出的時候遇到的服務斷開的問題,PasteSpider引入Nginx作為代理模組,從環境和專案維度出發,支援服務的平滑升級,釋出的時候自動更新對應的nginx內容,內建模板案例,簡單配置即可使用。(Nginx安裝於宿主伺服器)

倉庫Registry

PasteSpider支援使用docker的registry作為私有倉庫使用,如果有多個伺服器需要關聯使用,則強烈建議啟用倉庫模式,這個倉庫就是一個存放映象的地方,這樣只要一個地方打包,其他服務可以拉取這個映象進行執行等。PasteSpider採用一鍵建立倉庫。目前在centos7和ubuntu上都測試使用過。

預警

伺服器的執行狀態,雖然說我們沒必要實時知道,但是如果有情況,還是希望能夠知曉的,比如某一個服務的CPU一直100%,比如伺服器的硬碟佔用過多了(由於硬碟爆滿導致當機的事件應該不少吧!),PasteSpidre裡面使用2個維度進行了資料的監聽,服務監控和伺服器監控,可以讓你在第一時間知曉危險,及時做出處理,避免不必要的當機事件!

定時任務

由於伺服器的特性,很多時候我們往往不能隨時升級,一般會選擇在閒時進行升級,這個時候就需要定時任務了,定時任務支援任務串,也就是多個服務升級,按照一定順序執行,比如我進行升級的順序就是api-->grpc-->rabbit-->web,一般在凌晨進行,這個時候定時任務就幫上大忙了!

原始碼構建釋出

devops還是很火的,透過配置PasteSpider也支援這git/svn的原始碼釋出,大致流程是透過git/svn的提交觸發webhook通知PasteSpider進行對某一個服務執行拉取原始碼,編譯,釋出,構建,升級等一序列操作!

簡單部署

以上只是PasteSpider的常用功能,PasteSpider的部署也是很簡單的,只需要把PasteSpider的檔案下載後,根據命令構建PasteSpider的映象,然後一行程式碼就可以啟動自己的PasteSpider,幾分鐘就可以開啟你的PasteSpider之行!

部署案例

比如我們在編寫api服務的程式碼,需要釋出到伺服器上,只要使用配套的PasteSpiderFile檔案快穩準的完成部署工作!

以.net的服務為例,在VS上釋出到資料夾後(專案生成成功,不一定能夠釋出成功),按照上圖的操作,選擇對應的專案,然後按照順序執行檔案同步(採用差量升級,所以每次升級的檔案數量很少的),最後點選構建升級,然後等待webhook的通知即可完成專案的釋出工作!

其他問題

nginx的路由,如何和container掛鉤?

針對這個問題,建議使用內部ip,能區域網的就不建議使用域名訪問,專案中的服務支援是否開啟監聽埠模式(這種一般用於多伺服器模式),配置路由的話,部署專案服務的時候會根據container的內部ip進行代理轉發。

docker重啟後,container的IP會變更,如何保證nginx的代理不出問題?

針對這個問題,PasteSpider引入了閘道器,也就是一個專案一個網段,自定義閘道器的話,docker重啟後,container的內部ip是不會變更的。

叢集釋出的時候,如何保證多個container不會佔用同一個檔案

同一個服務,我們在部署的時候,設定的虛擬目錄一般是一樣的,其實可以透過key-value裡面把環境變數開啟,然後就可以在部署的時候往叢集中的container寫入不一樣的變數,比如container1設定的目錄可以為/spider/path1/,container2設定的目錄可以為/spider/path2/,比如container的日誌檔案,我們就希望他們寫入不同的檔案中!

部署的時候,子任務執行失敗,要如何處理?

一個部署任務,其實是由多個子任務組合而成的,子任務有執行順序,有錯誤等級,透過任務的詳細,可以檢視子任務的執行情況,點選子任務可以檢視執行的語句和結果,透過這些資訊進行排查!PasteSpider系統並沒有自己的command,所有的command都是有他的來源的,比如構建映象,就是docker build或者podman build等,搜尋對應的知識庫即可!

至於附件的下載等,群共享檔案裡面有最新版本的,歡迎使用更多問題可以加入QQ群(296245685)進行討論!

相關文章