一、背景
在现代化工程中,业务服务通常使用 k8s 调用 Pod 来部署容器,假设在业务开发过程中有个小改动需要发布到 Pod 中进行验证。常规的办法是走漫长的流水线编译打包镜像,然后走 k8s 更新集群 Pod 镜像。这里存在的问题就是整个流程太长,每次一个改动想要得到验证需要等待好久。
观察整个部署流程会发现代码编译其实很快,真正耗费时间的是 CI/CD 流水线和 k8s 调用 Pod 更新镜像的过程,而且如果更新过程只有一台 Pod 还会导致服务不可用。如果我们能够省去重新构建镜像部署容器,就可以节省很多的时间。
二、快发布方案
在这种背景下,提高工程效率的解决方案是在业务容器后台运行一个守护进程,开发者可以在编译机中将编译好的二进制文件直接上传到 k8s 集群指定的 Pod 中,然后远程执行 shelll 命令替换业务中的二进制文件重启业务进程实现快速发布的目标。
注:开发机是指本地开发工程的机器,如果开发机与 k8s 集群之间的网络没有限制,可以省略编译机直连集群 Pod 快速部署。
2.1 流水线改造
一般研发团队通常会使用统一的流水线,使用相同的基础镜像构建业务镜像。在不对业务产生侵入的同时,只需要改造下流水线模板,在镜像构建时将守护进程的二进制文件注入到镜像中,然后添加启动脚本确保守护进程随容器启动在后台。
2.2 快发布工具
回到开发这里,相应的需要一种工具与 k8s 集群中的 Pod 守护进程进行交互实现快速部署。这里实现的方式有很多种,可以单独开发一个二进制命名行工具,也可以写一本 shell 脚本使用 curl 工具发送 HTTP 请求。
考虑到所有的 linux 发行版都会安装有 curl 工具,所以这里使用 curl 来演示,降低使用成本。
# 上传二进制
curl --location http://127.0.0.1:8080/upload --form 'filename=@"/home/xxx/web_service"'
# 执行远程命令
curl --loca服务器托管网tion 'http://127.0.0.1:8080/command'
--header 'Content-Type: text/plain'
--data '/usr/local/start.sh start'
第一步:使用 curl 发送 http 请求将源码编译的二进制文件上传到集群的容器中。
第二步:使用 curl 发送 http 请求携带 shell 命令触发远程容器中执行 shell 命令更新服务。
当然,这里 shell 命令用户可以自由组合, 可以使用任何工程方式集成到已有的工具进行服务的快速部署。
三、守护进程
以上就是整个方案的思路,在我们日常开发过程中高频使用,极大提高了工作效率不用再忍受流水线漫长的构建过程。
思路很有用,技术实现并不复杂,你可以使用任何语言实现这个守护进程,当然你也可以直接使用我开发的这个轻量级后台服务器托管网进程。我已经将它开源在 Github 上了 https://github.com/ZuoFuhong/sentinel。
好了,写到这里已经是周末的晚上 23:30,要休息了。如果觉得还不错可以 Github 上点颗小星星,也欢迎大家在 Issues 区留言一起讨论。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 【React工作记录八十七】React+antDesign实现上传图片功能(类组件)Hello, {props.name}Hello, world!
前言 大家好 我是歌谣 今天继续给大家带来工作中实战部分的一些代码的封装和认识 需求实现 1可以支持上传最多九张图片 2图片支持预览 替换 删除 3支持自定义上传文件大小 格式 未上传提示 实现效果 子组件封装 UploadImage组件 * @Descrip…