一款能讓開發人員放半天假的工具--DevSpace

1、介紹node

DevSpace是一個開源的、用GO語言寫的客戶端命令行工具。DevSpace可以讓開發團隊在Kubernetes上無縫的構建應用、運行和擴展應用。DevSpace是下一代用於構建雲原生的軟件開發工具,可以幫助開發團隊在Kubernetes上構建現代的、分佈式的、高可用的微服務應用。linux


DevSpace具備的功能包含:①直接在Kubernetes內部構建、測試和調試應用。②熱加載,不須要重建鏡像和重啓容器就可以更新運行時容器。③在團隊內部以及垮開發、測試和生產統一部署流程。④自動化鏡像構建和部署等重複任務。nginx


2、架構git

下面是DevSpace的架構圖和工做流程。DevSpace做爲一個單獨的二進制命令行工具能夠直接在計算機上運行,理想狀況下,能夠直接在IDE的終端上使用它。DevSpace不須要安裝服務器端組件,由於它使用kube-context直接與Kubernetes集羣通訊,跟kubectl同樣。github


DevSpace的工做流程是golang

①讀取代碼庫根目錄下的devspace.yaml文件,該文件存儲了整個工做流程。瀏覽器

②使用構建工具如Docker、Kaniko進行鏡像構建。bash

③將構建的鏡像推送到鏡像倉庫。服務器

④查找並使用kube-context。微信

⑤部署項目到Kubernetes集羣中。

⑥開啓Dev Mode。開發模式下爲了提升開發效率,DevSpace提供了經過File Sync同步的熱加載功能,不須要從新部署就能夠更新容器;經過端口映射能夠經過localhost訪問容器;經過終端或Logs瞭解和控制容器;經過Remote Debugger在IDE端直接調試

3、特性

DevSpace可以幫助開發人員不在那些重複的構建和部署任務上浪費時間,能夠直接在Kubernetes內部自動化工做流程和構建雲原生的應用。DevSpace具備如下特性:

一、使用devspace build自動化鏡像的構建

二、使用devspace deploy自動化部署應用

三、使用devspace dev高效的集羣內開發模式

四、使用devspace ui啓動功能豐富的本地UI界面。在界面上查看流式日誌、打開交互終端和開啓端口映射等等。經過使用當前的kube-context徹底在本地運行。

五、與Kubernetes交互的便捷命令。

  • devspace enter打開一個交互終端會話窗口。

  • devspace logs/devspace logs -f 快速顯示實時的日誌。

  • devspace sync快速啓動雙向、實時的文件同步。

  • devspace analyze可以分析容器崩潰、端點缺失、調度異常等問題並給出報告。

  • devspace purge快速刪除全部的helm charts,manifests等。

  • devspace use context 顯示上下文列表,選擇當前上下文kube-context。

  • devspace use namespace 顯示命名空間的列表,設置默認的命名空間。

  • devspace remove context 顯示上下文的列表,選擇刪除kube-context。

六、強大的配置功能

  • 聲明式配置文件,能夠與源碼一塊兒加入版本控制。

  • 配置變量,在配置文件中能夠經過參數進行設置,可以與其餘團隊共享一份配置文件。

  • 配置覆蓋,經過覆蓋Dockerfile或ENTRYPOINT,來分離開發、預覽和生產環境。

  • 鉤子,能夠在每一個構建或部署階段以前或以後執行自定義的命令。

  • 多配置,能夠用在高級部署場景。

七、輕量級的、便捷的設置

  • 只須要安裝一個二進制客戶端,不須要其餘依賴。

  • 徹底用GO編寫,能兼容各類平臺。

  • 可以自動生成配置文件,如Dockerfile、Helm chart或Kubernetes manifests。

4、安裝

一、安裝DevSpace

DevSpace支持多種平臺安裝,這裏以Linux爲準。

curl -s -L "https://github.com/devspace-cloud/devspace/releases/latest" | sed -nE 's!.*"([^"]*devspace-linux-amd64)".*!https://github.com\1!p' | xargs -n 1 curl -L -o devspace && chmod +x devspace;sudo mv devspace /usr/local/bin;

二、下載樣例項目

DevSpace支持多種類型的語言,如Node.js、Python、Golang、PHP、Ruby等,這裏以Golang語言爲例。

git clone https://github.com/devspace-cloud/quickstart-golang && cd quickstart-golang

三、初始化

初始化項目會建立配置文件devspace.yaml,這個文件會告訴DevSpace如何部署這個項目。執行命令進行初始化:

devspace init

建立好的devspace.yaml文件內容以下:

四、選擇Kubernetes集羣

選擇這個項目部署上去的集羣,這裏選擇搭建的minikube集羣環境,也可使用其餘雲平臺。使用以下命令告訴DevSpace要使用哪一個命名空間。

# Tell DevSpace which namespace to use (will be created automatically during deployment)devspace use namespace my-namespace

這裏使用minikube裏的default命名空間。

五、部署

注意:因爲在部署時會拉取golang.org地址下載的依賴包,在Dockerfile裏須要指定GOPROXY的環境變量。

Dockerfile裏添加這兩個環境變量:

# set go proxyENV GO111MODULE onENV GOPROXY https://goproxy.io

執行以下命令進行部署。

devspace deploy

查看default命名空間下的pod,能夠看出這個項目已經處於Running狀態。

六、瀏覽器查看

執行以下命令能夠在瀏覽器中打開這個應用。

devspace open

會自動打開瀏覽器,能夠看到當前程序已經在起來了。

七、開發模式

項目一旦成功部署到Kubernetes集羣后,就能夠啓動開發模式,使用終端代理、端口轉發和實時代碼同步直接在Kubernetes集羣內部進行編碼。執行以下命令:

devspace dev

執行後,能夠經過http://localhost:PORT在瀏覽器中訪問服務。當修改源碼後,DevSpace會自動同步變動的問題就到Kubernetes容器中。這裏用到的是nodemon這種熱加載的工具來保證更新變更的文件。在實際執行的時候,報錯以下,目前在github上提了issue,有了解的也請指導一下!!!

八、開發界面

若是devspace dev執行成功,會啓動一個開發界面,端口是8090,也能夠運行devspace ui命令啓動這個界面。

開發界面會顯示當前開發環境所在的KubeContext和Namespace,可以開發Web Terminal進入當前項目的容器、顯示devspace.yaml文件內容,方便開發人員查看和調試。

5、總結

DevSpace的設計更加的巧妙,而且DevSpace能適配多種構建工具與部署工具,DevSpace提供的命令行命令也很是齊全,而且也支持IDE中的Terminal,如ATOM、VS Code和Eclipse。DevSpace的同步機制是本地文件與運行在Kubernetes中的容器內部的文件同步,並使用熱加載技術在不重啓容器的狀況下更新變動的代碼,真正能夠作到持續不斷的開發、調試。


DevSpace也多種方式劃分不一樣的開發階段,若是Dev、Staging 和Production。在構建階段,能夠經過不一樣的Dockerfile劃分,可使用相關的Dockerfile不一樣的ENTRYPOINT劃分。在部署階段,可使用不一樣的命令或參數,可使用不一樣的鏡像名稱或標籤,可使用不一樣的環境變量。無論你有什麼樣的需求,DevSpace都有一個方案爲你解決,DevSpace值得一試。


以前開發人員開發完成以後,還能在等待部署的環節休息一會,喝杯咖啡,如今好了,代碼實時同步,實時部署,無縫集成,抽空喝咖啡的時間也沒有了,哈哈。不過話說回來,開發工具提升了開發人員的效率,以前一天干完的工做,如今半天就搞定了,是否是能夠放半天假呢,但願在將來可以實現。


工欲善其事,必先利其器!


本文分享自微信公衆號 - DevOps探索者(devopsagile)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索