截图工具当前未在计算机上运行 请重启_一款能让开发人员放半天假的工具---DevSpace...

一、介绍

DevSpace是一个开源的、用GO语言写的客户端命令行工具。DevSpace能够让开发团队在Kubernetes上无缝的构建应用、运行和扩展应用。DevSpace是下一代用于构建云原生的软件开发工具,能够帮助开发团队在Kubernetes上构建现代的、分布式的、高可用的微服务应用。

DevSpace具有的功能包含:①直接在Kubernetes内部构建、测试和调试应用。②热加载,不需要重建镜像和重启容器就能够更新运行时容器。③在团队内部以及垮开发、测试和生产统一部署流程。④自动化镜像构建和部署等重复任务。

93cc7c068ebece071076682c8f3f324d.png

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端直接调试

9e8f51172ec7c29a5e8949c90fe0cd6e.png

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;
ca9c1729ba966dd1b21765de9465f7b3.png

2、下载样例项目

DevSpace支持多种类型的语言,如Node.js、Python、Golang、PHP、Ruby等,这里以Golang语言为例。

$ git clone https://github.com/devspace-cloud/quickstart-golang && cd quickstart-golang
9e8f30a6c3915e1829e138ad069ba6ef.png

3、初始化

初始化项目会创建配置文件devspace.yaml,这个文件会告诉DevSpace如何部署这个项目。执行命令进行初始化:

$ devspace init
6d280a943d83eed6b16b89f7f29170cd.png

创建好的devspace.yaml文件内容如下:

49aa5795f7222f6cdb231f062a4e8922.png

4、选择Kubernetes集群

选择这个项目部署上去的集群,这里选择搭建的minikube集群环境,也可以使用其他云平台。使用如下命令告诉DevSpace要使用哪个命名空间。

# Tell DevSpace which namespace to use (will be created automatically during deployment)$ devspace use namespace my-namespace

这里使用minikube里的default命名空间。

1ce2ce9f7ab2724535d957607ba1a3e6.png

5、部署

注意:由于在部署时会拉取golang.org地址下载的依赖包,在Dockerfile里需要指定GOPROXY的环境变量。

Dockerfile里添加这两个环境变量:

# set go proxyENV GO111MODULE onENV GOPROXY https://goproxy.io

执行如下命令进行部署。

$ devspace deploy
74eba2662710b44f2dab83dcb87b4152.png

查看default命名空间下的pod,可以看出这个项目已经处于Running状态。

a46c282d49c220eafad52ca43b8bc4c2.png

6、浏览器查看

执行如下命令可以在浏览器中打开这个应用。

$ devspace open
9e279aa65697daf5a56dbd7fc5dcf3f3.png

会自动打开浏览器,可以看到当前程序已经在起来了。

b81b4a296eb0918946f74a2ddbb93741.png

7、开发模式

项目一旦成功部署到Kubernetes集群后,就可以启动开发模式,使用终端代理、端口转发和实时代码同步直接在Kubernetes集群内部进行编码。执行如下命令:

$ devspace dev

执行后,可以通过http://localhost:PORT在浏览器中访问服务。当修改源码后,DevSpace会自动同步变更的问题就到Kubernetes容器中。这里用到的是nodemon这种热加载的工具来保证更新变动的文件。在实际执行的时候,报错如下,目前在github上提了issue,有了解的也请指导一下!!!

5f8f79df03f83cf876cff4b7788a3198.png

8、开发界面

如果devspace dev执行成功,会启动一个开发界面,端口是8090,也可以运行devspace ui命令启动这个界面。

f1de6275742eda5ef08822601eddf19a.png

开发界面会显示当前开发环境所在的KubeContext和Namespace,能够开发Web Terminal进入当前项目的容器、显示devspace.yaml文件内容,方便开发人员查看和调试。

25359b4c4632c162e3df9795e577d2ec.png

五、总结

DevSpace的设计更加的巧妙,并且DevSpace能适配多种构建工具与部署工具,DevSpace提供的命令行命令也非常齐全,并且也支持IDE中的Terminal,如ATOM、VS Code和Eclipse。DevSpace的同步机制是本地文件与运行在Kubernetes中的容器内部的文件同步,并使用热加载技术在不重启容器的情况下更新变更的代码,真正可以做到持续不断的开发、调试。

DevSpace也多种方式划分不同的开发阶段,如果Dev、Staging 和Production。在构建阶段,可以通过不同的Dockerfile划分,可以使用相关的Dockerfile不同的ENTRYPOINT划分。在部署阶段,可以使用不同的命令或参数,可以使用不同的镜像名称或标签,可以使用不同的环境变量。不管你有什么样的需求,DevSpace都有一个方案为你解决,DevSpace值得一试。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值