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 裏面去的全過程。

相關文章
相關標籤/搜索