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

从亚马逊 EKS 迁移到 Azure Kubernetes 服务 (AKS)

本文提供了将典型的无状态和有状态工作负载从 Amazon EKS 迁移到 Azure Kubernetes 服务 (AKS) 的策略。

注意事项

实际生产工作负载的实际部署过程可能因以下因素而异:

  • 部署策略:在 GitOps 和传统 DevOps 的持续集成/持续部署 (CI/CD) 方法之间做出选择,会对部署方法产生重大影响。 GitOps 优先考虑通过版本控制资源库管理的声明式基础架构,而 DevOps CI/CD 则侧重于应用交付的自动化工作流。

  • 部署工件:部署工件的选择对定义部署结构起着至关重要的作用。 YAML 文件、清单文件、Helm 图表和 Kustomize 配置代表了指定和自定义部署设置的各种方法,每种方法都有其优势和用例。

  • 工作负载身份验证和授权:根据设置的不同,身份验证和授权方法也可能不同。 您可以使用 Amazon Web Services (AWS) 身份验证和访问控制 (IAM) 角色、工作负载身份机制或连接字符串进行访问控制。

  • 监控:实施监控解决方案是一个关键环节,可能涉及各种工具和方法,以确保所部署工作负载的性能和健康状况。 有关 AKS 监控与 EKS 相比的更多信息,请参阅Kubernetes 监控和日志

在开始迁移之前,请查看并考虑以下一般指南和最佳实践资源:

工作负载迁移注意事项

本节介绍在将工作负载从 Amazon EKS 迁移到 AKS 之前应该考虑的一些事项。

了解您现有的 Amazon EKS 环境

分析现有的 EKS 环境,了解当前的架构、资源和配置。

  • 查看 EKS 配置:评估 EKS 群集配置,如节点类型、节点数量、Kubernetes 版本和支持策略以及扩展配置。

    注意

    EKS 允许为 EKS 节点创建自定义 AMI 映像。 AKS 不允许使用自定义节点图像。 如果部署需要自定义节点,可以应用kubelet 定制和/或DaemonSets来自定义节点。

  • 查看应用程序工作负载:识别 EKS 集群上运行的所有 Kubernetes 工作负载,包括部署、服务、有状态集、入口配置和持久卷主张。 确保有一份完整的应用程序及其相关资源清单。

  • 检查依赖关系:确定 EKS 对 AWS 服务的任何特定依赖。

    AWS 服务 依赖项
    AWS 机密管理器 Azure Key Vault
    AWS Guard Duty Agent 适用于容器的 Microsoft Defender
    EKS Pod Identity Agent Microsoft Entra ID 工作负载标识
    Amazon Elastic File System (EFS) 或弹性块存储 (EBS) 容器存储接口 (CSI) 驱动程序 AKS CSI 驱动程序
  • 备份 EKS 集群:您可以使用Velero等非微软工具来备份和迁移 Kubernetes 资源和持久卷。

准备 Azure AKS 环境

Amazon 虚拟私有云 (VPC) Container Networking Interface (CNI)是 EKS 支持的默认联网插件。 AKS 群集支持多种网络插件和方法,可在虚拟网络中部署群集,包括:

按照以下步骤准备 AKS 群集:

  1. 在 Azure 中创建新的 AKS 群集,配置所需的网络设置以满足你的要求。
  2. 查看 EKS 中使用的 Kubernetes 清单和 YAML 文件。 检查任何潜在的 Kubernetes API 版本不兼容或 AKS 不支持的特定 EKS 配置。
  3. 确保可以从 AKS 集群访问您的 Docker 映像和容器映像注册表位置。 验证网络连接以及访问图像所需的任何身份验证和授权设置。

按照这些步骤,您可以成功创建 AKS 集群,并确保 Kubernetes 清单和 Docker 映像的兼容性,从而确保从 EKS 到 AKS 的迁移过程顺利进行。

迁移概述

从 Amazon EKS 迁移到 AKS 涉及多个步骤,例如

  • 容器映像迁移:从 EKS 迁移到 AKS 时,迁移容器映像是一个关键步骤。 您可以使用 kubectl、Docker 或容器注册表等工具来导出和导入图像。

    1. 从 EKS导出图像。
    2. 设置 Azure 容器注册表并将其附加到 AKS(如果还没有)。
    3. 将图像推送到容器注册表。

    容器图像也可以直接从非 Azure 公共或私有存储库导入到容器注册表。 有关详细信息,请参阅导入容器图像

  • Kubernetes 清单迁移:AKS 使用 Kubernetes YAML 文件清单来定义 Kubernetes 对象。 部署通常使用 kubectl create 或 kubectl apply 创建和管理。 通过定义 YAML 格式的清单文件来穿件部署。 欲了解更多信息,请参阅AKS 清单示例。 您可以通过查看部署和 YAML 清单,了解有关 YAML 文件如何在 Kubernetes 上工作的更多信息。

  • 数据迁移:精心规划有状态应用程序的迁移,以避免数据丢失或意外停机。 有关详细信息,请参阅有状态工作负载迁移注意事项部分。

无状态工作负载迁移注意事项

迁移 Kubernetes 清单涉及调整配置以在 Azure 环境中运行,包括以下步骤:

  1. 更新清单:更新 Kubernetes 清单,以使用容器注册表中的新图像位置。 用容器注册表路径替换 YAML 文件中的图像引用。

    1. 查看现有的 Kubernetes 清单文件,了解 AWS 特定的配置,如 VPC 和 IAM 角色。
    2. 查看与节点、服务账户和其他资源相关联的 EKS IAM 角色。 将其与同等的 Azure AKS 基于角色的访问控制 (RBAC) 角色进行映射。 如需了解更多信息,请参阅Kubernetes 工作负载身份和访问
    3. 修改清单文件,将 AWS 特定的设置替换为 Azure 特定的设置,如注释。
  2. 将清单应用于 AKS

    1. 连接至 AKS 群集
    2. 使用kubectl apply -f应用修改后的 Kubernetes 清单文件。

有状态工作负载迁移注意事项

如果您的应用程序使用Persistent Volumes (PV)Persistent Volume Claims (PVC)进行数据存储,请确保备份这些数据。 您可以使用Velero等工具执行群集备份,包括 PV 和 PVC 数据的备份。 有关详细信息,请参阅使用 Velero 备份和还原 Amazon EKS 群集资源

有状态应用程序通常有持久数据存储要求,这增加了迁移过程的复杂性。 有关 Amazon EKS 和 AKS 存储能力的比较,请参见Kubernetes 集群的存储选项

请按照以下步骤备份持久性数据:

  1. AKSEKS 集群中设置 Velero。
  2. 执行EKS 群集的备份
  3. 使用 az 复制命令将 S3 存储桶中的 Velero 备份复制到 Azure blob 存储中。
  4. 由于 AKS 和 EKS 可能会对永久性卷声明使用不同的storageClassNames,因此需要创建一个configMap,将源storageClassNames转换为与 AKS 兼容的类名。 如果在 EKS 和 AKS Kubernetes 群集上使用相同的存储解决方案,则可以忽略此步骤。
  5. 将备份还原到 AKS(使用Velero restore 命令)。
  6. 对还原的对象应用必要的更改,例如对 Amazon Elastic Container Registry (ECR) 中的容器映像的引用或对机密的访问。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者

  • Dixit Arora | 高级客户工程师,ISV DN CoE
  • Ketan Chawda | ISV DN CoE 高级客户工程师

其他参与者

若要查看非公开领英个人资料,请登录领英。

后续步骤