Draft---微软出品的云原生下的本地开发辅助工具

一、介绍

Draft是微软Deis团队开源的一个用Go语言编写的容器应用开发辅助工具,用于帮助开发人员简化容器应用程序构建和部署的开发流程。Draft的设计思路在于,允许开发人员在不了Docker和Kubernetes相关知识的前提下,仍可顺利实现应用程序开发。在Draft的帮助下,开发者甚至不需要在本地计算机中安装Docker和Kubernetes等工具。

Draft通过三个命令来完成这个流程:

1、draft init:初始化docker registry账号,并在Kubernetes集群中部署draftd,这个进程负责镜像的构建、将镜像推送到docker registry中。

2、draft create:Draft 根据 packs 检测应用的开发语言,并自动生成 Dockerfile 和 Kubernetes Helm Charts。当前,Draft内部支持8种类型的语言,包括Java、PHP、GO等。

3、draft up:根据Dockerfile构建镜像,并使用Helm将应用部署到Kubernetes集群中。同时,还会在本地启动一个draft client,监控代码的变化,并将更新过的代码推送给draftd。

二、安装

如果要演示使用Draft辅助本地开发,需要有先决条件:

1、Kubernetes集群以及kubectl命令行

这个可以参考之前的文章《Jenkins X--(6)虚拟机里搭建Minikube环境》,目前K8s集群和kubectl命令条件已经具备。

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之前先执行helm init命令,完成初始化设置,这个命令会安装Tiller到现有的K8s集群的kube-system命名空间中,同时进行一些本地化的配置。

查看kube-system命名空间,tiller已经处于Running状态了。

3、安装并配置Draft

一般Draft是安装在开发者本地机器上,因此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后,执行下面的命令进行设置,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命令创建draft文件

Draft提供了一些脚手架将应用程序部署到K8s集群中,通过draft create命令可以创建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文件用于在执行draft up时排除一些文件,以及在监控文件变化时排除一些文件不被监听。

[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)

一切准备好之后,执行draft up 命令将应用部署到K8s集群中。在执行draft up命令时的流程是:

读取并解析代码库中的draft.toml文件

压缩charts/目录和应用目录为两个独立的tar包

使用docker构建容器镜像

使用docker将镜像推送到镜像仓库

使用helm安装这个chart,也就是这个新创建的镜像

部署服务

连接服务

服务部署到K8s集群中,可以使用draft connect连接到服务上,这个命令执行后,会创建一个代理连接到这个pod暴露出来的端口上。

调用服务

使用curl命令调用部署的应用服务。

4、更新服务

修改app.py打印出“Hello,Draft!”,保存后执行draft up从新构建镜像并发布应用到K8s集群中,执行draft connect连接到K8s集群中的服务。

再次,调用URL能看到打印的日志已经是新修改的。

对于更新服务,可以在draft.toml配置文件中指定watch=true可以监听本地文件的变化,当本地文件发生变化后,即触发镜像构建、镜像部署等过程。

5、删除服务

当服务不再使用时,使用draft delete命令将该应用从K8s集群中删除。

查看该应用的状态已经变为Terminating,稍等片刻后,该应用就从集群中删掉了。

四、Draft与Skaffold对比

Skaffold也是云原生下辅助本地开发的命令行工具,在这篇文章《一款云原生时代本地开发调试的利器-Skaffold》中有介绍。Draft和Skaffold这两个工具都可以用作CI/CD流水线中的构建块,自动化的将更新的程序部署到Kubernetes集群上,最终目的是让更新的应用程序在K8s集群中运行,以更频繁更新、部署来减少错误。

Draft是微软开源的构建和部署工具。它就像一个流水线编排的CLI,因为使用的Helm进行管理,也被归类为包管理器。Draft的定位在本地编写代码和提交给源代码管理之前供开发人员使用。Draft可以直接从本地计算机生成Docker镜像,然后将其部署到集群中。它创建并使用Helm charts来生成Kubernetes manifests来部署应用程序。使用Draft可以部署应用程序到运行在Azure上的Kubernetes。

Skaffold是Google发布的一个相对较新的工具。Skaffold是一个命令行工具,管理应用程序的构建、推送和部署到Kubernetes的整个工作流程。它的设计可以使你持续迭代本地代码,然后Skaffold将构建和部署这些更新到本地或远程的Kubernetes集群中。

虽然二者都允许开发人员在本地迭代和测试Kubernetes应用程序,但Skaffold还提供了部署到生产环境的流水线工具。二者也都提供了插件体系结构,用于满足构建、部署等解决的多样性。

五、总结

随着云原生时代的到来,本地开发辅助的工具也种类繁多,各大厂也都推出了自己的辅助工具。虽然功能特性不尽相同,但目的是一样的,都是为了提高本地开发的效率,频繁的更新和测试,能够大幅降低问题修复的成本。

容器的出现,彻底改变了软件交付和运行的过程,应用的构建、分发和交付得以在这个层面上实现了标准化,大幅降低了企业IT实施和运维成本,提升了业务创新的效率。

像Draft、Skaffold这样的本地开发辅助工具,就是利用了容器的能力,标准的构建流程,标准的Kubernetes编排。目前,软件已经实现了集装箱式的运输,只需要提供一套镜像文件和一套编排文件就能快速启动一套环境。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • 概览 • Helm 简介 • Helm 安装使用 • Helm 的基本使用 • Helm 模板详解之内置函数与 V...
    51reboot阅读 2,477评论 0 2
  • 大家好,这是我第一次发表文章,选择了一件我亲身经历的事情,希望我的只言片语可以给你带来一些收获。 复读,在许多人...
    梦小蕊啊阅读 430评论 2 5
  • 新的一学期开始了,所有的东西都是新的。可是我们最喜欢的,科学-星星老师…… 星星老师离开学校之前并...
    润bao阅读 493评论 0 2
  • 1.感恩亲爱的牙齿,去陪着我咀嚼品尝如此多美味,让牙医好好把你检查一遍,做了修整,每一口食物都如此的幸福滋养。 2...
    钱蓉宝宝阅读 330评论 0 1