本文將從創(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 里面去的全過程。