一款能让开发人员放半天假的工具---DevSpace

  • 小编 发布于 2019-12-13 01:03:41
  • 栏目:科技
  • 来源:DevOps亮哥
  • 6368 人围观

一、介绍

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.com1!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值得一试。

之前开发人员开发完成之后,还能在等待部署的环节休息一会,喝杯咖啡,现在好了,代码实时同步,实时部署,无缝集成,抽空喝咖啡的时间也没有了,哈哈。不过话说回来,开发工具提高了开发人员的效率,之前一天干完的工作,现在半天就搞定了,是不是可以放半天假呢,希望在未来能够实现。

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

转载请说明出处:866热点网 ©