DEVOPS-在K8S生产集群上构建SpringBoot应用

释放双眼,带上耳机,听听看~!

一、背景

公司需要提供Saas服务给客户经理通过企业微信进行获客展业,所以需要在企业微信上构建一套营销助手,用于客户经理推销自己的产品。

二、定制镜像

SpringBoot项目可以直接做成镜像,因为SpringBoot内置了一个tomcat,一些自定义的参数可以传给java -jar,在启动的时候加载这些自定义的参数【包括程序占用内存,指定编码等】

2.1 定制SpringBoot业务镜像

2.1.1 编写Dockerfile

  • 拷贝项目编译好的jar包到centos7.6下的/opt目录
  • 拷贝application.properties到jar包的同级目录,启动的时候会优先加载,方便修改
  • 拷贝qwhosts文件到centos7.6下的/opt目录,拷贝checkAndStart.sh文件到centos7.6的/bin目录
  • 启动checkAndStart.sh,接收运行参数$1和运行占用端口$2

  ] # vim Dockerfile


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1FROM registry.moguyun.com/centos:7.6
2MAINTAINER lijun moguyun.com
3
4ENV JAR_FILE mogu-im-0.0.1-SNAPSHOT.jar
5ENV RUN_PORT 8080
6ENV RUN_OPTION "-server -Xms1g -Xmx4g -Xmn256m -Dfile.encoding=UTF-8"
7
8COPY $JAR_FILE /opt/app.jar
9COPY BOOT-INF/classes/application* /opt/
10COPY qwhosts /opt/
11COPY checkAndStart.sh /bin/
12
13WORKDIR /opt
14RUN cd /opt && mkdir logs && sh -c "touch /opt/app.jar"
15
16ENTRYPOINT ["sh","-c","/bin/checkAndStart.sh \"$RUN_OPTION\" \"$RUN_PORT\""]
17

2.1.2 编写qwhosts

  • SpringBoot业务应用会用到MySQL,MongoDB,Redis数据库,在程序中已经定义好别名,在hosts中定义好了实际服务地址
  • pinpoint-agent会用到pinpoint服务端别名,在hosts中也已经定义好服务端具体地址

] # vim qwhosts


1
2
3
4
5
6
110.10.8.8    jdbc.mg.addr
210.10.8.9    mongo.mg.addr
310.10.8.9    mongo.readonly.mg.addr
410.10.8.17  redis.mg.addr
510.10.8.10  pp.mg.addr
6

2.1.3 编写checkAndStart.sh

  • 判断/opt/qwhosts是否存在,如果存在则追加记录到容器的/etc/hosts文件后面
  • 通过java -jar 启动,接收运行时参数$1,运行时占用端口$2

  ] # vim checkAndStart.sh 


1
2
3
4
5
6
7
1#!/bin/bash
2HOST_FILE=/opt/qwhosts
3if [ -f "$HOST_FILE" ]; then
4  cat $HOST_FILE >> /etc/hosts
5fi
6java $1 -jar app.jar --server.port=$2
7

2.1.4 编写制作推送镜像版本

  • 把项目名称,项目分支,当前时间三个参数作为业务镜像的tag用来标识K8S线上环境的镜像唯一性,方便回滚和确认分支

  • 通过docker build将当前目录下的Dockerfile打成镜像并通过docker push推动镜像到远程仓库供K8S线上环境使用


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1#!/bin/bash
2
3currentTime=`date "+%Y%m%d%H%M%S"`
4echo $currentTime
5projectName=$1
6branch=$2
7echo ${projectName}_${branch}_${currentTime}
8tag=${projectName}_${branch}_${currentTime}
9
10# docker build -t ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag} . --no-cache
11docker build -t ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag} .
12docker push ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag}
13
14

三、运行镜像

3.1 创建Deployment

3.1.1 定义实例内的容器

  • 选择已经做好的SpringBoot镜像和版本,勾选拉取策略【默认使用本地镜像,本地没有则拉取】
  • 配置CPU/内存限制【Request是指预分配资源,Limit是容器资源限制,避免异常情况节点资源消耗太多】
  • 自定义环境变量,可以修改RUN_PORT和RUN_OPTION作为变量传递给java -jar

创建Deployment部分截图

DEVOPS-在K8S生产集群上构建SpringBoot应用

3.2 验证deployment

3.2.1 查看服务启动日志

  • 查看日志可知服务已经跑起来了,说明SpringBoot镜像在生产K8S集群启动成功

DEVOPS-在K8S生产集群上构建SpringBoot应用

至此:SpringBoot项目从镜像制作到服务启动已经全部完成。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

故障复盘的简洁框架-黄金三问

2021-9-30 19:18:23

安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索