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

一、介绍

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

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

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命令行

这个可以参考之前的文章《 》,目前K8s集群和kubectl命令条件已经具备。

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

2、安装并配置Helm

wget https://get.helm.sh/helm-v2.16.1-linux-amd64.tar.gz
tar -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命名空间中,同时进行一些本地化的配置。

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

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

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

3、安装并配置Draft

一般Draft是安装在开发者本地机器上,因此Draft支持多个平台的安装。

Linux

wget https://azuredraft.blob.core.windows.net/draft/draft-v0.14.1-linux-amd64.tar.gz
tar -xzvf draft-v0.14.1-linux-amd64.tar.gz
sudo mv linux-amd64/draft /usr/local/bin/draft

查看draft版本

[root@learncloudnative ~]# draft version
&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
Draft---微软出品的云原生下的本地开发辅助工具

三、使用

1、下载样例库

这里使用Draft代码库中自带的样例,下载github上的代码库,进入到example-python目录下,只有两个文件。

git clone https://github.com/Azure/draft.git
cd examples/example-python/
[root@learncloudnative example-python]# ls
app.py requirements.txt

2、使用draft create命令创建draft文件

Draft提供了一些脚手架将应用程序部署到K8s集群中,通过draft create命令可以创建Helm chart,Dockerfile和一个Draft toml文件。

[root@learncloudnative example-python]# draft create
--> Draft detected Python (97.267760%)
--> Ready to sail
[root@learncloudnative example-python]# ls -a
. .. app.py charts Dockerfile .dockerignore .draftignore .draft-tasks.toml draft.toml requirements.txt

由Draft自动生成的charts/ 和 Dockerfile默认是基本的Python配置,这个Dockerfile使用python镜像,并且安装requirements.txt中的依赖,将当前目录拷贝到/usr/src/app中,为了与charts/python/values.yaml中service的internalPort端口保持一致,这个Dockerfile对外暴露的端口也是8080。

[root@learncloudnative example-python]# cat Dockerfile 
FROM python
ENV PORT 8080
EXPOSE 8080
WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

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 = true
watch = false
watch-delay = 2
auto-connect = false
dockerfile = ""
chart = ""

.draftignore文件用于在执行draft up时排除一些文件,以及在监控文件变化时排除一些文件不被监听。

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

.dockerignore 文件用于Docker在构建镜像时忽略一些不需要的文件和目录。

[root@learncloudnative example-python]# cat .dockerignore 
Dockerfile
draft.toml
charts/

在上面的文件列表中还有一个.draft-tasks.toml文件,这个文件相对于钩子,可以在draft up之前(pre-up)或之后(post-deploy),draft delete之后配置一些任务。

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

3、部署服务(draft up)

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

  • 读取并解析代码库中的draft.toml文件
  • 压缩charts/目录和应用目录为两个独立的tar包
  • 使用docker构建容器镜像
  • 使用docker将镜像推送到镜像仓库
  • 使用helm安装这个chart,也就是这个新创建的镜像


部署服务

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

查看服务

使用kubectl get pods查看K8s集群中的服务。

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

连接服务

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

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

调用服务

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

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

4、更新服务

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

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

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

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

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

5、删除服务

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

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

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

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

四、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还提供了部署到生产环境的流水线工具。二者也都提供了插件体系结构,用于满足构建、部署等解决的多样性。

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

Skaffold工作流程

五、总结

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


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

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


DevOps如今越来越火了,DevOps相关的文章也多了,成功案例也多了,DevOps相关的岗位也多了,可以用今日头条app上方的搜索框输入:DevOps,就能看到好多相关信息。

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


分享到:


相關文章: