部署一个Spring Boot 应用到 minikube 中

本文简单的演示如何发布一个 springboot 的应用到 minikube 中。

制作并发布镜像

通常,将一个 SpringBoot 的应用发布到 minikube 或 k8s 集群中的前提是将其只作为 Docker 镜像。 关于如何制作 SpringBoot 应用的 Docker 镜像,可以参考:在 Docker 上部署 Spring Boot 开发的应用

制作完成后,将制作好的镜像部分到 docker hub 或是私有镜像库中。

在本文后面的部分将直接使用一个已经发布到 docker hub 中的应用: jini/springboot-k8s-basic, 该应用是一个使用 Spring Boot 实现的简单为 WEB 应用,当客户访问时,简单的返回服务端的 ip 地址。

在 minikube 中部署应用

对于简单的情况,可以使用命令行直接建立一个”部署 deployment” 来在 minikube 中部署应用,执行下面的命令:

1
kubectl create deployment springboot-k8s-basic --image=jini/springboot-k8s-basic:latest

系统显示:

1
deployment.apps/springboot-k8s-basic created

该命令会使用默认设置构建一个 pod, 并从 docker hub 中下载镜像进行部署。 依赖于网络的快慢,过一会儿可以执行:

1
kubectl get pods

来查看 minikube 中 POD 的情况, 可以看到类似下面的结果:

1
2
NAME                                    READY   STATUS    RESTARTS   AGE
springboot-k8s-basic-6786f5cd68-6w5s5 1/1 Running 0 20h

如果状态(STATUS) 是 Running, 说明部署成功。

在 minikube 内部访问应用

在完成上面的步骤以后,就可以在 minikube 内部访问刚才部署的服务了。

首先执行以下命令,找到 POD 的 IP 地址:

1
kubectl get pods -o wide

系统返回:

1
2
NAME                                    READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
springboot-k8s-basic-6786f5cd68-6w5s5 1/1 Running 0 20h 172.17.0.6 minikube <none> <none>

可以看到,应用的 POD 被分配了 172.17.0.6 这样一个 ip 地址。 现在,执行:

1
minikube ssh

登录到 minikube 内部, 系统显示:

1
2
3
4
5
6
                         _             _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

接着,我们访问刚才部署的服务,执行:

1
curl http://172.17.0.6:8080

可以看到,返回如下结果:

1
My IP is: 172.17.0.6

使用 NodePort 暴露应用

在上面的操作中,我们已经可以从 minikube 内部访问应用了,但现实中,我们一定还需要从外部也可以访问该应用,在 minikube 中,有多种技术可以实现这个目标,这里先介绍使用 NodePort。

执行:

1
kubectl expose deployment springboot-k8s-basic --type=NodePort --port=8080

系统显示:

1
service/springboot-k8s-basic exposed

再执行:

1
kubectl get svc

系统显示:

1
2
kubernetes             ClusterIP   10.96.0.1      <none>        443/TCP          19d
springboot-k8s-basic NodePort 10.98.59.165 <none> 8080:30891/TCP 95s

可以看到,我们建立了一个新的服务,这个服务将内部部署(应用) springboot-k8s-basic 的 8080 端口,映射到本机的 30891 端口。

现在,再执行:

1
minikube service springboot-k8s-basic --url

这个命令将返回能够访问 minikube 中部署的应用 URL 地址,在我的环境中,将返回:

1
http://192.168.1.54:30891

打开浏览器,输入这个 url , 就可以看到反馈:

1
My IP is: 172.17.0.6

本文标题:部署一个Spring Boot 应用到 minikube 中

文章作者:梅老师

发布时间:2020年03月18日 - 22:03

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/microservice/k8s/minikube-deploy-springboot-app/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。