一、背景
公司需要提供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項目從鏡像製作到服務啓動已經全部完成。