# Spring Boot Kubernetes
本指南將引導您完成在 上部署Spring Boot應用程序的 [Kubernetes 過程](https://kubernetes.io) 。 您可以選擇多種方式來使用Spring Boot和Kubernetes進行操作。 本指南的目的是使您盡快上手,而不是討論所有替代方法或進入生產方式的所有詳細信息。
有一些交互式教程可以補充和擴展 上本指南的內容 Katacoda / springguides 。 如果您遵循這些教程,則所有代碼都將在瀏覽器中的云中運行。 或者,您可以創建自己的集群,在本地安裝所需的所有工具,然后從指南中進行復制粘貼。Kubernetes上的Spring Boot入門 :與本指南相同的材料,但是在您的瀏覽器中運行。安裝Kubernetes 安裝Kubernetes :有關使用 在本地 的指南 Kind 。 如果您希望在筆記本電腦上運行教程,可以使用它在筆記本電腦上進行設置。Spring Boot的Kubernetes探針 Spring Boot的 : 活躍性和就緒性探針指南。
## 你會建立什么
[Kubernetes](https://kubernetes.io) 是一個開源系統,用于自動化容器化應用程序的部署,擴展和管理。 它將組成應用程序的容器分組為邏輯單元,以便于管理和發現。 在本指南中,我們構建并部署了一個簡單的Spring引導應用程序。
您還可以 找到《 入門指南》 和《 主題指南 在Docker上 》,其中涵蓋了構建容器映像的一些背景知識。
## 您將需要什么
您將需要Linux或類似Linux的命令行。 本指南中的命令行示例適用于Linux,帶外殼的MacOS終端或 [WSL](https://docs.microsoft.com/en-us/windows/wsl) Windows上的 。
您還需要一個Kubernetes集群和命令行工具 [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) 。 您可以使用 本地創建集群 [Kind](https://github.com/kubernetes-sigs/kind) (在Docker上)或 在 [Minikube](https://github.com/kubernetes/minikube) 。 或者,您可以使用云提供商,例如 [Google Cloud Platform](https://console.cloud.google.com/kubernetes/) , [Amazon Web Services](https://aws.amazon.com/eks/) 或 [Microsoft Azure](https://azure.microsoft.com/en-gb/services/kubernetes-service/) 。 在繼續進行之前,請確認您可以運行 `kubectl`從外殼命令。 以下示例使用 `kind`:
~~~
$ kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:46253
KubeDNS is running at https://127.0.0.1:46253/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
~~~
您還應該運行以下命令:
~~~
$ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 7m13s
~~~
## 創建一個Spring Boot應用程序
首先,我們創建一個Spring Boot應用程序。 如果您希望在github中使用它,則可以在終端中將其克隆( `git` 和 `java`已安裝)。 另外,您可以使用start.spring.io從頭開始創建應用程序:
~~~
curl https://start.spring.io/starter.tgz -d dependencies=webflux,actuator | tar -xzvf -
~~~
然后,您可以構建該應用程序:
~~~
./mvnw install
~~~
第一次將花費幾分鐘,但是,一旦所有依賴項都被緩存,它將很快。
然后,您可以看到構建的結果。 如果構建成功,則應該看到類似于以下內容的JAR文件:
~~~
ls -l target/*.jar
-rw-r--r-- 1 root root 19463334 Nov 15 11:54 target/demo-0.0.1-SNAPSHOT.jar
~~~
JAR是可執行的:
~~~
$ java -jar target/*.jar
~~~
該應用程序具有一些內置的HTTP端點,因為 `actuator`下載項目時添加的依賴項。 您應該在啟動日志中看到類似于以下內容的輸出:
~~~
...
2019-11-15 12:12:35.333 INFO 13912 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
2019-11-15 12:12:36.448 INFO 13912 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8080
...
~~~
然后,您可以在另一個終端中卷曲端點:
~~~
$ curl localhost:8080/actuator | jq .
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
}
}
}
~~~
要完成此步驟,請按Ctrl + C組合鍵以停止應用程序。
## 容器化應用程序
有多個選項可用于容器化Spring Boot應用程序。 只要您已經在構建Spring Boot jar文件,您只需要直接調用插件即可。 以下命令使用 [Maven](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/maven-plugin/html/#build-image) :
~~~
$ ./mvnw spring-boot:build-image
~~~
以下命令使用 [Gradle](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/gradle-plugin/reference/html/#build-image) :
~~~
$ ./gradlew bootBuildImage
~~~
您可以在本地運行容器:
~~~
$ docker run -p 8080:8080 demo:0.0.1-SNAPSHOT
~~~
然后,您可以檢查它是否可以在另一個終端上運行:
~~~
$ curl localhost:8080/actuator/health
~~~
通過停止容器完成操作。
除非您通過Dockerhub進行身份驗證,否則無法推送映像( `docker login`),但已經有一個圖片可以正常工作了。 如果您已通過身份驗證,則可以:
~~~
$ docker tag demo:0.0.1-SNAPSHOT springguides/demo
$ docker push springguides/demo
~~~
在現實生活中,需要將映像推送到Dockerhub(或其他可訪問的存儲庫),因為Kubernetes從其Kubelet(節點)內部拉取映像,而Kubelet(節點)通常不連接到本地docker守護程序。 就此方案而言,您可以省略推送并使用已經存在的映像。
對于測試,有一些變通方法可以使 docker push 使用不安全的本地注冊表(例如),但這超出了本指南的范圍。
## 將應用程序部署到Kubernetes
現在您有了一個運行并公開端口8080的容器,因此,要使Kubernetes運行,您所需要的只是一些YAML。 為了避免查看或編輯YAML,現在,您可以詢問 `kubectl`為您生成它。 唯一可能有所不同的是 `--image`姓名。 如果將容器部署到自己的存儲庫,請使用其標記而不是以下標記:
~~~
$ kubectl create deployment demo --image=springguides/demo --dry-run -o=yaml > deployment.yaml
$ echo --- >> deployment.yaml
$ kubectl create service clusterip demo --tcp=8080:8080 --dry-run -o=yaml >> deployment.yaml
~~~
您可以采用上面生成的YAML并根據需要對其進行編輯,也可以按原樣應用:
~~~
$ kubectl apply -f deployment.yaml
deployment.apps/demo created
service/demo created
~~~
檢查應用程序是否正在運行:
~~~
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/demo-658b7f4997-qfw9l 1/1 Running 0 146m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 2d18h
service/demo ClusterIP 10.43.138.213 <none> 8080/TCP 21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/demo 1/1 1 1 21h
NAME DESIRED CURRENT READY AGE
replicaset.apps/demo-658b7f4997 1 1 1 21h
d
~~~
重復 kubectl get all 直到演示窗格將其狀態顯示為 Running.
現在,您需要能夠連接到在Kubernetes中作為服務公開的應用程序。 一種在開發時有效的方法是創建SSH隧道:
~~~
$ kubectl port-forward svc/demo 8080:8080
~~~
然后,您可以驗證該應用程序是否在另一個終端上運行:
~~~
$ curl localhost:8080/actuator/health
{"status":"UP"}
~~~
- springboot概述
- springboot構建restful服務
- spring構建一個RESTful Web服務
- spring定時任務
- 消費RESTful Web服務
- gradle構建項目
- maven構建項目
- springboot使用jdbc
- springboot應用上傳文件
- 使用LDNA驗證用戶
- 使用 spring data redis
- 使用 spring RabbitTemplate消息隊列
- 用no4j訪問nosql數據庫
- springboot驗證web表單
- Spring Boot Actuator構j建服務
- 使用jms傳遞消息
- springboot創建批處理服務
- spring security保護web 安全
- 在Pivotal GemFire中訪問數據
- 使用Spring Integration
- 使用springboot jpa進行數據庫操作
- 數據庫事務操作
- 操作mongodb
- springmvc+tymleaf創建web應用
- 將Spring Boot JAR應用程序轉換為WAR
- 創建異步服務
- spring提交表單
- 使用WebSocket構建交互式Web應用程序
- 使用REST訪問Neo4j數據
- jquery消費restful
- springboot跨域請求
- 消費SOAP Web服務
- springboot使用緩存
- 使用Vaadin創建CRUD UI
- 使用REST訪問JPA數據
- 使用REST訪問Pivotal GemFire中的數據
- 構建soap服務
- 使用rest訪問mongodb數據
- 構建springboot應用docker鏡像
- 從STS部署到Cloud Foundry
- springboot測試web應用
- springboot訪問mysql
- springboot編寫自定義模塊并使用
- 使用Google Cloud Pub / Sub進行消息傳遞
- 構建反應式RESTful Web服務
- 使用Redis主動訪問數據
- Spring Boot 部署到Kubernetes
- 使用反應式協議R2DBC訪問數據
- Spring Security架構
- spring構建Docker鏡像詳解
- Spring Boot和OAuth2
- springboot應用部署到k8s
- spring構建rest服務詳解