欢送拜访我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等;
背景
- 对于生产环境,咱们个别会用CI&&CD工具实现整个构建和部署,因而本文不适宜生产环境;
- 对于学习和开发环境,咱们频繁批改代码,又想疾速见到成果,本文就是针对这种场景的;
内容简介
- 如果您正在开发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工程源码
- 本次实战用到了一个一般的SpringBoot工程,源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...:
名称 | 链接 | 备注 |
---|---|---|
我的项目主页 | https://github.com/zq2599/blo... | 该我的项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blo... | 该我的项目源码的仓库地址,https协定 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该我的项目源码的仓库地址,ssh协定 |
- 这个git我的项目中有多个文件夹,本章的利用在<font color="blue">probedemo</font>文件夹下,如下图红框所示:
必要的内容
- 整个工程是一般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# 判断是否装置了sshpassif ! [ -x "$(command -v sshpass)" ]; then echo '请装置sshpass后再应用此脚本!' exit 1fi# 镜像名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 -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}/image.tarecho "在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 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}/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.tarrm -rf ${CURRENT_DIR}/image.tarecho "删镜像:"${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系列
欢送关注公众号:程序员欣宸
微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...
https://github.com/zq2599/blog_demos