共用方式為


教學課程:在 Azure 容器應用程式中建立高可用性 Eureka 伺服器元件叢集

在這套教學中,你將了解如何打造一個設計能在故障與高需求下仍能運作的 Eureka 服務。 建立一個高度可用的 Eureka 服務,有助於確保你用於 Azure 容器應用程式的服務登錄檔,無論需求如何,客戶都能隨時取得。

Eureka 達到高可用性狀態包括將多個 Eureka 伺服器實例連結起來,形成叢集。 叢集提供資源,以便在一個 Eureka 伺服器失敗時,其他服務仍對要求可用。

在本教學課程中,您:

  • 為 Spring 元件建立 Eureka 伺服器。
  • 將兩個用於 Spring 元件的 Eureka 伺服器繫結至一個叢集中。
  • 將容器應用程式綁定到兩台 Eureka 伺服器上,以實現高度可用的服務發現。

先決條件

考量

當你在容器應用程式中執行受管理的 Java 元件時,請注意以下細節:

Item 說明
Scope 元件會在與連線的容器應用程式相同的環境中執行。
調整大小 元件無法擴展。 縮放屬性 minReplicasmaxReplicas 都會設定為 1
資源 已修正元件的容器資源配置。 CPU 核心數為 0.5,記憶體容量為 1 GB。
定價 元件的計費會低於使用量型定價。 受管理元件所消耗的資源會依據資源使用量,依據主動或閒置費率計費。 您可以刪除不再使用的元件來停止計費。
繫結 容器應用程式會透過繫結連線到元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取設定值,並連線到元件。

設置初始資源

請使用以下步驟,建立一些你為 Eureka 服務叢集所需的資源。

  1. 建立保留應用程式設定值的變數。

    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"
    
  2. 使用 Azure CLI 登入 Azure。

    az login
    
  3. 建立資源群組。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 建立您的容器應用程式環境。

    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 伺服器能在高可用性配置中運作,它們必須以叢集形式連結在一起。

  1. 將第一個 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
    
  2. 將第二個 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 元件上。

  1. 建立容器應用程式。

    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
    
  2. 將容器應用程式繫結至第一個 Eureka 伺服器元件。

    az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --bind $EUREKA_COMPONENT_FIRST 
    
  3. 將容器應用程式繫結至第二個 Eureka 伺服器元件。

    az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --bind $EUREKA_COMPONENT_SECOND
    

檢視儀表板

重要事項

若要檢視適用於 Spring 的 Eureka Server 儀表板,針對容器應用程式環境資源,您需要將 Microsoft.App/managedEnvironments/writeOwnerContributor 角色指派到您的帳戶。

  • 如果你已經有這些角色,請跳到 「取得儀表板網址 」區塊,取得網址並查看儀表板。
  • 如果你想建立自訂角色定義並將其指派到你的帳戶,請按照以下步驟進行: 建立並指派自訂角色
  • 如果你想把帳號指派到該資源的 OwnerContributor 角色,先完成該指派,然後跳到 「取得儀表板網址」 區塊。

建立及指派自訂角色

  1. 建立自訂角色定義。 執行此指令前,請將值中的 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>"]
    }'
    
  2. 取得容器應用程式環境的資源 ID。

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. 針對容器應用程式環境資源,將自訂角色指派到您的帳戶。 執行此指令前,先將值中的 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 伺服器設定是否包含兩個複本。

Eureka for Spring 儀表板的截圖。註冊實例區塊列出了一個容器應用程式和兩台 Eureka 伺服器,狀態都是運行中。

清除資源

本教學中建立的資源會影響你的 Azure 帳單。 如果你不打算長期使用這些服務,請執行以下指令移除本教學中建立的所有內容。

az group delete --resource-group $RESOURCE_GROUP