SpringBoot on Kubernetes

本文将从建立一个 SpringBoot 的应用开始,详细讲述如何将一个 SpringBoot 的应用部署到本地的 Kubernetes 集群上面去。java

建立 SpringBoot 应用

首先,咱们须要建立一个 SpringBoot 的应用,能够到 start.spring.io/ 建立一个,在建立的时候,咱们须要选择一个 Web 的依赖,以方便部署到 Kubernetes 以后能够看到效果。web

建立完成以后,能够修改一下 SpringBoot 应用的 main 函数所在的类,让它成为一个 Controller:spring

@SpringBootApplication
@Controller
public class WebDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebDemoApplication.class, args);
    }

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello, Kubernetes!";
    }
}
复制代码

这样,在本地启动这个 SpringBoot 的应用以后,若是咱们访问 http://localhost:8080/hello 的话,就能够看到 Hello, Kubernetes! 这句话。docker

建立一个 Dockerfile

为了可以将这个 SpringBoot 的应用部署到 Kubernetes 里面去,咱们须要建立一个 Dockerfile,将它打成一个 Docker 镜像:shell

FROM openjdk:8-jdk-alpine
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT [ "java", "-jar", "/app.jar"]
复制代码

上面的 Dockerfile 是一个很是简单的 Dockerfile,只是将 SpringBoot 应用打包后的 uber-jar 拷贝到容器里面去,而后运行这个 jar 包。有了这个 Dockerfile 以后,咱们就能够在本地把 Docker 镜像打包出来了:api

docker build --build-arg JAR_FILE=./target/web-demo-0.0.1-SNAPSHOT.jar . -t springboot-demo
复制代码

而后须要注意的是,这样打出来的镜像是在本地的,没有办法被 minikube 找到,因此,要么将这个镜像放到一个中央的镜像仓库上,要么咱们使用 minikube 的 docker daemon 来打镜像,这样 minikube 就能够找到这个镜像。springboot

因此,你首先须要在本地将 minikube 安装上去,具体能够看官方的安装教程。安装完成以后,先运行:bash

minikube start
复制代码

来将 minikube 启动起来,而后能够运行app

eval $(minikube docker-env)
复制代码

将 docker daemon 切换成 minikube 的。最后,咱们再用上面的 docker build 来进行打包,minikube 就能够看到了。curl

将应用部署到 minikube 中去

Docker 镜像都准备好了,如今咱们能够将应用部署到 minikube 中去了,首先咱们须要建立一个 deployment 对象,这个能够用 yml 文件来描述:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
 name: springboot-demo-deployment
 labels:
 app: springboot-demo
spec:
 replicas: 3
 selector:
 matchLabels:
 app: springboot-demo
 template:
 metadata:
 labels:
 app: springboot-demo
 spec:  
 containers:
 - name: springboot-demo
 image: springboot-demo
 imagePullPolicy: IfNotPresent
 ports:
 - containerPort: 8080
复制代码

上面的 yaml 文件没有什么特别的地方,除了 imagePullPolicy 须要指定成 IfNotPresent,这样 minikube 才会从本地去找镜像。

有了上面的 yaml 文件以后,咱们就能够运行 kubectl apply -f springboot-demo.yml 来让 minikube 将咱们的 SpringBoot 的应用的集群给建立出来。

访问 minikube 中的 SpringBoot 集群

如今咱们已经将 SpringBoot 应用部署到了 minikube 中去,那么怎么访问这个集群呢,首先咱们须要将端口暴露出来:

kubectl expose deployment springboot-demo-deployment --type=NodePort
复制代码

而后运行:

minikube service springboot-demo-deployment --url
复制代码

获得访问的 URL。再在获得的 URL 后面加上 /hello,就能够看到 Hello, Kubernetes! 了。

或者,咱们能够直接运行 curl $(minikube service springboot-demo-deployment --url)/hello 来访问。

以上就是如何将一个 SpringBoot 的应用部署到 Kubernetes 里面去的全过程。

相关文章
相关标签/搜索