一款能让开发人员放半天假的工具--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源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索