溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么將SpringBoot應(yīng)用部署到K8S中

發(fā)布時間:2020-12-16 14:17:55 來源:億速云 閱讀:834 作者:Leah 欄目:開發(fā)技術(shù)

怎么將SpringBoot應(yīng)用部署到K8S中?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

內(nèi)容簡介

  1. 如果您正在開發(fā)SpringBoot應(yīng)用,并且應(yīng)用部署在K8S環(huán)境,可以參考本文將應(yīng)用快速部署到K8S環(huán)境;

  2. 文中SpringBoot的版本是2.3.0.RELEASE,從該版本起,SpringBoot官方推薦了一種新的docker鏡像構(gòu)建方案,如果您是之前的版本,請自行修改文中構(gòu)建鏡像的部分;

環(huán)境信息

本次實戰(zhàn)有兩個環(huán)境:開發(fā)和運行環(huán)境,其中開發(fā)環(huán)境信息如下:

  • 操作系統(tǒng):Ubuntu 20.04 LTS 桌面版(同樣驗證過的還有:MacBook pro 13寸,macOS Catalina 10.15.4)

  • CPU :2.30GHz × 4,內(nèi)存:32G,硬盤:1T NVMe

  • JDK:1.8.0_231

  • MAVEN:3.6.3

  • SpringBoot:2.3.0.RELEASE

  • Docker:19.03.10

  • 開發(fā)工具:IDEA 2020.1.1 (Ultimate Edition)

運行環(huán)境信息如下:

  • 操作系統(tǒng):CentOS Linux release 7.8.2003

  • Kubernetes:1.15

另外,請在開發(fā)環(huán)境安裝sshpass;

SpringBoot工程源碼

本次實戰(zhàn)用到了一個普通的SpringBoot工程,源碼可在GitHub下載到,地址和鏈接信息如下表所示(https://github.com/zq2599/blog_demos):

名稱鏈接備注項目主頁https://github.com/zq2599/blog_demos該項目在GitHub上的主頁git倉庫地址(https)https://github.com/zq2599/blog_demos.git該項目源碼的倉庫地址,https協(xié)議git倉庫地址(ssh)git@github.com:zq2599/blog_demos.git該項目源碼的倉庫地址,ssh協(xié)議




這個git項目中有多個文件夾,本章的應(yīng)用在probedemo文件夾下,如下圖紅框所示:

怎么將SpringBoot應(yīng)用部署到K8S中

必要的內(nèi)容

整個工程是普通SpringBoot工程,除了常見的pom.xml和源碼,還多了以下三個文件:

怎么將SpringBoot應(yīng)用部署到K8S中

  • Dockerfile文件用來構(gòu)建docker鏡像,如果您的SpringBoot版本為2.3.0.RELEASE或者更高,建議使用SpringBoot官方推薦的鏡像構(gòu)建方式,此Dockerfile可以用來參考;

  • 和probedemo.yaml文件和您的具體項目有關(guān),請自行修改,確保可以用來部署deployment和service;

  • auto_deploy.sh是可以快速部署的關(guān)鍵,接下來詳細(xì)說明;

auto_deploy.sh詳述

auto_deploy.sh的作用如下:

  • 調(diào)用maven命令編輯構(gòu)建工程;

  • 將構(gòu)建好的jar文件制作成docker鏡像;

  • 將docker鏡像導(dǎo)出為tar文件;

  • 將tar文件上傳到K8S服務(wù)器

  • 將probedemo.yaml文件發(fā)送到K8S服務(wù)器;

  • 通過sshpass遠(yuǎn)程執(zhí)行命令,將docker鏡像導(dǎo)入K8S服務(wù)器的本地docker倉庫;

  • 通過sshpass遠(yuǎn)程執(zhí)行命令,部署deployment和service;

  • auto_deploy.sh的完整內(nèi)容如下:

#!/bin/bash

# 判斷是否安裝了sshpass
if ! [ -x "$(command -v sshpass)" ]; then
 echo '請安裝sshpass后再使用此腳本!'
 exit 1
fi

# 鏡像名
IMAGE_NAME='bolingcavalry/probedemo'

# TAG名
TAG_NAME='0.0.1'

# 配置了deployment和service的yaml文件名
DEPLOY_SERVICE_YAML='probedemo.yaml'

# K8S環(huán)境的IP地址
K8S_IP_ADDRESS='192.168.50.135'

# K8S環(huán)境的SSH賬號
K8S_SSH_ACCOUNT='root'

# 8S環(huán)境的SSH密碼
K8S_SSH_PSWD='888888'

# K8S上存放tar和yaml文件的位置
K8S_FILE_PATH='~/deploy_temp'

# 當(dāng)前名目錄
CURRENT_DIR=`pwd`

echo '開始自動構(gòu)建和部署,當(dāng)前目錄是:'${CURRENT_DIR}

# 執(zhí)行maven命令構(gòu)建項目
mvn clean package -U -DskipTests

echo "構(gòu)建鏡像文件:"${IMAGE_NAME}/${TAG_NAME}
docker build -t ${IMAGE_NAME}/${TAG_NAME} .

echo "將鏡像導(dǎo)出為tar文件:"${IMAGE_NAME}/${TAG_NAME}
docker save ${IMAGE_NAME}/${TAG_NAME} > ${CURRENT_DIR}/image.tar

echo "在K8S服務(wù)器創(chuàng)建存放文件的目錄:"${K8S_FILE_PATH}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "mkdir -p ${K8S_FILE_PATH}"

echo "將yaml文件發(fā)送到K8S服務(wù)器:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} scp ${CURRENT_DIR}/${DEPLOY_SERVICE_YAML} ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS}:${K8S_FILE_PATH}/

echo "將鏡像tar文件發(fā)送到K8S服務(wù)器:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} scp ${CURRENT_DIR}/image.tar ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS}:${K8S_FILE_PATH}/

echo "如果K8S環(huán)境之前已經(jīng)部署過,就先清理:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "kubectl delete -f ${K8S_FILE_PATH}/${DEPLOY_SERVICE_YAML}"

echo "等待10秒"
sleep 10

echo "清理之前加載到本地倉庫的鏡像:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "docker rmi ${IMAGE_NAME}/${TAG_NAME}"

echo "從tar文件加載鏡像:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "docker load < ${K8S_FILE_PATH}/image.tar"

echo "部署:"${IMAGE_NAME}/${TAG_NAME}
sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "kubectl apply -f ${K8S_FILE_PATH}/${DEPLOY_SERVICE_YAML}"

echo "刪除tar文件:"${CURRENT_DIR}/image.tar
rm -rf ${CURRENT_DIR}/image.tar

echo "刪鏡像:"${IMAGE_NAME}/${TAG_NAME}
docker rmi ${IMAGE_NAME}/${TAG_NAME}

實驗

  • 請按照自己的實際情況,修改auto_deploy.sh中變量的值,例如K8S環(huán)境地址、賬號密碼等;

  • 開發(fā)階段,修改java代碼完成;

  • 執(zhí)行腳本auto_deploy.sh;

  • 控制臺提示如下:

怎么將SpringBoot應(yīng)用部署到K8S中

部署已經(jīng)完成,可以驗證功能了;

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI