将 Fleet 管理的 Elastic Agent 从一个集群迁移到另一个集群

编辑

将 Fleet 管理的 Elastic Agent 从一个集群迁移到另一个集群

编辑

在某些情况下,您可能需要将已安装的 Elastic Agent 从一个集群的管理转移到另一个集群的管理。

为了实现无缝迁移,我们建议您在新集群中创建一个与原始集群配置方式相同的相同代理策略。有几种方法可以做到这一点。

本指南将引导您完成通过快照源集群并在目标集群上恢复快照来迁移 Elastic Agent 的步骤。这些说明假定您拥有 Elastic Cloud 部署,但它们也适用于本地集群。

对源集群进行快照
编辑

有关完整详细信息,请参阅完整的快照和恢复文档。简而言之,要在 Elastic Cloud 部署中创建新快照

  1. 在 Kibana 中,打开主菜单,然后单击管理此部署
  2. 在部署菜单中,选择快照
  3. 单击立即拍摄快照

    Deployments Snapshots page
从快照创建新的目标集群
编辑

您可以基于上一步拍摄的快照创建一个新集群,然后将 Elastic Agent 和 Fleet 迁移到新集群。为了获得最佳效果,建议新的目标集群与代理迁移的集群版本相同。

  1. 打开 Elastic Cloud 控制台并选择创建部署
  2. 选择恢复快照数据
  3. 从以下位置恢复字段中,选择您的源部署。
  4. 选择您的部署设置,并最好选择与源集群相同的 Elastic Stack 版本。
  5. 单击创建部署

    Create a deployment page
更新目标集群中的设置
编辑

当目标集群可用时,您需要调整一些设置。花一些时间检查新集群中的 Fleet 设置。

  1. 打开 Kibana 菜单并选择Fleet
  2. 代理选项卡上,您的代理应该可见,但是它们将显示为脱机。这是因为这些代理尚未在新目标集群中注册,并且仍注册在原始源集群中。

    Agents tab in Fleet showing offline agents
  3. 打开 Fleet 设置选项卡。
  4. 检查此处捕获的 Fleet 配置。请注意,这些设置是从源集群的快照中提取的,可能在新目标集群中没有意义,因此需要进行相应的修改。

    在以下示例中,Fleet Server 主机输出设置都从源集群复制过来

    Settings tab in Fleet showing source deployment host and output settings

    接下来的步骤将说明如何获取适用于 Elastic Cloud 中新目标集群的相关 Fleet Server 主机和 Elasticsearch 输出详细信息。

修改 Elasticsearch 输出
编辑
  1. 在 Elastic Cloud 上的新目标集群中,在 Fleet 设置选项卡上的输出部分中,您将找到一个名为Elastic Cloud 内部输出的内部输出。主机地址的格式为

    https://<cluster-id-target>.containerhost:9244

    从目标集群中记录此<cluster-id-target>。在所示示例中,ID 为fcccb85b651e452aa28703a59aea9b00

  2. 同样在输出部分中,请注意,从源集群复制过来的默认 Elasticsearch 输出也采用以下形式

    https://<cluster-id-source>.<cloud endpoint address>:443.

    修改 Elasticsearch 输出,使集群 ID 与Elastic Cloud 内部输出的集群 ID 相同。在此示例中,我们还将输出重命名为New Elasticsearch

    Outputs section showing the new Elasticsearch host setting

    在此示例中,New Elasticsearch输出和Elastic Cloud 内部输出现在具有相同的集群 ID,即fcccb85b651e452aa28703a59aea9b00

您现在已经创建了一个 Elasticsearch 输出,代理可以使用该输出将数据写入新的目标集群。对于不使用 Elastic Cloud 的本地环境,您应该同样可以使用新集群的主机地址。

修改 Fleet Server 主机
编辑

与 Elasticsearch 主机一样,Fleet Server 主机也随着新目标集群而更改。请注意,如果您在本地部署 Fleet Server,则主机可能没有更改地址,因此无需修改此设置。我们仍然建议您确保代理能够访问本地 Fleet Server 主机(它们应该能够访问,因为它们在迁移之前能够连接到它)。

Elastic Cloud Fleet Server 主机与 Elasticsearch 输出具有类似的格式

https://<deployment-id>.fleet.<domain>.io

要配置正确的 Elastic Cloud Fleet Server 主机,您需要找到目标集群的完整deployment-id,并使用它来替换从源集群复制过来的原始deployment-id

查找deployment-id的最简单方法是通过部署 URL

  1. 从 Kibana 菜单中选择管理此部署
  2. 从浏览器地址栏中的 URL 复制部署 ID。

    Deployment management page

    在此示例中,新的部署 ID 为eed4ae8e2b604fae8f8d515479a16b7b

    使用该值作为deployment-id,新的 Fleet Server 主机 URL 为

    https://eed4ae8e2b604fae8f8d515479a16b7b.fleet.us-central1.gcp.cloud.es.io:443

  3. 在目标集群中,在Fleet server 主机下,将原始主机 URL 替换为新值。

    Fleet server hosts showing the new host URL
重置 Elastic Cloud 策略
编辑

在您的目标集群上,原始 Elastic Cloud Elastic Agent 策略中的某些设置可能仍被保留,需要更新以引用新集群。例如,在安装到 Elastic Cloud Elastic Agent 策略的 APM 策略中,原始且过时的 APM URL 将被保留。可以通过运行reset_preconfigured_agent_policies API 请求来解决此问题。请注意,当您重置策略时,所有 APM 集成设置都将重置,包括密钥或任何基于尾部的采样。

要重置 Elastic Cloud Elastic Agent 策略

  1. 选择以下 API 请求之一,并通过终端窗口提交它。

    • 如果您使用的是 Kibana 版本 8.11 或更高版本,请运行

      curl --request POST \
      --url https://{KIBANA_HOST:PORT}/internal/fleet/reset_preconfigured_agent_policies/policy-elastic-agent-on-cloud \
      -u username:password \
      --header 'Content-Type: application/json' \
      --header 'kbn-xsrf: as' \
      --header 'elastic-api-version: 1'
    • 如果您使用的是低于 8.11 的 Kibana 版本,请运行

      curl --request POST \
      --url https://{KIBANA_HOST:PORT}/internal/fleet/reset_preconfigured_agent_policies/policy-elastic-agent-on-cloud \
      -u username:password \
      --header 'Content-Type: application/json' \
      --header 'kbn-xsrf: as'

      运行命令后,您的 Elastic Cloud 代理策略设置应全部正确更新。

运行该命令后,Fleet 中可能会出现一条警告消息,指示 Fleet Server 不健康。此外,与 Elastic Cloud 代理策略关联的 Elastic Agent 可能会从代理列表中消失。为了解决这个问题,您可以重新启动 Integrations Server

  1. 从 Kibana 菜单中选择管理此部署
  2. 在部署菜单中,选择Integrations Server
  3. Integrations Server页面上,选择强制重新启动

重新启动后,Integrations Server 将为 Elastic Cloud 代理策略注册一个新的 Elastic Agent,并且 Fleet Server 应恢复到健康状态。

确认您的策略设置
编辑

现在,Fleet 设置已正确设置,值得确保 Elastic Agent 策略也正确指向正确的实体。

  1. 在目标集群中,转到Fleet → 代理策略
  2. 选择要验证的策略。
  3. 打开设置选项卡。
  4. 确保Fleet Server集成的输出代理监控的输出都设置为新创建的实体。

    An agent policy’s settings showing the newly created entities

如果您就地修改了 Fleet Server 和输出,则这些将相应地更新。但是,如果创建了新实体,请确保此处引用了正确的实体。

新目标集群中的代理策略
编辑

通过从快照创建新的目标集群,您的所有策略以及所有代理都应该已经创建。这些代理将处于脱机状态,因为实际的代理没有在新目标集群中签入(尚未),并且仍在与源集群通信。

现在可以将代理重新注册到这些策略中,并迁移到新的目标集群。

将 Elastic Agent 迁移到新的目标集群
编辑

为了确保正确创建所有必需的 API 密钥,您当前集群中的代理需要重新注册到新的目标集群。

最好一次执行一个策略。对于给定的策略,您需要捕获注册令牌和代理连接的 URL。您可以通过运行产品内的步骤来添加新代理来找到这些信息。

  1. 在目标集群上,打开Fleet 并选择 添加代理
  2. 选择您新创建的策略。
  3. 在您的主机上安装 Elastic Agent部分中,找到示例安装命令。其中包含注册代理所需的详细信息,即注册令牌和 Fleet 服务器 URL。
  4. 复制包含这些值的安装命令部分。即,–url=<path> –enrollment-token=<新策略的令牌>

    Install command from the Add Agent UI
  5. 在当前安装了代理的主机上,使用复制的 URL 和注册令牌再次注册代理。

    sudo elastic-agent enroll --url=<fleet server url> --enrollment-token=<token for the new policy>

    命令输出应如下所示

    Install command output
  6. 现在,每个主机上的代理将检入新的 Fleet 服务器,并出现在新的目标集群中。在源集群中,代理将脱机,因为它们不会发送任何检入。

    Newly enrolled agents in the target cluster
  7. 为每个 Elastic Agent 策略重复此过程。

如果一切顺利,您已成功将 Fleet 管理的 Elastic Agent 迁移到新的集群。