將 Spring Boot 應用程式部署至 Azure Kubernetes Service
注意
針對 Spring Boot 應用程式,我們建議使用 Azure Container Apps。 不過,您仍然可以選擇使用 Azure Kubernetes Service 作為目的地。 如需詳細資訊,請參閱 為 Java 應用程式選擇正確的 Azure 服務。
本教學課程將逐步指導您如何結合 Kubernetes 和 Docker,來開發及將 Spring Boot 應用程式部署至 Microsoft Azure。 更具體來說,您會使用 Spring Boot 進行應用程式開發、Kubernetes 進行容器部署,以及 Azure Kubernetes Service (AKS) 來裝載您的應用程式。
Kubernetes 和 Docker 是開放原始碼解決方案,可協助開發人員自動化其容器中執行之應用程式的部署、調整和管理。
先決條件
- Azure 訂用帳戶;如果您還沒有 Azure 訂用帳戶,則可以 啟用
MSDN 訂閱者權益,或註冊 免費 Azure 帳戶 。 - Azure Command-Line 指令介面(CLI)。
- 支援的 Java 開發工具套件 (JDK)。 如需在 Azure 上開發時可用的 JDK 詳細資訊,請參閱 Azure 上的 Java 支援和 Azure Stack。
- Apache 的 Maven 建置工具 (第 3 版)。
- Git 用戶端。
- Docker 客戶端。
- ACR Docker 認證協助程式。
注意
由於本教學課程的虛擬化需求,您無法遵循虛擬機上本文中的步驟;您必須使用已啟用虛擬化功能的實體電腦。
在 Docker 使用者入門 Web 應用程式上建立 Spring Boot
下列步驟會逐步引導您建置 Spring Boot Web 應用程式,並在本機進行測試。
開啟命令列介面,並建立本機目錄來保存您的應用程式,並切換至該目錄;例如:
mkdir C:\SpringBoot cd C:\SpringBoot
--或--
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBoot
將 Docker 快速入門上的 Spring Boot 範例項目複製到 目錄中。
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
將目錄變更為已完成的專案。
cd gs-spring-boot-docker cd complete
使用 Maven 建置並執行範例應用程式。
mvn package spring-boot:run
瀏覽至
http://localhost:8080
,或使用下列curl
命令測試 Web 應用程式:curl http://localhost:8080
您應該會看到下列訊息顯示:Hello Docker World
使用 Azure CLI 建立 Azure Container Registry
開啟命令提示字元。
登入您的 Azure 帳戶:
az login
選擇您的 Azure 訂用帳戶:
az account set -s <YourSubscriptionID>
為本教學課程中使用的 Azure 資源建立資源群組。
az group create --name=wingtiptoys-kubernetes --location=eastus
在資源群組中建立私人 Azure 容器登錄。 本教學課程會在後續步驟中將範例應用程式作為 Docker 映像檔推送至此登錄。 以登錄的唯一名稱取代
wingtiptoysregistry
。az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
透過 Jib 將您的應用程式推送至容器登錄
從 Azure CLI 登入您的 Azure Container Registry。
# set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login" az config set defaults.acr=wingtiptoysregistry az acr login
使用文字編輯器開啟 pom.xml 檔案;例如,Visual Studio Code。
code pom.xml
使用 Azure Container Registry 的登錄名稱,以及最新版的 jib-maven-plugin更新
pom.xml 檔案中的集合。 <properties> <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. --> <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix> <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version> <java.version>1.8</java.version> </properties>
更新
<plugins>
檔案中的 集合,讓<plugin>
元素包含jib-maven-plugin
的條目,如下列範例所示。 請注意,我們使用來自 Microsoft Container Registry (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntu
的基本映射,其中包含正式支援的 Azure JDK。 如需具有官方支援的 JDK 的其他 MCR 基底映像,請參閱 安裝 Microsoft OpenJDK 構建版本。。<plugin> <artifactId>jib-maven-plugin</artifactId> <groupId>com.google.cloud.tools</groupId> <version>${jib-maven-plugin.version}</version> <configuration> <from> <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image> </from> <to> <image>${docker.image.prefix}/gs-spring-boot-docker</image> </to> </configuration> </plugin>
瀏覽至 Spring Boot 應用程式已完成的項目目錄,然後執行下列命令來建置映像,並將映像推送至登錄:
az acr login && mvn compile jib:build
注意
由於 Azure Cli 和 Azure Container Registry 的安全性考慮,az acr login
所建立的認證有效期為 1 小時。 如果您看到 401 Unauthorized
錯誤,您可以再次執行 az acr login --name <your registry name>
命令以重新驗證。 如果您看到 Read timed out
錯誤,您可以嘗試使用 mvn -Djib.httpTimeout=7200000 jib:dockerBuild
來延長逾時時間,或使用 -Djib.httpTimeout=0
設置為無限逾時。
使用 Azure CLI 在 AKS 上建立 Kubernetes 叢集
在 Azure Kubernetes Service 中建立 Kubernetes 叢集。 下列命令會在
wingtiptoys-kubernetes
資源群組中建立 Kubernetes 叢集,使用wingtiptoys-akscluster
作為叢集名稱,並附加 Azure 容器註冊中心(ACR)wingtiptoysregistry
,且使用 DNS 前綴wingtiptoys-kubernetes
。az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
此命令可能需要一段時間才能完成。
使用 Azure CLI 安裝
kubectl
。 Linux 使用者可能需要在此命令前面加上sudo
,因為它會將 Kubernetes CLI 部署至/usr/local/bin
。az aks install-cli
下載叢集配置資訊,以便您可以通過 Kubernetes 網頁介面和
kubectl
管理叢集。az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
將映像部署至 Kubernetes 叢集
本教學課程會使用 kubectl
來部署應用程式,然後可讓您透過 Kubernetes Web 介面探索部署。
使用 kubectl 部署
開啟命令提示字元。
使用
kubectl run
命令,在 Kubernetes 叢集中執行您的容器。 在 Kubernetes 中為您的應用程式命名服務名稱及完整的圖像名稱。 例如:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
在此命令中:
容器名稱
gs-spring-boot-docker
會緊接在run
命令後面指定--image
參數會將合併的登入伺服器和映像名稱指定為wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
使用
kubectl expose
命令,在外部公開 Kubernetes 叢集。 指定您的服務名稱、用來存取應用程式的公開 TCP 連接埠,以及應用程式接聽的內部目標埠。 例如:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
在此命令中:
容器名稱
gs-spring-boot-docker
會在expose pod
命令之後立即指定。--type
參數會指定叢集使用負載平衡器。--port
參數會指定 80 的公用 TCP 連接埠。 您可以在此埠上存取應用程式。--target-port
參數會指定 8080 的內部 TCP 連接埠。 負載平衡器會將要求轉送至此埠上的應用程式。
將應用程式部署至叢集之後,請查詢外部IP位址,並在網頁瀏覽器開啟它:
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
上瀏覽範例應用程式
使用 Kubernetes 資源檢視進行部署
從任何資源檢視中選取 [新增](命名空間、工作負載、服務和輸入、儲存裝置或組態)。
將下列 YAML 貼入:
apiVersion: apps/v1 kind: Deployment metadata: name: gs-spring-boot-docker spec: replicas: 1 selector: matchLabels: app: gs-spring-boot-docker template: metadata: labels: app: gs-spring-boot-docker spec: containers: - name: gs-spring-boot-docker image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
選取 ,然後在 YAML 編輯器底部選擇 [新增],以部署應用程式。
部署
Deployment
之後,按照上述方法,選擇 YAML 編輯器底部的 新增,使用下列 YAML 進行Service
的部署:apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-docker
新增 YAML 檔案之後,資源檢視器會顯示您的 Spring Boot 應用程式。 外部服務包含連結的外部IP位址,讓您可以輕鬆地在瀏覽器中檢視應用程式。
選取 [外部IP]。 接著,您會看到在 Azure 上執行的 Spring Boot 應用程式。
上瀏覽範例應用程式
後續步驟
若要深入瞭解 Spring 和 Azure,請繼續前往 Azure 上的 Spring 檔中心。
另請參閱
如需在 Azure 上使用 Spring Boot 的詳細資訊,請參閱下列文章:
如需搭配 Java 使用 Azure 的詳細資訊,請參閱 適用於 Java 開發人員的 Azure,以及 使用 Azure DevOps 和 Java。
如需使用 Visual Studio Code 將 Java 應用程式部署至 Kubernetes 的詳細資訊,請參閱 Visual Studio Code Java 教學課程。
如需 Docker 上 Spring Boot 範例項目的詳細資訊,請參閱 Docker 快速入門上的 Spring Boot。
下列連結提供建立 Spring Boot 應用程式的其他資訊:
- 如需建立簡單 Spring Boot 應用程式的詳細資訊,請參閱 https://start.spring.io/的 Spring Initializr。
下列連結提供搭配 Azure 使用 Kubernetes 的其他資訊:
如需使用 Kubernetes 命令行介面的詳細資訊,請參閱 https://kubernetes.io/docs/reference/kubectl/ 使用者指南。
Kubernetes 網站有數篇文章,討論如何在私人鏡像庫中使用鏡像:
若要取得更多關於如何在 Azure 中使用自訂 Docker 映像檔的範例,請參閱 在 Linux 上的 Azure Web 應用程式中使用自訂 Docker 映像檔。
如需有關使用 Azure Dev Spaces 在 Azure Kubernetes Service (AKS) 中進行容器的反覆執行和偵錯的詳細資訊,請參閱 開始使用 Java 的 Azure Dev Spaces 指南