Draft---微軟出品的云原生下的本地開發(fā)輔助工具

一、介紹

Draft是微軟Deis團隊開源的一個用Go語言編寫的容器應用開發(fā)輔助工具,用于幫助開發(fā)人員簡化容器應用程序構建和部署的開發(fā)流程。Draft的設計思路在于,允許開發(fā)人員在不了Docker和Kubernetes相關知識的前提下,仍可順利實現(xiàn)應用程序開發(fā)。在Draft的幫助下,開發(fā)者甚至不需要在本地計算機中安裝Docker和Kubernetes等工具。

Draft通過三個命令來完成這個流程:

1、draft init:初始化docker registry賬號,并在Kubernetes集群中部署draftd,這個進程負責鏡像的構建、將鏡像推送到docker registry中。

2、draft create:Draft 根據(jù) packs 檢測應用的開發(fā)語言,并自動生成 Dockerfile 和 Kubernetes Helm Charts。當前,Draft內部支持8種類型的語言,包括Java、PHP、GO等。

3、draft up:根據(jù)Dockerfile構建鏡像,并使用Helm將應用部署到Kubernetes集群中。同時,還會在本地啟動一個draft client,監(jiān)控代碼的變化,并將更新過的代碼推送給draftd。

二、安裝

如果要演示使用Draft輔助本地開發(fā),需要有先決條件:

1、Kubernetes集群以及kubectl命令行

這個可以參考之前的文章《Jenkins X--(6)虛擬機里搭建Minikube環(huán)境》,目前K8s集群和kubectl命令條件已經(jīng)具備。

2、安裝并配置Helm

wget https://get.helm.sh/helm-v2.16.1-linux-amd64.tar.gztar-zxvf helm-v2.16.1-linux-amd64.tar.gz

sudo mv linux-amd64/helm /usr/local/bin/helm

在使用Helm之前先執(zhí)行helm init命令,完成初始化設置,這個命令會安裝Tiller到現(xiàn)有的K8s集群的kube-system命名空間中,同時進行一些本地化的配置。

查看kube-system命名空間,tiller已經(jīng)處于Running狀態(tài)了。

3、安裝并配置Draft

一般Draft是安裝在開發(fā)者本地機器上,因此Draft支持多個平臺的安裝。

Linux

wget https://azuredraft.blob.core.windows.net/draft/draft-v0.14.1-linux-amd64.tar.gztar-xzvf draft-v0.14.1-linux-amd64.tar.gz

sudo mv linux-amd64/draft /usr/local/bin/draft

查看draft版本

[root@learncloudnative ~]#draftversion&version.Version{SemVer:"v0.14.1", GitCommit:"fdc29c553a45600ac4f795f3485d4bb9a80c7862", GitTreeState:"clean"}

MacOS

使用Homebrew安裝Draft

$ brew install azure/draft/draft

Windows

使用Chocolatey安裝Draft

$ choco install draft

GoFish

或者使用GoFish,能同時支持Linux/MacOS/Windows平臺。

$ gofish install draft

配置Draft

安裝好Draft后,執(zhí)行下面的命令進行設置,draft的plugin、pack repo、配置等都存儲在~/.draft目錄下。

$ draft init

三、使用

1、下載樣例庫

這里使用Draft代碼庫中自帶的樣例,下載github上的代碼庫,進入到example-python目錄下,只有兩個文件。

gitclone https://github.com/Azure/draft.gitcd? examples/example-python/[root@learncloudnativeexample-python]# lsapp.py? requirements.txt

2、使用draft create命令創(chuàng)建draft文件

Draft提供了一些腳手架將應用程序部署到K8s集群中,通過draft create命令可以創(chuàng)建Helm chart,Dockerfile和一個Draft toml文件。

[root@learncloudnative example-python]#draftcreate-->DraftdetectedPython(97.267760%)-->Readytosail[root@learncloudnative example-python]#ls-a.? ..app.pychartsDockerfile.dockerignore.draftignore.draft-tasks.tomldraft.tomlrequirements.txt

由Draft自動生成的charts/ 和 Dockerfile默認是基本的Python配置,這個Dockerfile使用python鏡像,并且安裝requirements.txt中的依賴,將當前目錄拷貝到/usr/src/app中,為了與charts/python/values.yaml中service的internalPort端口保持一致,這個Dockerfile對外暴露的端口也是8080。

[root@learncloudnativeexample-python]# cat Dockerfile FROMpythonENVPORT 8080EXPOSE8080WORKDIR/usr/src/appCOPYrequirements.txt ./RUNpip install --no-cache-dir -r requirements.txtCOPY. .ENTRYPOINT["python"]CMD["app.py"]

draft.toml是Draft識別的文件,包含了基本的配置詳情,如應用名稱,部署的命名空間,是否當文件變化后自動部署應用到K8s集群中。

[root@learncloudnative example-python]# cat draft.toml [environments][environments.development]name ="example-python"namespace="default"wait =truewatch =falsewatch-delay =2auto-connect =falsedockerfile =""chart =""

.draftignore文件用于在執(zhí)行draft up時排除一些文件,以及在監(jiān)控文件變化時排除一些文件不被監(jiān)聽。

[root@learncloudnative example-python]#cat.draftignore*.swp*.tmp*.temp.git*

.dockerignore?文件用于Docker在構建鏡像時忽略一些不需要的文件和目錄。

[root@learncloudnative example-python]# cat .dockerignore Dockerfiledraft.tomlcharts/

在上面的文件列表中還有一個.draft-tasks.toml文件,這個文件相對于鉤子,可以在draft up之前(pre-up)或之后(post-deploy),draft delete之后配置一些任務。

3、部署服務(draft up)

一切準備好之后,執(zhí)行draft up?命令將應用部署到K8s集群中。在執(zhí)行draft up命令時的流程是:

讀取并解析代碼庫中的draft.toml文件

壓縮charts/目錄和應用目錄為兩個獨立的tar包

使用docker構建容器鏡像

使用docker將鏡像推送到鏡像倉庫

使用helm安裝這個chart,也就是這個新創(chuàng)建的鏡像

部署服務

連接服務

服務部署到K8s集群中,可以使用draft connect連接到服務上,這個命令執(zhí)行后,會創(chuàng)建一個代理連接到這個pod暴露出來的端口上。

調用服務

使用curl命令調用部署的應用服務。

4、更新服務

修改app.py打印出“Hello,Draft!”,保存后執(zhí)行draft up從新構建鏡像并發(fā)布應用到K8s集群中,執(zhí)行draft connect連接到K8s集群中的服務。

再次,調用URL能看到打印的日志已經(jīng)是新修改的。

對于更新服務,可以在draft.toml配置文件中指定watch=true可以監(jiān)聽本地文件的變化,當本地文件發(fā)生變化后,即觸發(fā)鏡像構建、鏡像部署等過程。

5、刪除服務

當服務不再使用時,使用draft delete命令將該應用從K8s集群中刪除。

查看該應用的狀態(tài)已經(jīng)變?yōu)門erminating,稍等片刻后,該應用就從集群中刪掉了。

四、Draft與Skaffold對比

Skaffold也是云原生下輔助本地開發(fā)的命令行工具,在這篇文章《一款云原生時代本地開發(fā)調試的利器-Skaffold》中有介紹。Draft和Skaffold這兩個工具都可以用作CI/CD流水線中的構建塊,自動化的將更新的程序部署到Kubernetes集群上,最終目的是讓更新的應用程序在K8s集群中運行,以更頻繁更新、部署來減少錯誤。

Draft是微軟開源的構建和部署工具。它就像一個流水線編排的CLI,因為使用的Helm進行管理,也被歸類為包管理器。Draft的定位在本地編寫代碼和提交給源代碼管理之前供開發(fā)人員使用。Draft可以直接從本地計算機生成Docker鏡像,然后將其部署到集群中。它創(chuàng)建并使用Helm charts來生成Kubernetes manifests來部署應用程序。使用Draft可以部署應用程序到運行在Azure上的Kubernetes。

Skaffold是Google發(fā)布的一個相對較新的工具。Skaffold是一個命令行工具,管理應用程序的構建、推送和部署到Kubernetes的整個工作流程。它的設計可以使你持續(xù)迭代本地代碼,然后Skaffold將構建和部署這些更新到本地或遠程的Kubernetes集群中。

雖然二者都允許開發(fā)人員在本地迭代和測試Kubernetes應用程序,但Skaffold還提供了部署到生產(chǎn)環(huán)境的流水線工具。二者也都提供了插件體系結構,用于滿足構建、部署等解決的多樣性。

五、總結

隨著云原生時代的到來,本地開發(fā)輔助的工具也種類繁多,各大廠也都推出了自己的輔助工具。雖然功能特性不盡相同,但目的是一樣的,都是為了提高本地開發(fā)的效率,頻繁的更新和測試,能夠大幅降低問題修復的成本。

容器的出現(xiàn),徹底改變了軟件交付和運行的過程,應用的構建、分發(fā)和交付得以在這個層面上實現(xiàn)了標準化,大幅降低了企業(yè)IT實施和運維成本,提升了業(yè)務創(chuàng)新的效率。

像Draft、Skaffold這樣的本地開發(fā)輔助工具,就是利用了容器的能力,標準的構建流程,標準的Kubernetes編排。目前,軟件已經(jīng)實現(xiàn)了集裝箱式的運輸,只需要提供一套鏡像文件和一套編排文件就能快速啟動一套環(huán)境。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 概覽 ? Helm 簡介 ? Helm 安裝使用 ? Helm 的基本使用 ? Helm 模板詳解之內置函數(shù)與 V...
    51reboot閱讀 2,615評論 0 2
  • 大家好,這是我第一次發(fā)表文章,選擇了一件我親身經(jīng)歷的事情,希望我的只言片語可以給你帶來一些收獲。 復讀,在許多人...
    夢小蕊啊閱讀 481評論 2 5
  • 新的一學期開始了,所有的東西都是新的??墒俏覀冏钕矚g的,科學-星星老師…… 星星老師離開學校之前并...
    潤bao閱讀 574評論 0 2
  • 1.感恩親愛的牙齒,去陪著我咀嚼品嘗如此多美味,讓牙醫(yī)好好把你檢查一遍,做了修整,每一口食物都如此的幸福滋養(yǎng)。 2...
    錢蓉寶寶閱讀 363評論 0 1

友情鏈接更多精彩內容