
如何在kubernete集群上部署springboot应用
作者 | 朱晋君
来源 | 君哥聊技术(ID:gh_1f109b82d301)
在之前的文章中,我讲了使用kubeadm从0到1搭建kubernete集群,今天我们来聊一下如何在这套k8s集群上部署springboot应用。首先说明一下,我们这次集群的网络使用flannel网络,master节点启动命令如下:
上面的参数 --pod-network-cidr=10.244.0.0/16
就是指明集群使用flannel网络,切记,不然部署springboot后,容器访问外面网络会有问题。
再来看一下这次实验使用的集群环境,如下图,我在个人笔记本上安装了mysql数据库,ip地址是192.168.59.1,同时安装了2个vmware虚拟机,ip地址分别是192.168.59.132和192.168.59.138,kubernete集群就部署在这2个虚机上,192.168.59.132部署着master节点,192.168.59.138部署着worker1节点
这次使用的springboot源码地址:
1.打包springboot镜像
这儿遇到问题可以查看我之前的文章Linux下docker制作springboot应用镜像
编译jar包
编译后上传到虚机,编写DockerFile文件
执行打包镜像命令,这里我打包的版本号是1.2,每次修改代码后都要升级版本号,不然上传dockerhub不会更新
之后下面2个命令登录dockerhub并且上传
2.在kubernete上发布镜像
编写yaml文件,如下:
上面的yaml文件中,我指定了镜像名称是我刚刚打包的镜像:image: zjj2006forever/springboot-mybatis:1.2,副本数量是2(replicas: 2),
这样部署的时候会生成2个pod,如果提供服务的时候如果一个pod挂了,集群会再创建一个新的出来,一直保持有2个pod。
输出下面提示后我们看一下pod状态
deployment.apps/springboot-mybatis-deployment created
再看一下pod启动日志
上面的结果可以看到我刚刚发布的2个springboot的pod启动成功了,我们再看下其中一个pod的状态,执行如下命令
上面的输出看到这个pod被调度到了worker1节点上,同时从上面的Events可以看到pod的启动过程。
3.测试
先让我们看一下我们刚刚部署的2个pod
上面的输出结果中可以看到,这2个pod的ip地址是10.244.1.4和10.244.1.5,这是由flannel网络插件分配的。
接着我们进入容器内部看一下网络连通性
我们分别ping集群的主192.168.59.132,从节点192.168.59.138和mysql数据库地址192.168.59.1,发现都是正常返回数据包的
我们用curl看一下健康检查的地址,返回如下
我们用浏览器输入地址http://10.244.1.4:8083/employee/jinjunzhu,返回505
这时在容器里面查看日志,输出见下面截图
这个原因很明显,mysql没有对这个ip访问授权,执行一下授权命令:
再次访问上面的url,成功,见下图
pod中的日志如下:
