教學課程:在 Azure 容器應用程式中建立高可用性 Eureka 伺服器元件叢集
在本教學課程中,您將了解建立 Eureka 服務,該服務設計為在出現失敗和高需求時保持作業。 建置高可用性 Eureka 服務可確保服務登錄對用戶端一律可用,無論需求如何。
實現 Eureka 的高可用性狀態包括將多個 Eureka 伺服器執行個體連結在一起形成叢集。 叢集提供資源,以便在一個 Eureka 伺服器失敗時,其他服務仍對要求可用。
在本教學課程中,您已:
- 為 Spring 元件建立 Eureka 伺服器。
- 將兩個用於 Spring 元件的 Eureka 伺服器繫結至一個叢集中。
- 將應用程式繫結至兩個 Eureka 伺服器,以實現高可用性服務探索。
必要條件
若要完成此專案,您需要下列項目:
需求 | 指示 |
---|---|
Azure 帳戶 | 需要有效的訂用帳戶。 如果您沒有,可以免費建立一個。 |
Azure CLI | 安裝 Azure CLI。 |
考量
在 Azure 容器應用程式中執行受控 Java 元件時,請注意下列詳細資料:
項目 | 說明 |
---|---|
Scope | 元件會在與連線的容器應用程式相同的環境中執行。 |
調整大小 | 元件無法縮放。 縮放屬性 minReplicas 與 maxReplicas 都會設定為 1 。 |
資源 | 已修正元件的容器資源配置。 CPU 核心數為 0.5,記憶體大小為 1Gi。 |
定價 | 元件的計費會低於使用量型定價。 受控元件所取用的資源會以使用/閒置費率計費。 您可以刪除不再使用的元件來停止計費。 |
繫結 | 容器應用程式會透過繫結連線到元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取設定值,並連線到元件。 |
設定
使用以下步驟建立 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
建立叢集
接下來,建立兩個 Eureka 伺服器執行個體,並將它們作為叢集連結在一起。
建立兩個適用於 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
檢視儀表板
重要
若要檢視儀表板,您必須至少將 Microsoft.App/managedEnvironments/write
角色指派給您在受控環境資源上的帳戶。 您可以在資源上明確指派 Owner
或 Contributor
角色,或遵循步驟來建立自訂角色定義,並將其指派給您的帳戶。
建立自訂角色定義。
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>"] }'
請務必將
AssignableScopes
值中<>
括號之間的預留位置取代為您的訂用帳戶識別碼。將自訂角色指派給您在受控環境資源上的帳戶。
取得受控環境的資源識別碼。
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id -o tsv)
將角色指派給您的帳戶。
在執行此命令之前,請將
<>
括號之間的預留位置取代為您的使用者或服務主體識別碼。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 -o tsv
此命令會傳回可用來存取適用於 Spring 的 Eureka 伺服器儀表板的 URL。 透過儀表板,您可以驗證 Eureka 伺服器設定是否包含兩個複本。
清除資源
本教學課程中建立的資源會影響您的 Azure 帳單。 如果您不會長期使用這些服務,請執行下列命令來刪除本教學課程中建立的所有內容。
az group delete \
--resource-group $RESOURCE_GROUP