前言 #
這是我在 Github 的 Repo Embedded Hazelcast in Spring Boot Application With Spring Session (Deploy on Kubernetes) 的中文說明。
P.S. 這篇和前一篇文章 Spring Session + Hazelcast | Client/Server 部署 - 單個 Application 部署連通測試 不屬於同一系列的 POC!
正文開始 #
在 Spring Boot 應用程式中,使用 Embedded Hazelcast 對接 Spring Session (部署在 Kubernetes) #
這個 Repo 是基於 Hazelcast 官方指南為基礎的一個 forked repository,我進行了一些改進,讓我們可以更方便觀察 session 的狀況。
這個應用程式將會在 Kubernetes 被以 Deployment 的方式部署起來執行,所以有興趣到當然可以試試看將它 scale out。
我想透過這個 repo 展示哪些概念? #
- 使用 Spring Session Core 和 Hazelcast 執行 Spring Boot 應用程式。
- 驗證 Spring Session 可以有效地管理和控制 session。
- 驗證 session 可以通過 Spring Session 在 Spring Boot 應用程式中轉移/保存到 embedded Hazelcast member。
- 驗證在多個執行中的 Spring Boot 應用程式中,embedded Hazelcast members 可以成為組成 Hazelcast cluster。
- 驗證 Hazelcast cluster 的所有 members 可以同步和共享 session。
- 驗證無論部署的規模如何,應用程式仍然可以正常運作,包括 Hazelcast-Session 機制。
開始之前 #
為了進行測試,需要準備以下工具和環境:
- Java 8 以上
- minikube:
用 Kubernetes 作為 server 的環境,建議至少有 4GB memory - kubectl
- Docker
如何構建 #
Application & Image #
專案打包 #
在專案目錄中,執行以下指令,打包 Spring Boot 應用程式:
mvn package -f pom.xml
Docker 環境設置 #
在開始 build images 之前,必須確保 Docker context 已經切換為 minikube 的 Docker context。
這樣 K8S Cluster 中的 API Server 才不會嘗試從 Dockerhub pull images,而會使用我們已經建立在 minikube Docker context 中的 images。
eval $(minikube docker-env)
在這邊要提醒一下:當 terminal session 遺失(視窗切換,或不小心關掉)時,環境設定也會跟著不見,到時候要再跑一次 eval
指令。
Docker Image Building #
執行下面的指令來 build images:
docker build -t embedded-hazelcast .
在 Kubernetes 上部署 #
創建Deployment #
執行 /deploy/apply/apply-deploy.sh
,運行應用程式的單個 Replica (Pod) 的 Deployment。
Exposing Application #
執行 /expose/deploy-expose.sh
,將我們剛剛建立的 Kubernetes Deployment expose 成 Kubernetes Service。
Port Forwarding #
因為沒有一個 Load Balancer 類型的 Ingress,需要執行 /expose/port-forward.sh
,來將 Service 的 port 轉發到 local(我們的電腦本機)。
如何測試 #
列出 Sessions #
使用瀏覽器開啟 localhost:7777/list
,查看相關狀態。
Published