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

将 Azure Kubernetes 服务 (AKS) 群集迁移到另一个区域

本文提供了将 Azure Kubernetes 服务群集迁移到另一个区域的指导。

出于多种原因,你可能希望将现有 Azure 资源从一个区域移到另一个区域。 你可以采取以下建议:

  • 利用新的 Azure 区域。
  • 部署仅在特定区域可用的功能和服务。
  • 满足内部策略和治理要求。
  • 与公司合并和收购保持一致
  • 满足容量计划要求。

注意

具有快速发布周期的客户通常利用 CI/CD 管道。 在这些情况下,可以考虑更改生成和发布管道,而不是在目标区域中重新部署 AKS 群集。

先决条件

在开始重新定位的规划阶段之前,请先查看以下先决条件:

  • 请确保目标区域有足够的容量 (VM SKU),以容纳新的群集节点。

  • 验证你是否对目标订阅具有资源创建权限。 确认 Azure 策略没有限制可以部署 AKS 的区域。

  • (可选)收集你用于预配源 AKS 群集的基础结构即代码 (IaC) 模板或脚本。

  • 收集 Kubernetes 清单,以便在目标群集中重新创建应用程序工作负载。

    提示

    评估一种用于部署工作负载的 GitOps 方法,其中 Kubernetes 配置清单存储在一个 git 存储库中,并由在群集内运行的 GitOps 操作程序(例如 Flux)自动应用。 GitOps 方法使得将工作负载重新部署到不同的群集非常简单,只需安装 GitOps 控制器并将其指向存储库即可。

  • 检查群集入口实现。

  • 记录将公共域指向群集入口终结点所需的 DNS 更改。

  • 检查群集是否存储了迁移到目标群集所需的任何状态数据,例如任何永久性卷。

  • 记录公共 TLS 证书管理和分发。

  • 捕获 AKS API 服务允许列表中定义的任何 IP 地址。

  • 了解所有依赖资源。 其中一些资源可以是:

    • 队列、消息总线、缓存引擎
    • Azure Key Vault
    • 托管标识
    • 虚拟网络配置。 定义足够的子网大小,以便在使用 Azure 高级网络模型时允许容器 IP 增长
    • 公共 IP 地址
    • 虚拟网络网关 (VNG)。 如果需要与目标区域中的本地环境进行站点对站点通信,则必须在目标虚拟网络中创建 VNG。
    • Azure 专用终结点。 必须检查利用专用链接终结点的 Azure PaaS 资源,并在目标区域中创建新的专用链接实例,例如 ACR、Azure SQL DB、KeyVault,等等。
    • Azure 应用程序网关
    • Azure DNS
    • Azure 防火墙
    • Azure Monitor(容器见解)
    • Azure 容器注册表可以在 ACR 实例之间复制映像。 为了在拉取映像时实现最佳性能,注册表应存在于目标区域中。

      注意

      如果使用 Azure 容器注册表向容器注册表进行身份验证,则可以向新 AKS 群集的托管标识授予 AcrPull RBAC 角色。

    • Azure 托管磁盘
    • Azure 文件

准备

在开始群集迁移过程之前,请确保完成以下准备:

  1. 若要容纳 AKS 群集节点和 Pod,如果使用的是 Azure CNI 网络,请部署具有大小足够的许多子网的虚拟网络。

  2. 如果使用的是 Azure Key Vault,请部署 Key Vault

  3. 确保相关的 TLS 入口证书可用于部署,理想情况下,位于安全的存储(例如 Azure Key Vault)中。

  4. 部署一个容器注册表。 自动同步源注册表映像,或使用 CI/CD 管道或脚本重建新映像并将其推送到目标注册表。

  5. 部署 Azure Monitor 工作区

  6. (可选)部署 Azure 应用程序网关以处理入口流量。应用程序网关入口控制器 (AGIC) 可以与群集紧密集成

  7. 部署群集工作负载所需的任何数据源,并还原或同步源数据。

  8. 执行 CI/CD 管道中定义的现有 IaC 生成工件,这些生成工件用于部署源群集及其所依赖的服务。 更改代码或模板输入参数以重新部署到其他资源组和 Azure 区域。

重新部署

按照以下步骤部署 AKS 群集,且不进行任何数据迁移:

  1. 若要在 Azure 中创建目标环境,请在本地工作站上手动运行现有的 IaC 生成工件。

  2. 如果没有现有的 IaC 资产,则可以将当前群集配置导出为 ARM 模板并针对目标区域执行。 IaC 模板是从头开始创建的,或者是使用 Bicep、JSON、Terraform 或其他解决方案的示例模板的修改版本。

    注意

    • 专用链接连接、ACR 连接的注册表和 Azure Monitor 工作区数据源当前不使用此方法导出,因此在执行之前必须将其从生成的模板中移除。
  3. 将容器工作负载部署到 AKS 群集,这可通过两种方式实现:

    • 拉取 清单被从存储库中提取,并由在群集内运行的控制器应用,这称为 GitOps 方法。
    • 推送。 清单被使用 Kubernetes API 服务和 kubectl 命令行工具从 CI/CD 管道或本地工作站推送到群集。
  4. 若要确保新群集按预期执行,请执行测试和验证。

  5. 将你的公共 DNS 条目更改为指向目标群集(Azure 公共负载均衡器 IP 或应用程序网关公共 IP)的外部入口 IP。

  6. 使用全局负载均衡解决方案(例如 Azure DNS 或 Azure 流量管理器)的部署需要将区域添加到配置中。

通过数据迁移重新部署

使用本地存储(例如永久性卷)在群集内存储数据或托管数据库服务的 AKS 工作负载可以备份到源群集上并还原到目标群集。 若要了解如何执行备份和还原,请参阅使用 Azure CLI 备份 Azure Kubernetes 服务