迁移到 Azure Kubernetes 服务 (AKS)

为了帮助你规划和执行到 Azure Kubernetes 服务 (AKS) 的成功迁移,本指南提供了当前建议 AKS 配置的详细信息。 尽管本文并未涵盖每种方案,但它包含有关规划成功迁移的更多详细信息的链接。

本文汇总了以下各项的迁移详细信息:

  • 包含标准负载均衡器和虚拟机规模集的 AKS
  • 现有的附加 Azure 服务
  • 确保有效配额
  • 高可用性和业务连续性
  • 无状态应用程序的注意事项
  • 有状态应用程序的注意事项
  • 群集配置的部署

注意

根据你的方案,以下开源工具可能有助于迁移:

开始之前

在迁移过程中,你应采取的一个重要做法是记得遵循常用的部署和测试模式。 在部署之前测试应用程序是确保其质量、功能和与目标环境的兼容性的重要步骤。 它可以帮助你识别和修复可能影响应用程序或底层基础结构的性能、安全性或可用性的任何错误、bug 或问题。

包含标准负载均衡器和虚拟机规模集的 AKS

AKS 是一个托管服务,它提供独特的功能和较低的管理开销。 由于 AKS 是托管服务,你必须从 AKS 支持的一系列区域中进行选择。 可能需要修改现有应用程序,使其在从现有群集转换到 AKS 期间在 AKS 托管的控制平面上保持正常运行。

我们建议使用虚拟机规模集Azure 标准负载均衡器支持的 AKS 群集,以确保获得以下功能:

虚拟机可用性集支持的 AKS 群集缺少上述许多功能的支持。

创建具有标准负载均衡器和虚拟机规模集的 AKS 群集

以下示例创建了一个 AKS 群集,其中包含一个虚拟机 (VM) 规模集支持的单一节点池。 它会在群集的节点池中启用群集自动缩放程序,并将最小节点数设置为 1,将最大节点数设置为 3

  1. 使用 az group create 命令创建资源组。

    az group create --name myResourceGroup --location eastus
    
  2. 使用 az aks create 命令创建 AKS 群集。

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --vm-set-type VirtualMachineScaleSets \
      --load-balancer-sku standard \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

现有的附加 Azure 服务

在迁移群集时,你可能附加了外部 Azure 服务。 虽然以下服务不需要重新创建资源,但需要更新从以前群集到新群集的连接以维持正常运行。

  • Azure 容器注册表
  • Log Analytics
  • Application Insights
  • 流量管理器
  • 存储帐户
  • 外部数据库

确保有效配额

由于在迁移期间要将其他虚拟机部署到订阅中,因此,应该检查配额和限制是否足以应对这些资源。 如有必要,可请求增加 vCPU 配额

可能需要请求提高网络配额,以确保不会耗尽 IP。 有关详细信息,请参阅 AKS 的网络和 IP 范围

有关详细信息,请参阅 Azure 订阅和服务限制。 若要查看当前配额,请在 Azure 门户中转到订阅边栏选项卡,选择自己的订阅,然后选择“用量 + 配额”。

高可用性和业务连续性

如果应用程序无法处理故障时间,则需要遵循高可用性迁移方案的最佳做法。 请详细阅读 Azure Kubernetes 服务 (AKS) 中实现复杂业务连续性规划、灾难恢复和最大程度延长运行时间的最佳做法

对于复杂应用程序,通常会在一段时间内迁移,而不是一次性全部迁移,这意味着旧环境和新环境可能需要通过网络进行通信。 以前使用 ClusterIP 服务进行通信的应用程序可能需要公开为 LoadBalancer 类型,并得到相应的保护。

若要完成迁移,需将客户端指向 AKS 上运行的新服务。 重定向流量的建议方法是将 DNS 更新为指向 AKS 群集前面的负载均衡器。

Azure 流量管理器可将客户定向到所需的 Kubernetes 群集和应用程序实例。 流量管理器是可以在区域间分布网络流量的基于 DNS 的流量负载均衡器。 为获得最佳性能和冗余,在进入 AKS 群集之前,通过流量管理器来定向所有应用程序流量。

在多群集部署中,客户应连接到指向每个 AKS 群集上的服务的流量管理器 DNS 名称。 使用流量管理器终结点定义这些服务。 每个终结点都是服务负载均衡器 IP。 使用此配置可将网络流量从一个区域的流量管理器终结点定向到另一个区域的终结点。

AKS with Traffic Manager

无状态应用程序的注意事项

无状态应用程序迁移涉及以下步骤:

  1. 将资源定义(YAML 或 Helm)应用于新群集。
  2. 确保所有内容都按预期方式运行。
  3. 重定向流量以激活新群集。

有状态应用程序的注意事项

精心规划有状态应用程序的迁移,以避免数据丢失或意外停机。

Azure 文件

与磁盘不同,Azure 文件可同时装载到多个主机。 在 AKS 群集中,Azure 和 Kubernetes 都不会阻止你创建 AKS 群集仍在使用的 Pod。 若要防止数据丢失和意外行为,请确保群集不会同时向相同的文件进行写入。

如果应用程序可以托管指向同一文件共享的多个副本,请遵循无状态迁移步骤,将 YAML 定义部署到新群集。

否则,可以采用包含以下步骤的可行迁移方法:

  1. 验证应用程序是否正常工作。
  2. 将实时流量指向新的 AKS 群集。
  3. 断开旧群集的连接。

若要从空共享开始,然后创建源数据的副本,可以使用 az storage file copy 命令迁移数据。

迁移永久性卷。

将现有的永久性卷迁移到 AKS 时,通常需要遵循以下步骤:

  1. 暂停写入到应用程序。
    • 此步骤是可选的,需要停机。
  2. 创建磁盘的快照。
  3. 从快照创建新的托管磁盘。
  4. 在 AKS 中创建永久性卷。
  5. 将 Pod 规范更新为使用现有卷而不是 PersistentVolumeClaims(静态预配)。
  6. 将应用程序部署到 AKS。
  7. 验证应用程序是否正常工作。
  8. 将实时流量指向新的 AKS 群集。

重要

如果不暂停写入,则需要将数据复制到新部署。 否则在创建磁盘快照后,写入的数据将会丢失。

可以借助以下开源工具来创建托管磁盘,并在 Kubernetes 群集之间迁移卷:

群集配置的部署

建议使用现有的持续集成 (CI) 和持续交付 (CD) 管道将已知正常的配置部署到 AKS。 可以使用 Azure Pipelines 生成应用程序并将其部署到 AKS。 克隆现有的部署任务,并确保 kubeconfig 指向新的 AKS 群集。

如果无法做到这一点,请从现有 Kubernetes 群集导出资源定义,并将其应用到 AKS。 可以使用 kubectl 导出对象。 例如:

kubectl get deployment -o yaml > deployments.yaml

请务必检查输出并删除所有不必要的实时数据字段。

将现有资源移到另一个区域

你可能需要将 AKS 群集移到 AKS 支持的不同区域。 我们建议你在其他区域中创建一个新群集,然后将资源和应用程序部署到新群集。

如果你在 AKS 群集上运行了任何服务,则需要在新区域中的群集上安装和配置这些服务。

本文汇总了以下各项的迁移详细信息:

  • 包含标准负载均衡器和虚拟机规模集的 AKS
  • 现有的附加 Azure 服务
  • 确保有效配额
  • 高可用性和业务连续性
  • 无状态应用程序的注意事项
  • 有状态应用程序的注意事项
  • 群集配置的部署