SpringBoot on Kubernetes

本文將從創(chuàng)建一個 SpringBoot 的應(yīng)用開始,詳細講述如何將一個 SpringBoot 的應(yīng)用部署到本地的 Kubernetes 集群上面去。

創(chuàng)建 SpringBoot 應(yīng)用

首先,我們需要創(chuàng)建一個 SpringBoot 的應(yīng)用,可以到 http://start.spring.io/ 創(chuàng)建一個,在創(chuàng)建的時候,我們需要選擇一個 Web 的依賴,以方便部署到 Kubernetes 之后可以看到效果。

創(chuàng)建完成之后,可以修改一下 SpringBoot 應(yīng)用的 main 函數(shù)所在的類,讓它成為一個 Controller:

@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 的應(yīng)用之后,如果我們訪問 http://localhost:8080/hello 的話,就可以看到 Hello, Kubernetes! 這句話。

創(chuàng)建一個 Dockerfile

為了能夠?qū)⑦@個 SpringBoot 的應(yīng)用部署到 Kubernetes 里面去,我們需要創(chuàng)建一個 Dockerfile,將它打成一個 Docker 鏡像:

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

上面的 Dockerfile 是一個非常簡單的 Dockerfile,只是將 SpringBoot 應(yīng)用打包后的 uber-jar 拷貝到容器里面去,然后運行這個 jar 包。有了這個 Dockerfile 之后,我們就可以在本地把 Docker 鏡像打包出來了:

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

然后需要注意的是,這樣打出來的鏡像是在本地的,沒有辦法被 minikube 找到,所以,要么將這個鏡像放到一個中央的鏡像倉庫上,要么我們使用 minikube 的 docker daemon 來打鏡像,這樣 minikube 就可以找到這個鏡像。

所以,你首先需要在本地將 minikube 安裝上去,具體可以看官方的安裝教程。安裝完成之后,先運行:

minikube start

來將 minikube 啟動起來,然后可以運行

eval $(minikube docker-env)

將 docker daemon 切換成 minikube 的。最后,我們再用上面的 docker build 來進行打包,minikube 就可以看到了。

將應(yīng)用部署到 minikube 中去

Docker 鏡像都準備好了,現(xiàn)在我們可以將應(yīng)用部署到 minikube 中去了,首先我們需要創(chuàng)建一個 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 的應(yīng)用的集群給創(chuàng)建出來。

訪問 minikube 中的 SpringBoot 集群

現(xiàn)在我們已經(jīng)將 SpringBoot 應(yīng)用部署到了 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 的應(yīng)用部署到 Kubernetes 里面去的全過程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容