你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本教程中,你将了解如何创建一个 Eureka 服务,该服务旨在面对故障和高需求保持运行状态。 构建高度可用的 Eureka 服务有助于确保用于 Azure 容器应用的服务注册表始终可供客户端使用,而不管需求如何。
实现 Eureka 的高可用性状态包括将多个 Eureka 服务器实例链接在一起,以便形成群集。 群集提供资源,以便在一个 Eureka 服务器发生故障时,其他服务仍可用于请求。
本教程介绍以下操作:
- 为 Spring 组件创建 Eureka 服务器。
- 将两个用于 Spring 组件的 Eureka 服务器绑定到一个群集。
- 将容器应用绑定到两个 Eureka 服务器,以便进行高可用性服务发现。
Prerequisites
注意事项
在容器应用中运行托管 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 服务器仪表板,您的帐户需要在容器应用环境资源中被分配Microsoft.App/managedEnvironments/write、Owner或Contributor角色。
- 如果已有其中一个角色,请跳到获取仪表板 URL 部分来获取 URL 并查看仪表板。
- 如果要创建自定义角色定义并将其分配给帐户,请执行以下部分中的步骤: 创建并分配自定义角色。
- 如果要向帐户分配资源的
Owner或Contributor角色,请执行该操作,然后跳到获取仪表板 URL 部分。
创建和分配自定义角色
创建自定义角色定义。 运行此命令之前,请将值中的
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
获取控制台 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 服务器设置是否包含两个副本。
清理资源
本教程中创建的资源会影响 Azure 帐单。 如果不打算长期使用这些服务,请运行以下命令以删除本教程中创建的所有内容。
az group delete --resource-group $RESOURCE_GROUP