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

一、介紹

DevSpace是一個開源的

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

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

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

devspace init

二、架構

下面是DevSpace的架構圖和工作流程。DevSpace作為一個單獨的二進制命令行工具可以直接在計算機上運行,理想情況下,可以直接在IDE的終端上使用它。DevSpace不需要安裝服務器端組件,因為它使用kube-context直接與Kubernetes集群通信,跟kubectl一樣。


DevSpace的工作流程是:

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

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

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

④查找並使用kube-context。

⑤部署項目到Kubernetes集群中。

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

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

DevSpace架構圖

三、特性

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

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

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

3、使用devspace dev高效的集群內開發模式

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

5、與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。

6、強大的配置功能

  • 聲明式配置文件,可以與源碼一起加入版本控制。
  • 配置變量,在配置文件中可以通過參數進行設置,能夠與其他團隊共享一份配置文件。
  • 配置覆蓋,通過覆蓋Dockerfile或ENTRYPOINT,來分離開發、預覽和生產環境。
  • 鉤子,可以在每個構建或部署階段之前或之後執行自定義的命令。
  • 多配置,可以用在高級部署場景。

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

  • 只需要安裝一個二進制客戶端,不需要其他依賴。
  • 完全用GO編寫,能兼容各種平臺。
  • 能夠自動生成配置文件,如Dockerfile、Helm chart或Kubernetes manifests。

四、安裝

1、安裝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

2、下載樣例項目

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

$ git clone https://github.com/devspace-cloud/quickstart-golang && cd quickstart-golang
一款能讓開發人員放半天假的工具---DevSpace

3、初始化

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

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

創建好的devspace.yaml文件內容如下:

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

4、選擇Kubernetes集群

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

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

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

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

5、部署

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

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

# set go proxy
ENV GO111MODULE on
ENV GOPROXY https://goproxy.io

執行如下命令進行部署。

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

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

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

6、瀏覽器查看

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

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

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

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

7、開發模式

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

$ devspace dev

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

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

8、開發界面

如果devspace dev執行成功,會啟動一個開發界面,端口是8090,也可以運行devspace ui命令啟動這個界面。

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

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

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

五、總結

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

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

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

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


分享到:


相關文章: