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項目從鏡像製作到服務啓動已經全部完成。

發佈了172 篇原創文章 · 獲贊 40 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章