怎么将SpringBoot应用部署到K8S中-创新互联

怎么将SpringBoot应用部署到K8S中?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

专注于为中小企业提供网站制作、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业灵石免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

内容简介

  1. 如果您正在开发SpringBoot应用,并且应用部署在K8S环境,可以参考本文将应用快速部署到K8S环境;

  2. 文中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工程源码

本次实战用到了一个普通的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应用部署到K8S中

必要的内容

整个工程是普通SpringBoot工程,除了常见的pom.xml和源码,还多了以下三个文件:

怎么将SpringBoot应用部署到K8S中

  • 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;

  • 控制台提示如下:

怎么将SpringBoot应用部署到K8S中

部署已经完成,可以验证功能了;

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


标题名称:怎么将SpringBoot应用部署到K8S中-创新互联
路径分享:http://azwzsj.com/article/dihheh.html