Spring Cloud + GitLab + Docker + K8S持续集成搭建笔记
闲言
我以前比较少记技术笔记,就算记也很简略,自认为记性比较好嘛,哈哈~
再则呢,就算忘了,以前能搞定,再遇到一次也一样能搞定,对吧。
直到有一天出了这么件事:
那天遇到一个坑,搞了好一会儿就没找到满意的方案,于是想起某同事上月貌似也搞过这方面的,应该也会遇到这坑,于是QQ上问了下。果然很快给了方案过来,我看了后称赞这方案不错啊。
然后对方回了个信息过来:…客气了,这方案是我上月问你的时候你教我的。。。
我:。。。
从那以后,我记笔记就勤快认真多了。。。
趁最近有时间,整理了一下Spring Cloud + GitLab + Docker + K8S的搭建笔记,放在GitHub上,若有纰漏,欢迎指正。
详细笔记及模板工程地址
https://github.com/johnhuang-cn/spring-cloud-k8s-ci-template
主要内容
Spring Cloud Hello World工程基于SpringCloud 2.0.3,含Eureka,Feign/Hystrix,Gateway
GitLab及持续集成配置
Docker及本地Docker仓库
Kubernetes Minikube搭建及部署
预备环境
CentOS7 Linux主机两台:
主机A: Docker本地仓库,GitLab及GitLab Runner环境,本文档中IP为192.168.1.211
主机B:Kubernetes Minikube环境, 本文档中IP为192.168.1.201
预备知识
掌握基本Spring Boot开发
掌握Linux,Git,Maven基础操作
了解Kubernetes基础知识
了解Docker基本概念和命令
了解持续集成基础知识
了解Spring Cloud各基本组件:Eureka Server/Client,Feign,Gateway
基本步骤及原理
GitLab内置有CI功能,可代替Jenkins完成大部分的编译打包发布场景。常见的CI过程直接由GitLab完成要方便些。要让GitLab启动CI,需要在工程根目录添加.GitLab-ci.yml文件,在该文件里编写CI脚本。
通常一个spring boot工程部署到K8S的过程是这样的:
用Maven打包成jar
生成docker镜像
将生成的镜像push到docker镜像库
用kubectl将镜像发布到K8S集群
为什么使用Docker:
打包编译和运行过程使用Docker不会污染主机环境,由于Docker的无状态特性,每次启动都是全新干净的环境,确保每次打包编译和运行都是全新的
将应用程序打成Docker,可以实现一次编译,到处运行
用Docker简化了部署,直接操作容器服务就可以了,基本可以忽略Linux操作系统间的差别,不需要每套服务器分别安装配置,不需要记复杂的Linux各项配置。
用了Spring Cloud为什么还要使用K8S:
K8S提供的滚动更新对运维来说十分方便,可以实现平滑升级,也可以在升级失败后,快速回滚到上一版本
K8S可以方便地进行弹性伸缩
自动修复,自动重启
下面开始设置完成这4个步骤所需的环境和脚本。
架构图
组成:Gateway api网关 > 消费端 > 服务端 和 一个注册中心,共4个Spring Boot项目