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的时间
    3. 2步结束之后,按钮变为helm install,点击之后调用/helm/install接口,helm的go sdk有点复杂,而且这一步的工作很简单,所以直接调用系统command更方便。

2. 最终结果:

image.png

2.1 /git/clone 接口:

image.png

2.2 /docker/build 接口:

image.png

2.3 /helm/install 接口:

image.png

2.4 安装完成:

image.png

3. 一些优化的点:

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

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

image.png

扫描二维码关注公众号,回复: 13653013 查看本文章

猜你喜欢

转载自juejin.im/post/7050657208677171231