一文熟悉golang编写k8s应用部署工具

背景:在上篇文章里,完成了一个简陋的spring cloud + k8s的应用系统,那么如果手工部署的话,那得分别打包5个服务,打5个镜像,然后安装5个服务。凡是麻烦的工作,都要去让工具来干。

然后我就做了一个简陋的可视化部署工具,输入仓库git地址,由golang来负责clone repository -> build docker images -> helm install

代码仓:chintensakai/learn-spring-cloud (gitee.com)

1. 思路

  • 为什么用golang?因为我后期会加入k8s相关资源的展示看板,以及各节点的docker资源看板,而golang拥有k8s和docker官方提供的client sdk,肥肠方便。
  • 流程分三步:
    1. 输入git仓库日志,步骤条按钮展示clone,点击调用/git/clone接口,后台gin收到请求,使用go-git库去clone本项目,clone结束之后,遍历项目目录,寻找包含package目录的项目,这些项目就是一会helm需要安装的项目;同时寻找dependencies聚合项目,mvn clean package来打包。
    2. 1步结束之后,按钮变为build,点击调用/docker/build接口,前台把1步骤返回的需要安装的项目列表携带到后端,后端使用docker sdk到对应目录里面,根据Dockerfile构建镜像,并推送到本地registry。这一步最为耗时,经过了一些已知办法的优化,后面打算用goroutine重写build和push的过程,理论上可以再节省4/5的时间 已经用goroutine重写,但是效果没有想象中那么好,build镜像阶段确实并发了,但是push阶段似乎还是老样子,可能跟registry的机制有关系吧。但是有个意外收获,这里设计成主线程没有等待goroutine结束就返回了,因为下一个步骤是helm install,并不会受goroutine的影响,他会不断等待镜像,所以主线程直接返回就好了,留下goroutine自己在后台build & push images就行了。
    3. 2步结束之后,按钮变为helm install,点击之后调用/helm/install接口,helm的go sdk有点复杂,而且这一步的工作很简单,所以直接调用系统command更方便。

2. 最终结果:

2.1 /git/clone 接口:

2.2 /docker/build 接口:

2.3 /helm/install 接口:

2.4 安装完成:

3. 一些优化的点:

之前的基础镜像太大,push和pull的过程无法忍受,单个镜像的build和push就需要11分钟 

使用alpine + springboot 分层构建 + 本地镜像仓库,5个镜像build&push只需要一两分钟,越往后越快,因为有的镜像层可以复用。而且真正使用的话肯定是自己的私有仓库,所以这一步都是一些已知办法,不是我自己发明的。 

全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务