在這套教學中,你將了解如何打造一個設計能在故障與高需求下仍能運作的 Eureka 服務。 建立一個高度可用的 Eureka 服務,有助於確保你用於 Azure 容器應用程式的服務登錄檔,無論需求如何,客戶都能隨時取得。
Eureka 達到高可用性狀態包括將多個 Eureka 伺服器實例連結起來,形成叢集。 叢集提供資源,以便在一個 Eureka 伺服器失敗時,其他服務仍對要求可用。
在本教學課程中,您:
- 為 Spring 元件建立 Eureka 伺服器。
- 將兩個用於 Spring 元件的 Eureka 伺服器繫結至一個叢集中。
- 將容器應用程式綁定到兩台 Eureka 伺服器上,以實現高度可用的服務發現。
先決條件
考量
當你在容器應用程式中執行受管理的 Java 元件時,請注意以下細節:
| Item | 說明 |
|---|---|
| Scope | 元件會在與連線的容器應用程式相同的環境中執行。 |
| 調整大小 | 元件無法擴展。 縮放屬性 minReplicas 與 maxReplicas 都會設定為 1。 |
| 資源 | 已修正元件的容器資源配置。 CPU 核心數為 0.5,記憶體容量為 1 GB。 |
| 定價 | 元件的計費會低於使用量型定價。 受管理元件所消耗的資源會依據資源使用量,依據主動或閒置費率計費。 您可以刪除不再使用的元件來停止計費。 |
| 繫結 | 容器應用程式會透過繫結連線到元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取設定值,並連線到元件。 |
設置初始資源
請使用以下步驟,建立一些你為 Eureka 服務叢集所需的資源。
建立保留應用程式設定值的變數。
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_FIRST=eureka01 export EUREKA_COMPONENT_SECOND=eureka02 export APP_NAME=sample-service-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"使用 Azure CLI 登入 Azure。
az login建立資源群組。
az group create --name $RESOURCE_GROUP --location $LOCATION建立您的容器應用程式環境。
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
為叢集建立伺服器
建立兩個適用於 Spring 元件的 Eureka 伺服器。
az containerapp env java-component eureka-server-for-spring create \
--environment $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--name $EUREKA_COMPONENT_FIRST
az containerapp env java-component eureka-server-for-spring create \
--environment $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--name $EUREKA_COMPONENT_SECOND
將組件結合在一起形成叢集
為了讓 Eureka 伺服器能在高可用性配置中運作,它們必須以叢集形式連結在一起。
將第一個 Eureka 伺服器繫結至第二個。
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_FIRST \ --bind $EUREKA_COMPONENT_SECOND將第二個 Eureka 伺服器繫結至第一個。
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_SECOND \ --bind $EUREKA_COMPONENT_FIRST
部署和繫結應用程式
伺服器元件連結後,你可以建立容器應用程式並綁定到兩個 Eureka 元件上。
建立容器應用程式。
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080將容器應用程式繫結至第一個 Eureka 伺服器元件。
az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $EUREKA_COMPONENT_FIRST將容器應用程式繫結至第二個 Eureka 伺服器元件。
az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $EUREKA_COMPONENT_SECOND
檢視儀表板
重要事項
若要檢視適用於 Spring 的 Eureka Server 儀表板,針對容器應用程式環境資源,您需要將 Microsoft.App/managedEnvironments/write、Owner 或 Contributor 角色指派到您的帳戶。
建立及指派自訂角色
建立自訂角色定義。 執行此指令前,請將值中的
AssignableScopes佔位符替換成你的訂閱 ID。az role definition create --role-definition '{ "Name": "Java Component Dashboard Access", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'取得容器應用程式環境的資源 ID。
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)針對容器應用程式環境資源,將自訂角色指派到您的帳戶。 執行此指令前,先將值中的
assignee佔位符替換為使用者物件 ID 或服務主體 ID。az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "Java Component Dashboard Access" \ --scope $ENVIRONMENT_ID
取得儀表板網址
取得適用於 Spring 的 Eureka 伺服器儀表板 URL。
az containerapp env java-component eureka-server-for-spring show \
--environment $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--name $EUREKA_COMPONENT_FIRST \
--query properties.ingress.fqdn \
--output tsv
此命令會傳回可用來存取適用於 Spring 的 Eureka 伺服器儀表板的 URL。 透過儀表板,您可以驗證 Eureka 伺服器設定是否包含兩個複本。
清除資源
本教學中建立的資源會影響你的 Azure 帳單。 如果你不打算長期使用這些服務,請執行以下指令移除本教學中建立的所有內容。
az group delete --resource-group $RESOURCE_GROUP