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

FROM registry.moguyun.com/centos:7.6
MAINTAINER lijun moguyun.com

ENV JAR_FILE mogu-im-0.0.1-SNAPSHOT.jar
ENV RUN_PORT 8080
ENV RUN_OPTION "-server -Xms1g -Xmx4g -Xmn256m -Dfile.encoding=UTF-8"

COPY $JAR_FILE /opt/app.jar
COPY BOOT-INF/classes/application* /opt/
COPY qwhosts /opt/
COPY checkAndStart.sh /bin/

WORKDIR /opt
RUN cd /opt && mkdir logs && sh -c "touch /opt/app.jar"

ENTRYPOINT ["sh","-c","/bin/checkAndStart.sh \"$RUN_OPTION\" \"$RUN_PORT\""]

2.1.2 编写qwhosts

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

] # vim qwhosts

10.10.8.8    jdbc.mg.addr
10.10.8.9    mongo.mg.addr
10.10.8.9    mongo.readonly.mg.addr
10.10.8.17  redis.mg.addr
10.10.8.10  pp.mg.addr

2.1.3 编写checkAndStart.sh

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

  ] # vim checkAndStart.sh 

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

2.1.4 编写制作推送镜像版本

  • 把项目名称,项目分支,当前时间三个参数作为业务镜像的tag用来标识K8S线上环境的镜像唯一性,方便回滚和确认分支
  • 通过docker build将当前目录下的Dockerfile打成镜像并通过docker push推动镜像到远程仓库供K8S线上环境使用
#!/bin/bash

currentTime=`date "+%Y%m%d%H%M%S"`
echo $currentTime
projectName=$1
branch=$2
echo ${projectName}_${branch}_${currentTime}
tag=${projectName}_${branch}_${currentTime}

# docker build -t ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag} . --no-cache
docker build -t ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag} .
docker push ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag}

三、运行镜像

3.1 创建Deployment

3.1.1 定义实例内的容器

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

创建Deployment部分截图

3.2 验证deployment

3.2.1 查看服务启动日志

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

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

发布了161 篇原创文章 · 获赞 40 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/103658663