您好,登錄后才能下訂單哦!
怎么將SpringBoot應用部署到K8S中?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
如果您正在開發SpringBoot應用,并且應用部署在K8S環境,可以參考本文將應用快速部署到K8S環境;
文中SpringBoot的版本是2.3.0.RELEASE,從該版本起,SpringBoot官方推薦了一種新的docker鏡像構建方案,如果您是之前的版本,請自行修改文中構建鏡像的部分;
本次實戰有兩個環境:開發和運行環境,其中開發環境信息如下:
操作系統:Ubuntu 20.04 LTS 桌面版(同樣驗證過的還有:MacBook pro 13寸,macOS Catalina 10.15.4)
CPU :2.30GHz × 4,內存:32G,硬盤:1T NVMe
JDK:1.8.0_231
MAVEN:3.6.3
SpringBoot:2.3.0.RELEASE
Docker:19.03.10
開發工具:IDEA 2020.1.1 (Ultimate Edition)
運行環境信息如下:
操作系統:CentOS Linux release 7.8.2003
Kubernetes:1.15
另外,請在開發環境安裝sshpass;
本次實戰用到了一個普通的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協議git倉庫地址(ssh)git@github.com:zq2599/blog_demos.git該項目源碼的倉庫地址,ssh協議
這個git項目中有多個文件夾,本章的應用在probedemo文件夾下,如下圖紅框所示:
整個工程是普通SpringBoot工程,除了常見的pom.xml和源碼,還多了以下三個文件:
Dockerfile文件用來構建docker鏡像,如果您的SpringBoot版本為2.3.0.RELEASE或者更高,建議使用SpringBoot官方推薦的鏡像構建方式,此Dockerfile可以用來參考;
和probedemo.yaml文件和您的具體項目有關,請自行修改,確保可以用來部署deployment和service;
auto_deploy.sh是可以快速部署的關鍵,接下來詳細說明;
auto_deploy.sh詳述
auto_deploy.sh的作用如下:
調用maven命令編輯構建工程;
將構建好的jar文件制作成docker鏡像;
將docker鏡像導出為tar文件;
將tar文件上傳到K8S服務器;
將probedemo.yaml文件發送到K8S服務器;
通過sshpass遠程執行命令,將docker鏡像導入K8S服務器的本地docker倉庫;
通過sshpass遠程執行命令,部署deployment和service;
auto_deploy.sh的完整內容如下:
#!/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環境的IP地址 K8S_IP_ADDRESS='192.168.50.135' # K8S環境的SSH賬號 K8S_SSH_ACCOUNT='root' # 8S環境的SSH密碼 K8S_SSH_PSWD='888888' # K8S上存放tar和yaml文件的位置 K8S_FILE_PATH='~/deploy_temp' # 當前名目錄 CURRENT_DIR=`pwd` echo '開始自動構建和部署,當前目錄是:'${CURRENT_DIR} # 執行maven命令構建項目 mvn clean package -U -DskipTests echo "構建鏡像文件:"${IMAGE_NAME}/${TAG_NAME} docker build -t ${IMAGE_NAME}/${TAG_NAME} . echo "將鏡像導出為tar文件:"${IMAGE_NAME}/${TAG_NAME} docker save ${IMAGE_NAME}/${TAG_NAME} > ${CURRENT_DIR}/image.tar echo "在K8S服務器創建存放文件的目錄:"${K8S_FILE_PATH} sshpass -p ${K8S_SSH_PSWD} ssh ${K8S_SSH_ACCOUNT}@${K8S_IP_ADDRESS} "mkdir -p ${K8S_FILE_PATH}" echo "將yaml文件發送到K8S服務器:"${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文件發送到K8S服務器:"${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環境之前已經部署過,就先清理:"${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環境地址、賬號密碼等;
開發階段,修改java代碼完成;
執行腳本auto_deploy.sh;
控制臺提示如下:
部署已經完成,可以驗證功能了;
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。