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

预备知识

  1. 掌握基本Spring Boot开发

  2. 掌握Linux,Git,Maven基础操作

  3. 了解Kubernetes基础知识

  4. 了解Docker基本概念和命令

  5. 了解持续集成基础知识

  6. 了解Spring Cloud各基本组件:Eureka Server/Client,Feign,Gateway

基本步骤及原理

GitLab内置有CI功能,可代替Jenkins完成大部分的编译打包发布场景。常见的CI过程直接由GitLab完成要方便些。要让GitLab启动CI,需要在工程根目录添加.GitLab-ci.yml文件,在该文件里编写CI脚本。

通常一个spring boot工程部署到K8S的过程是这样的:

  1. 用Maven打包成jar

  2. 生成docker镜像

  3. 将生成的镜像push到docker镜像库

  4. 用kubectl将镜像发布到K8S集群

为什么使用Docker:

  1. 打包编译和运行过程使用Docker不会污染主机环境,由于Docker的无状态特性,每次启动都是全新干净的环境,确保每次打包编译和运行都是全新的

  2. 将应用程序打成Docker,可以实现一次编译,到处运行

  3. 用Docker简化了部署,直接操作容器服务就可以了,基本可以忽略Linux操作系统间的差别,不需要每套服务器分别安装配置,不需要记复杂的Linux各项配置。

用了Spring Cloud为什么还要使用K8S:

  1. K8S提供的滚动更新对运维来说十分方便,可以实现平滑升级,也可以在升级失败后,快速回滚到上一版本

  2. K8S可以方便地进行弹性伸缩

  3. 自动修复,自动重启

下面开始设置完成这4个步骤所需的环境和脚本。

架构图

这里写图片描述
组成:Gateway api网关 > 消费端 > 服务端 和 一个注册中心,共4个Spring Boot项目
这里写图片描述

章节目录

这里写图片描述
这里写图片描述


版权声明:本文为javaboy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。