你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure 容器应用中创建高度可用的 Eureka 服务器组件群集

在本教程中,你将了解如何创建一个 Eureka 服务,该服务旨在面对故障和高需求保持运行状态。 构建高度可用的 Eureka 服务有助于确保用于 Azure 容器应用的服务注册表始终可供客户端使用,而不管需求如何。

实现 Eureka 的高可用性状态包括将多个 Eureka 服务器实例链接在一起,以便形成群集。 群集提供资源,以便在一个 Eureka 服务器发生故障时,其他服务仍可用于请求。

本教程介绍以下操作:

  • 为 Spring 组件创建 Eureka 服务器。
  • 将两个用于 Spring 组件的 Eureka 服务器绑定到一个群集。
  • 将容器应用绑定到两个 Eureka 服务器,以便进行高可用性服务发现。

Prerequisites

注意事项

在容器应用中运行托管 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 服务器仪表板,您的帐户需要在容器应用环境资源中被分配Microsoft.App/managedEnvironments/writeOwnerContributor角色。

  • 如果已有其中一个角色,请跳到获取仪表板 URL 部分来获取 URL 并查看仪表板。
  • 如果要创建自定义角色定义并将其分配给帐户,请执行以下部分中的步骤: 创建并分配自定义角色
  • 如果要向帐户分配资源的 OwnerContributor 角色,请执行该操作,然后跳到获取仪表板 URL 部分。

创建和分配自定义角色

  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
    

获取控制台 URL

获取适用于 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 服务器设置是否包含两个副本。

适用于 Spring 仪表板的 Eureka 的屏幕截图。已注册的实例部分列出了一个容器应用和两个 Eureka 服务器,所有这些服务器的状态为“已启动”。

清理资源

本教程中创建的资源会影响 Azure 帐单。 如果不打算长期使用这些服务,请运行以下命令以删除本教程中创建的所有内容。

az group delete --resource-group $RESOURCE_GROUP