SpringBoot应用快速部署到K8S的详细教程

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:

所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

背景

对于生产环境,我们一般会用CI&&CD工具完成整个构建和部署,因此本文不适合生产环境;对于学习和开发环境,我们频繁修改代码,又想快速见到效果,本文就是针对这种场景的;

内容简介

  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工程,除了常见的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;
  • 控制台提示如下:

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

注意事项

本次实战更新镜像的方法是本地导出为tar,再传到K8S环境去导入,当K8S环境有多台机器时就不适合这样作了,建议使用私有镜像仓库,将镜像push到仓库,然后K8S中镜像仓库pull镜像;

至此,SpringBoot应用快速部署到K8S的实战就完成了,这是我开发过程中常用的远程部署手段,希望能给您提供一些参考;

你不孤单,欣宸原创一路相伴

Java系列

Spring系列

Docker系列

kubernetes系列

数据库+中间件系列

DevOps系列

到此这篇关于SpringBoot应用快速部署到K8S的详细教程的文章就介绍到这了,更多相关SpringBoot部署到K8S内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 部署vue+Springboot前后端分离项目的步骤实现

    单页应用 vue经常被用来开发单页应用(SinglePage Web Application,SPA),什么叫做单页应用呢,也就是只有一张web页面的应用,单页应用的跳转只需要刷新局部资源,大大加快的了我们页面的响应速度 前端页面打包 打开vue工程,在项目根目录下创建一个配置文件:vue.config.js,然后在里面写入以下内容: module.exports = { assetsDir: 'static', // 静态资源保存路径 outputDir: 'dist', // 打包后生成的文

  • 运用springboot搭建并部署web项目的示例

    前言 一直以来都是用springmvc+mybatis进行后端接口开发工作,最近闲来无事,根据现有功能需求,用springboot+mybatis部署一套简单的web项目. 所用工具 IntelliJ IDEA 2018.1.4 JDK 1.8 apache-tomcat-8.0.50 所解决的问题 1.如何用idea创建springboot项目 2.如何进行 服务器.数据库.mybatis.视图解析器的配置 3.如何使用mybatis generator 自动生成代码 4.如何使用multip

  • SpringBoot 在IDEA中实现热部署步骤详解(实用版)

    好的热部署让开发调试事半功倍,这样的"神技能"怎么能错过呢, 使用过IDEA的童鞋赶紧进来撸一把吧. 学习目标 快速学会在项目中使用热部署插件运行项目,提高开发效率. 具体步骤 一.开启IDEA的自动编译(静态) 具体步骤:打开顶部工具栏  File -> Settings -> Default Settings -> Build -> Compiler  然后勾选 Build project automatically . 二.开启IDEA的自动编译(动态)

  • 利用Dockerfile部署SpringBoot项目的方法

    1.创建一个SpringBooot项目并且打成jar包 2.在Linux中创建一个文件夹,来做docker测试 [root@izwz90lvzs7171wgdhul8az ~]# mkdir /root/docker_test 3.将jar包上传到Linux中 创建存放jar包的文件夹 [root@izwz90lvzs7171wgdhul8az docker_test]# mkdir /root/docker_test/jar 然后利用XShell上传jar包到上面的文件夹中 4.编写Docke

  • 服务器使用Nginx部署Springboot项目的详细教程(jar包)

    1,将java项目打成jar包 这里我用到的是maven工具 这里有两个项目,打包完成后一个为demo.jar,另一个为jst.jar 2.准备工具 1.服务器 2.域名(注:经过备案) 3.Xshell用于连接服务器 4.WinScp(注:视图工具,用于传输jar) 3.将jar包传入服务器 直接拖动即可 3.使用Xshell运行jar包 注:(服务器的java环境以及maven环境,各位请自行配置,这里不做描述.) cd到jar包路径下执行:nohup java -jar demo.jar

  • SpringBoot应用快速部署到K8S的详细教程

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容: 所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS等: 背景 对于生产环境,我们一般会用CI&&CD工具完成整个构建和部署,因此本文不适合生产环境:对于学习和开发环境,我们频繁修改代码,又想快速见到效果,本文就是针对这种场景的: 内容简介 如果您正在开发SpringBoot应用,并且应用部署在K8S环境,可以参考本文将应用快速部署到K8S环

  • CentOS下宝塔部署Django项目的详细教程

    基础环境 装好宝塔服务 宝塔里装好[Python项目管理器] 宝塔里装好[Nginx] 把Django项目代码发到服务器 把代码放到服务器上有两种方法: 方法一:服务器上安装Git,通过Git Clone代码到服务器上 方法二:通过宝塔的FTP工具把代码上传上去 注意: 在目录:/www/wwwroot/下新建一个文件夹, 把代码需要放到新建的目录中 创建Python(Django)项目 现在我们开始创建 python 项目.打开首页的 python 项目管理器,点击 添加项目.填充数据: *

  • centos8使用Docker部署Django项目的详细教程

    引言 在本文中将介绍在Docker中通过django + uwsgi + nginx部署方式部署Django项目, 由于记录的是学习过程,使用的都是目前较高的版本. python  版本为3.8.3 django  版本为3.0.6 nginx   版本为1.17.10 好了简单的介绍之后,就进入正题了. 创建一个工作目录 创建一个工作目录用来存放项目,和Dockerfile等文件. mkdir uwsgidocker 简单说明一下各个文件 docker-compose.yml: Docker

  • docker-compose部署配置jenkins的详细教程

    docker-compose部署配置jenkins  一.docker-compose文件 version: '3.1' services: jenkins: image: jenkins/jenkins:lts volumes: - /data/jenkins/:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /usr/lib/x86_64-lin

  • 如何利用Gitlab-ci持续部署到远程机器(详细教程)

    长话短说,今天聊一聊使用Gitlab-CI 自动部署到远程服务器. 看过这篇文章的朋友,会注意到我是在 Gitlab-Runner服务器上自动部署的站点,本次我们结合ssh部署到远程机器(将CI服务器和部署服务器分离,避免资源抢占). SSH免密登陆 还是那句话,CI/CD实质是将我们手动集成.拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控. 要让Gitlab Runner部署到远程机器,远程机器必须信任gitlab runner账户. 先执行su gitlab-runner切换到git

  • Armbian5.9.0安装docker及部署可视化portainer的详细教程

    目录 安装 docker 如何查看 docker 是否安装成功? 如何启动docker? 如何安装可视化portainer 安装英文版本 安装中文版 什么是docker?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). bare metal.OpenStack 集群和其他的基础应用平台. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续

  • docker maven plugin快速部署微服务的详细流程

    目录 一.前置条件 二.部署方法 1.开放远程部署端口 3.修改application文件 4.打包上传并创建镜像 5.启动容器 三.总结 一.前置条件 linux下装好docker并启动 1.使用国内 daocloud 一键安装命令 curl -sSL https://get.daocloud.io/docker | sh 2.启动docker systemctl start docker.service 二.部署方法 1.开放远程部署端口 <1>修改 docker 的配置文件 /lib/s

  • Spring Boot 快速搭建微服务框架详细教程

    前言: SpringBoot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定. Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录. Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XM

  • 一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程

    目录闲言碎语:背景Actuator介绍Rest方法来查看Actuatorpom.xml引入Actuator依赖配置application.yml运行项目Actuator配合SpringBootSecurity配置application.xml运行项目配置关闭项目API端口配置application.yml命令行执行post关闭指令附:Actuator端口信息附:SpringBoot自带的健康指示器赠言 闲言碎语:   最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想

  • Ubuntu16.04安装部署solr7的图文详细教程

    本文为大家分享了Ubuntu16.04安装部署solr7的具体方法,供大家参考,具体内容如下 VMware12.0+Ubuntu16.04+jdk1.8.0_171+Tomcat8.0.53+solr7.4.0 首先看看安装成功的界面,纪念一下,哈哈哈-- 在安装部署solr之前,先安装好jdk1.8和Tomcat8.0的环境,然后对下载好的solr进行解压: 解压后的文件夹有以下内容: 然后我们进入到/server/solr-webapp目录,里面有一个webapp,将这个webapp复制到/

随机推荐