SpringBoot项目容器化并部署到kubernetes

背景:

通常基于java的项目一般使用tomcat等容器进行部署,而Springboot项目也是基于内置的一些容器来运行,如果要将SpringBoot项目运行于Docker或者kubernetes中,就不能仅仅打成war来进行部署,需要进一步将项目实现容器化,之后在运行在这些容器中。

运行环境:

操作系统:ubuntu18.04LTS

软件安装:jdk8+,nodejs,dockerversion18.09.0,docker-composeversion1.23.2

gradle4.10.2, idea

1.后端项目Docker化

本项目在IDEA环境中进行操作,采用gradle来管理项目依赖,首先添加docker插件:build.gradle->buildscript->dependencies添加gradle-docker插件:

classpath”se.transmode.gradle:gradle-docker:1.2″

应用插件:

applyplugin:’application’

applyplugin:’docker’

经过上面的配置之后可在 gradle -> [project] -> Tasks-> docker中看到默认的插件distDocker.

关于此插件的更多使用信息参考:https://github.com/Transmode/gradle-docker

构建自己的task脚本:

SpringBoot项目容器化并部署到kubernetes

以上脚本经过gradle刷新之后需会在tasks里面生成名为buildDockerfile的插件,双击运行次插件可在build/docker/目录下生成dockerfile, 项目的war包,在项目文件下运行 build_image.sh 可以生成docker image, 并且会运行项目

build_image.sh脚本内容:

SpringBoot项目容器化并部署到kubernetes

2.使用docker-compose 运行项目

docker-compose可以简单的编排docker镜像服务,在本项目中我们使用docker-compose创建容器,运行容器。

3. 使用kubernetes 来部署项目

项目的运行都是基于pod来实现,但是pod运行出现一些错误,或者挂掉,不会自动重启服务,所以来办都是用deployment来做,下面编写一个deployment的yml文件来使项目在kubernetes中跑起来。

前置条件:

1)项目容器化

2)镜像已经push到中央仓库

3)已经搭建好kubernetes集群

注意:在kubernetes集群每个node节点,master节点配置私服访问,因为不知道pod会具体存在于哪个节点上面,如果不做此配置,会出现镜像拉取错误。

deployments.yml:

SpringBoot项目容器化并部署到kubernetes

创建deployment:

kubectl create -f <path_to_ samply-app-deployments.yaml>

查看创建pods和deployment:

kubectl get po # 查看pod

kubectl get deploy # 查看deployment

创建一个LoadBalancer类型的service,方便我们从kubernetes外部来访问服务:

services.yml:

SpringBoot项目容器化并部署到kubernetes

创建服务:

kubectl create -f <path_to_ samply-app-services.yaml>

查看服务:

kubectl get svc #查看服务

通过loadBalancer的ip地址和端口号,就可以访问我们部署的服务了。

标签: