Kubernetes與Spring Boot簡單HelloWorld教程 - Maroun
讓我們構建最簡單的Java Spring Boot應用程式,將其包裝在Docker容器中,然後在K8s pod中使用該容器,該容器由K8s部署進行編排並透過服務公開。服務由兩個pod和一個簡單的負載平衡器提供支援,可以根據應用程式的需求輕鬆擴充套件。
專案結構:
├── Dockerfile ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── k8s │ └── depl.yaml ├── settings.gradle └── src └── main └── java └── hello ├── App.java └── HelloWorldCtrl.java |
App.java是應用入口:
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } |
上面的程式碼包含建立Spring Boot應用程式所需的最少程式碼。
下面HelloWorldCtrl.java包含一個簡單的控制器,其對映的根路徑(“/”),並返回問候語的字串:
package hello; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; @RestController public class HelloWorldCtrl { @RequestMapping("/") public String index() { return "Greetings from Spring Boot!"; } } |
構建應用程式
我正在使用Gradle作為構建工具。該build.gradle檔案也是最小檔案,由以下幾行組成:
plugins { id 'org.springframework.boot' version '2.3.3.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id 'java' } group = 'com.test' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' } |
建立K8s資源
為了建立K8s部署,我們需要一個Docker映像/映象。讓我們在我們的程式碼中新增以下幾行Dockerfile:
FROM gradle:jdk10 COPY --chown=gradle:gradle . /app WORKDIR /app RUN gradle build EXPOSE 8080 WORKDIR /app CMD java -jar build/libs/gs-spring-boot-0.1.0.jar |
Docker檔案中的步驟:
- 將專案複製到 /app
- 使用Gradle構建專案
- 使用上一步的結果執行應用程式
現在,我們可以構建映像並推送到中心:
docker build -t marounbassam/hello-spring . docker push marounbassam/hello-spring |
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: hello-world spec: replicas: 2 template: metadata: labels: app: hello-world visualize: "true" spec: containers: - name: hello-world-pod image: marounbassam/hello-spring ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: labels: visualize: "true" name: hello-world-service spec: selector: app: hello-world ports: - name: http protocol: TCP port: 8080 targetPort: 8080 type: ClusterIP |
部署Deployment部分定義了Pod的兩個副本,這些副本將執行根據image屬性中指定的映像構建的容器。
服務Service部分是型別的ClusterIP(預設的Kubernetes服務)。它為我們提供了群集中其他應用程式可以訪問的服務。
在叢集中建立資源:
kubectl create -f <yaml_file> |
+---------------------+ | hello-world-service | | | | 10.15.242.210 | +---------O-----------+ | +-------------O--------------------------O | | +---------O-----------+ +---------O-----------+ | pod 1 | | pod 2 | | | | | | hello-world | | hello-world | +---------------------+ +---------------------+ |
安裝叢集
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-world-5bb87c95-6h4kh 1/1 Running 0 7h hello-world-5bb87c95-bz64v 1/1 Running 0 7h $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world-service ClusterIP 10.15.242.210 <none> 8080/TCP 5s kubernetes ClusterIP 10.15.240.1 <none> 443/TCP 7h $ kubectl exec -it hello-world-5bb87c95-6h4kh bash $ (inside the pod) curl 10.15.242.210:8080 $ (inside the pod) Greetings from Spring Boot! |
我們可以看到伺服器已啟動並且正在pod內執行。根據您的雲提供商,您可以設定服務型別LoadBalancer並從叢集外部訪問應用程式。
相關文章
- spring boot 一 HelloWorldSpring Boot
- Spring Boot+Spring Security+Thymeleaf 簡單教程Spring Boot
- RabbitMQ(三):RabbitMQ與Spring Boot簡單整合MQSpring Boot
- Spring Boot實戰:逐行釋義HelloWorldSpring Boot
- Spring Boot 簡單整合 LiquibaseSpring BootUI
- Spring Boot與Kafka + kafdrop結合使用的簡單示例Spring BootKafka
- Spring Boot系列十六 WebSocket簡介和spring boot整合簡單訊息代理Spring BootWeb
- Spring Boot 之路(一):一個簡單的Spring Boot應用Spring Boot
- Spring Boot基礎:Spring Boot簡介與快速搭建(1)Spring Boot
- 【web】myeclipse+spring boot+maven之helloworldWebEclipseSpring BootMaven
- Spring Boot:簡單使用EhCache快取框架Spring Boot快取框架
- 一個簡單的spring-boot例子Springboot
- Spring Boot—— Thymeleaf (gradle) 的簡單使用Spring BootGradle
- Shiro+JWT+Spring Boot Restful簡易教程JWTSpring BootREST
- Spring Boot 教程 - ElasticsearchSpring BootElasticsearch
- 編寫最簡單的核心:HelloWorld
- [原創]Spring教程01--Spring開始篇_HelloworldSpring
- 玩轉spring boot——簡單登入認證Spring Boot
- Spring Boot 整合 Activiti 工作流引擎 極簡教程Spring Boot
- Spring Boot2 系列教程(三)理解 Spring BootSpring Boot
- Spring Boot Security配置教程Spring Boot
- Spring Boot-Redis教程Spring BootRedis
- Spring Boot 最簡單整合 Shiro+JWT 方式Spring BootJWT
- Spring Boot實際專案用簡單的AOPSpring Boot
- Spring Boot + DD小程式 超級簡單的webscoketSpring BootWeb
- 簡單地聊一聊Spring Boot的構架Spring Boot
- Spring Boot 中使用Caffeine快取的簡單例子Spring Boot快取單例
- 玩轉spring boot——AOP與表單驗證Spring Boot
- Spring Boot的Clean架構教程與原始碼 - BaeldungSpring Boot架構原始碼
- 史上最簡單的 Spring MVC 教程(一)SpringMVC
- Spring Cloud 簡單教程 持續更新中SpringCloud
- Spring Boot應用在kubernetes的sidecar設計與實戰Spring BootIDE
- Spring Boot 教程 - MyBatis-PlusSpring BootMyBatis
- 使用Spring Boot和Elasticsearch教程Spring BootElasticsearch
- Spring Boot 2.0.1 入門教程Spring Boot
- 簡單瞭解Ruby與自學教程
- Kubernetes中部署Spring Boot專案(七)Spring Boot
- 在 Kubernetes 上使用Spring Boot+ActiveMQSpring BootMQ