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里添加这两个环境变量:
ENV 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源创计划”,欢迎正在阅读的你也加入,一块儿分享。