1. 概述
在本教程中,我們將演示如何從“使用 Spring Boot 啓動一個簡單應用程序”教程中部署應用程序到 Openshift。
在其中,我們將:
- 安裝和配置 Openshift 開發工具。
- 創建 Openshift 項目和 MySQL 部署。
- 配置應用程序以針對 Spring Cloud Kubernetes 進行配置。
- 使用 Fabric8 Maven 插件 創建和部署應用程序到容器中,並測試和擴展應用程序。
2. Openshift 配置
首先,我們需要安裝 Minishift,本地單節點 Openshift 集羣,以及 Openshift 客户端。
在使用 Minishift 之前,我們需要為開發者用户配置權限:
minishift addons install --defaults
minishift addons enable admin-user
minishift start
oc adm policy --as system:admin add-cluster-role-to-user cluster-admin developer現在,我們想使用 Openshift 控制枱創建 MySQL 服務。我們可以使用以下 URL 啓動瀏覽器:
minishift console如果您尚未自動登錄,請使用 developer/developer。
創建一個名為 baeldung-demo 的項目,然後從“目錄”創建 MySQL 數據庫服務。 提供 baeldung-db 作為數據庫服務,baeldung_db 作為 MySQL 數據庫名稱,並將其他值留為默認值。
現在我們擁有用於訪問數據庫的服務和密鑰。 請注意數據庫連接 URL:mysql://baeldung-db:3306/baeldung_db
我們還需要允許應用程序讀取配置,例如 Kubernetes Secrets 和 ConfigMaps:
oc create rolebinding default-view --clusterrole=view \
--serviceaccount=baeldung-demo:default --namespace=baeldung-demo3. Spring Cloud Kubernetes 依賴項
我們將使用 Spring Cloud Kubernetes 項目,以啓用 Kubernetes 的雲原生 API,這些 API 支撐了 Openshift:
<profile>
<id>openshift</id>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-dependencies</artifactId>
<version>0.3.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</profile>我們將使用 Fabric8 Maven 插件 來構建和部署容器:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<version>3.5.37</version>
<executions>
<execution>
<id>fmp</id>
<goals>
<goal>resource</goal>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
4. 應用配置
現在我們需要提供配置,以確保正確的 Spring 配置文件和 Kubernetes 密鑰作為環境變量注入
讓我們在 src/main/fabric8 中創建一個 YAML 片段,以便 Fabric8 Maven 插件在創建部署配置時使用它
我們還需要添加一個 Spring Boot Actuator 部分,因為 Fabric8 的默認配置仍然嘗試訪問 /health 而不是 /actuator/health
spec:
template:
spec:
containers:
- env:
- name: SPRING_PROFILES_ACTIVE
value: mysql
- name: SPRING_DATASOURCE_USER
valueFrom:
secretKeyRef:
name: baeldung-db
key: database-user
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: baeldung-db
key: database-password
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 180
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 30接下來,我們將保存一個 ConfigMap 在 openshift/configmap.yml 中,其中包含應用程序的 application.properties 的數據,以及 MySQL URL:
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-bootstrap
data:
application.properties: |-
spring.datasource.url=jdbc:mysql://baeldung-db:3306/baeldung_db在通過命令行客户端與Openshift交互之前,我們需要先登錄。在Web控制枱右上角,有一個用户圖標,從中我們可以選擇“複製登錄命令”的下拉菜單。然後,在shell中使用:
oc login https://192.168.42.122:8443 --token=<some-token>讓我們確保我們正在使用正確的項目:
oc project baeldung-demo然後,我們上傳 ConfigMap:
oc create -f openshift/configmap.yml5. 部署
在部署過程中,Fabric8 Maven插件會嘗試確定配置的端口。我們示例應用程序中的現有 application.properties 文件使用表達式定義端口,該插件無法解析。因此,我們需要註釋該行:
#server.port=${port:8080}從當前的 application.properties 中獲取。
我們現在已準備好部署:
mvn clean fabric8:deploy -P openshift
我們可以在部署進度到我們看到應用程序運行時進行觀察:
oc get pods -w應提供一個列表:
NAME READY STATUS RESTARTS AGE
baeldung-db-1-9m2cr 1/1 Running 1 1h
spring-boot-bootstrap-1-x6wj5 1/1 Running 0 46s
在測試應用程序之前,我們需要確定路由:
oc get routes將打印當前項目的路線:
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
spring-boot-bootstrap spring-boot-bootstrap-baeldung-demo.192.168.42.122.nip.io spring-boot-bootstrap 8080 None
現在,讓我們通過添加一本書來驗證我們的應用程序是否正常工作:
http POST http://spring-boot-bootstrap-baeldung-demo.192.168.42.122.nip.io/api/books \
title="The Player of Games" author="Iain M. Banks"
預期輸出如下:
HTTP/1.1 201
{
"author": "Iain M. Banks",
"id": 1,
"title": "The Player of Games"
}6. 擴展應用程序
讓我們擴展部署以運行 2 個實例:
oc scale --replicas=2 dc spring-boot-bootstrap我們可以使用之前相同的步驟來監控部署過程,獲取路由信息,並測試端點。
OpenShift 提供廣泛的選項,用於管理和擴展性能,這些選項超出了本文檔的範圍:https://docs.openshift.com/container-platform/3.11/scaling_performance/index.html
7. 結論
在本教程中,我們:
- 安裝並配置了 Openshift 開發工具和本地環境
- 部署了一個 MySQL 服務
- 創建了一個 ConfigMap 和 Deployment 配置,以提供數據庫連接屬性
- 構建並部署了一個用於我們配置的 Spring Boot 應用程序的容器,以及
- 測試和擴展了該應用程序。
欲瞭解更多詳細信息,請參閲 Openshift 詳細文檔