欢迎访问我的GitHub

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

背景

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

内容简介

  1. 如果您正在开发SpringBoot应用,并且应用部署在K8S环境,可以参考本文将应用快速部署到K8S环境;
  2. 文中SpringBoot的版本是,从该版本起,SpringBoot官方推荐了一种新的docker镜像构建方案,如果您是之前的版本,请自行修改文中构建镜像的部分;

环境信息

本次实战有两个环境:开发和运行环境,其中开发环境信息如下:

  1. 操作系统:Ubuntu 20.04 LTS 桌面版(同样验证过的还有:MacBook pro 13寸,macOS Catalina 10.15.4)
  2. CPU : × 4,内存:32G,硬盘:1T NVMe
  3. JDK:1.8.0_231
  4. MAVEN:3.6.3
  5. SpringBoot:
  6. Docker:
  7. 开发工具:IDEA 2020.1.1 (Ultimate Edition)

运行环境信息如下:

  1. 操作系统:CentOS Linux release 7.8.2003
  2. Kubernetes:

另外,请在开发环境安装sshpass;

SpringBoot工程源码

  1. 本次实战用到了一个普通的SpringBoot工程,源码可在GitHub下载到,地址和链接信息如下表所示():
  1. 这个git项目中有多个文件夹,本章的应用在probedemo文件夹下,如下图红框所示:

必要的内容

  1. 整个工程是普通SpringBoot工程,除了常见的和源码,还多了以下三个文件:
  2. Dockerfile文件用来构建docker镜像,如果您的SpringBoot版本为或者更高,建议使用SpringBoot官方推荐的镜像构建方式,此Dockerfile可以用来参考;
  3. 和文件和您的具体项目有关,请自行修改,确保可以用来部署deployment和service;
  4. 是可以快速部署的关键,接下来详细说明;

详述

的作用如下:

  1. 调用maven命令编辑构建工程;
  2. 将构建好的jar文件制作成docker镜像;
  3. 将docker镜像导出为tar文件;
  4. 将tar文件上传到K8S服务器;
  5. 将文件发送到K8S服务器;
  6. 通过sshpass远程执行命令,将docker镜像导入K8S服务器的本地docker仓库;
  7. 通过sshpass远程执行命令,部署deployment和service;
  8. 的完整内容如下:
#!/bin/bash# 判断是否安装了sshpass
if ! [ -x "$(command -v sshpass)" ]; thenecho '请安装sshpass后再使用此脚本!'exit 1
fi# 镜像名
IMAGE_NAME='bolingcavalry/probedemo'# TAG名
TAG_NAME=''# 配置了deployment和service的yaml文件名
DEPLOY_SERVICE_YAML=''# K8S环境的IP地址
K8S_IP_ADDRESS=''# 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 -DskipTestsecho "构建镜像文件:"${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}/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}/ ${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 10echo "清理之前加载到本地仓库的镜像:"${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}/"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}/
rm -rf ${CURRENT_DIR}/echo "删镜像:"${IMAGE_NAME}/${TAG_NAME}
docker rmi ${IMAGE_NAME}/${TAG_NAME}

实验

  1. 请按照自己的实际情况,修改中变量的值,例如K8S环境地址、账号密码等;
  2. 开发阶段,修改java代码完成;
  3. 执行脚本;
  4. 控制台提示如下:
  5. 部署已经完成,可以验证功能了;

注意事项

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

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

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

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

springboot 导出文件_开发阶段,将SpringBoot应用快速部署到K8S - 程序员欣宸相关推荐

  1. 了解c语言程序员(工程师)岗位需要掌握哪些能力?_码畜,码农,码皇,程序员有什么区别?...

    这里是开发者交流聚集地,欢迎加入我们一起技术分享,互相交流! 技术交流群:关注本公众号,点击菜单栏即可获取 很多年轻的程序员可能不太了解,虽然大家看着都是写代码的,但从搬砖的码畜到码农到码皇之路还是挺 ...

  2. 程序员用学位证吗_没有学位如何成为一名优秀的Java程序员

    程序员用学位证吗 掌握Java的道路是漫长而棘手的. 但是,在我从事编码工作的那几年中,我获得了一两个提示. 但是,如何成为一名优秀的Java程序员不是一个简单的问题? 您不需要任何正式培训. 您无需 ...

  3. uml+oopc嵌入式c语言开发精讲_新的程序开发模式出现,传统的嵌入式C语言程序员快要灭绝了?...

    来源:嵌入式时代@头条号 在2000年前后,嵌入式软件工程师有着一套非常具体的技能,他们通常是电气工程师,不仅了解底层硬件的工作原理,还可以在底层编写汇编代码或者C语言代码,以使系统满足实时需求.嵌入 ...

  4. web前端开发基础知识_前端开发是什么?学前端开发需要学什么语言?你想成为程序员吗?...

    Web前端是什么 前端的本质就是通过一定的程序代码来实现用户界面的ui 交互.可以认为用户在终端所看到的和所操作的都属于前端,也就是说分为渲染页面和处理用户操作两块. 前端开发是创建Web页面或app ...

  5. 12岁女孩零编程经验开发系统千人用,80岁初代程序员300多天打卡学AI

    金磊 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 纯小白,对AI感兴趣,想学习AI或是尝试做些有趣的小应用,有可能吗? 文科生一枚,自学了Python,但是对AI一无所知,能学深度学习 ...

  6. java开发有不加班的吗_8年Java开发的500强企业大佬告诉你,程序员不加班就没有前途吗?...

    一.有没有不加班的程序员? 有,我一个朋友就是,下面是他的经历: 我目前工作与一家500强外企(欧美),职称为高级软件开发专家.我在这家公司(500强外企)已经服务了8年,所有加班次数合起来不超过一个 ...

  7. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

  8. 年过四十、零基础学前端开发,歪果仁是如何从教师转行程序员的?

    也许你已经清楚了自己的兴趣之所在,但是却没有勇气开始它,或者为自己找了种种借口,按下心中的渴望.但任何时候开始自己感兴趣的东西都不算晚,本文作者过去只是一名老师,对编程怀有好奇和热爱,年过40依然毅然 ...

  9. 程序员发展职业规划_在职阿里6年,一个29岁女程序员的心声

    简单的先说一下,坐标杭州,12届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司. 面试经历 其中成功的有4家,另外2家失败的原因在于: 1.阿里巴巴B2B事业部的面试,两轮技术 ...

  10. 《告别失控:软件开发团队管理必读》一一第1章 程序员为何难以管理

    第1章 程序员为何难以管理 告别失控:软件开发团队管理必读 程序设计作为一种严肃的职业已经存在60多年了.在美国,从事程序设计工作的程序员数以百万计,而全球这个数字更大.这些数字还不包括人数众多的学生 ...

最新文章

  1. Android开发之IPC进程间通信-AIDL介绍及实例解析
  2. 使用JDK的密码流的加密怪癖(以及如何做)
  3. 一键转发抢红包源码及搭建教程
  4. Linux IPC实践(5) --System V消息队列(2)
  5. 推荐Java学习书籍
  6. Android开发时的多点触控是如何实现的?
  7. (原创)无废话C#设计模式之二十:Mediator
  8. struts2 后缀问题
  9. RN开发关闭所有黄色警告弹出(console.warn())
  10. rstudio导入txt文件_R语言 | 读写txt、csv、excel文件
  11. 7-7 六度空间 (30分)
  12. android设置透明主题后背景为黑色,android – 活动应该是透明的,但有黑色背景
  13. iis mysql安装包下载_配置Windows Server2008+iis+php+mysql所需下载安装包
  14. python循环代码优化技巧_记一次优化python循环代码逻辑的过程
  15. AVS2的GB帧与s帧
  16. python中gzip库用法详解(压缩和解压缩)
  17. 【待更新】【UWB】UWB 学习、使用及 QCA平台移植实例
  18. intel dpdk api rte_eal_hpet_init() 函数介绍
  19. TokenRise的见茶卸甲@一杯严选 六道一辉探访“茶人的栖息地@世科坊”
  20. Python UI设计学习笔记,第四课:构建左侧菜单,使用 `QPushButton`

热门文章

  1. 毕设题目:Matlab表盘识别
  2. c语言程序设计精髓第七周编程题,C语言程序设计精髓编程题在线测试
  3. mathematica完爆matlab,Mathematica和Matlab相比的计算效率问题
  4. linux安装包安装nginx,Linux tar包安装Nginx
  5. 报表服务器无法打开数据库连接 修改 web.config,修改服务器数据库连接配置
  6. 工程项目进度表excel模板_救命,每天都要做工作报告!Excel一键生成精美报告的技巧,必学!...
  7. libevent c++高并发网络编程_高并发-网络I/O
  8. ant脚本 变量赋值_【Jmeter】Jmeter+ant+jenkins持续集成
  9. linux网络服务错误6026,wpa_supplicant/wpa_cli无法检测到接入点的错误密钥
  10. webpack 处理字体_不可错过的Webpack核心知识点