将容器迁移到 Google Cloud:将 Kubernetes 迁移到 GKE

本文档可帮助您规划、设计和实现从自行管理的 Kubernetes 环境到 Google Kubernetes Engine (GKE) 的迁移。如果操作不当,则将应用从一个环境迁移到另一个环境可能极具挑战性,因此您需要谨慎规划和执行迁移。

本文档是关于迁移到 Google Cloud 的系列文章中的一篇。如果您想要了解该系列文章,请参阅迁移到 Google Cloud:选择迁移路径

本文档是一系列文章中的一篇,介绍了如何将容器迁移到 Google Cloud:

如果您计划从自行管理的 Kubernetes 环境迁移到 GKE,则本文档非常有用。您的环境可能在本地环境、私有托管环境或其他云服务商中运行。如果您正在评估迁移的时机并希望了解潜在的情况,则本文档也非常有用。

通过使用 GKE,您可以获得以下好处:

本文档假定您已阅读并熟悉以下任务:

下图说明了迁移过程的路径。

迁移路径包含四个阶段。

在每个迁移步骤中,您会按照《迁移到 Google Cloud:使用入门》中定义的阶段执行操作:

  1. 评估和发现工作负载。
  2. 规划和构建基础。
  3. 部署工作负载。
  4. 优化您的环境。

评估您的环境

在评估阶段,您需要确定将自行管理的 Kubernetes 环境迁移到 GKE 的要求和依赖项:

  1. 构建一个完整的应用清单。
  2. 根据应用的属性和依赖项对应用进行分类。
  3. 针对 Google Cloud 培训和指导您的团队。
  4. 针对 Google Cloud 构建实验和概念验证。
  5. 计算目标环境的总拥有成本 (TCO)。
  6. 选择您首先要迁移的工作负载。

以下部分依赖于《迁移到 Google Cloud:评估和发现工作负载》

构建您的清单

如需确定迁移范围,您必须了解当前的 Kubernetes 环境。您需要先收集有关集群的信息,然后需要关注这些集群中部署的工作负载以及工作负载的依赖项。在评估阶段结束时,您会有两份清单:一份用于集群,另一份用于这些集群中部署的工作负载。

如需构建集群的清单,请针对每个集群考虑以下方面:

  • 节点的数量和类型。如果您知道当前环境有多少个节点以及每个节点的特性,则可以在迁移到 GKE 时确定集群的大小。运行新环境中的节点的硬件架构代次可能与您在现有环境中使用的硬件架构代次不同。每个架构代次的性能各不相同,因此新环境所需要的节点数量可能与您的现有环境不同。请评估您在节点中使用的任何类型的硬件,例如高性能存储设备、GPU 和 TPU。
  • 内部或外部集群。请评估每个集群会公开给环境内部或外部的哪些操作者。为了支持您的用例,此评估包括集群中运行的工作负载以及与集群进行交互的接口
  • 多租户。如果您正在现有环境中管理多租户集群,请评估其在新的 Google Cloud 环境中能否正常运行。现在是评估如何改进多租户集群的好时机,因为多租户策略会影响您在 Google Cloud 上构建基础的方式。
  • Kubernetes 版本。请收集有关集群的 Kubernetes 版本的信息,以评估这些版本与 GKE 中提供的版本是否不匹配。如果您运行的是旧版或最近发布的版本,则您使用的可能是 GKE 不提供的功能。这些功能可能已被弃用,或者 GKE 尚不提供包含这些功能的 Kubernetes 版本。
  • Kubernetes 升级周期。如需维持可靠的环境,请了解如何处理 Kubernetes 升级以及升级周期与 GKE 升级的关系。
  • 节点池。如果您正在使用任何形式的节点分组,则可能需要考虑这些分组如何映射到 GKE 中的节点池概念,因为您的分组条件可能不适合 GKE。
  • 节点初始化。请评估每个节点的初始化方式,然后将其标记为可用于运行工作负载,以便您将这些初始化过程迁移到 GKE。

您在清单中评估的以下内容侧重于基础架构和 Kubernetes 集群的安全性:

  • Namespace。如果您在集群中使用 Kubernetes Namespace 来逻辑分隔资源,请评估每个 Namespace 中有哪些资源,并了解创建这种分隔的原因。例如,您可能会将 Namespace 用作多租户策略的一部分。您可能会在为 Kubernetes 系统组件预留的 Namespace 中部署工作负载,并且在 GKE 中可能不会实施相同的控制措施。
  • 基于角色的访问权限控制 (RBAC)。如果您在集群中使用 RBAC 授权,请列出您在集群中配置的所有 ClusterRole 和 ClusterRoleBinding 的说明。
  • 网络政策。 请列出您在集群中配置的所有网络政策,并了解网络政策在 GKE 中的工作原理
  • Pod 安全政策和上下文。请捕获有关您在集群中配置的 PodSecurityPoliciesPod 安全上下文的信息,并了解它们在 GKE 中的工作原理
  • 服务帐号。如果集群中有任何进程正在与 Kubernetes API 服务器交互,请捕获有关它们正在使用的服务帐号的信息。

完成 Kubernetes 集群清单并评估环境的安全性后,请构建这些集群中部署的工作负载清单。评估工作负载时,请收集有关以下方面的信息:

  • Pod控制器。如需确定新环境中的集群大小,请评估您已部署了每个工作负载的多少个实例,以及您是否正在使用 ResourceQuota计算资源消耗限制。收集有关在每个集群的控制层面节点上运行的工作负载以及每个工作负载使用的控制器的信息。例如,您正在使用多少个 Deployment?您正在使用多少个 DaemonSet
  • 横向 Pod 自动扩缩器。如需在新环境中迁移自动扩缩政策,请了解横向 Pod 自动扩缩器在 GKE 上的工作原理
  • 无状态和有状态工作负载。无状态工作负载不会将数据或状态存储在集群或永久性存储空间中。有状态应用会保存数据供以后使用。对于每个工作负载,请评估哪些组件是无状态组件以及哪些组件是有状态组件,因为迁移有状态工作负载通常比迁移无状态工作负载更困难。
  • Kubernetes 特性。从集群清单中,您可以了解每个集群运行的 Kubernetes 版本。请查看每个 Kubernetes 版本的版本说明,了解它包含哪些特性以及弃用了哪些特性。然后,请根据您需要的 Kubernetes 特性评估您的工作负载。此任务的目的是了解您使用的是已弃用的特性还是尚未在 GKE 中提供的特性。如果您发现任何不可用的特性,请停止使用已弃用的特性,并在 GKE 提供新特性时采用这些新特性。
  • 存储。对于有状态工作负载,请评估它们是否使用 PersistenceVolumeClaim。请列出任何存储要求(例如大小和访问模式),以及这些 PersistenceVolumeClaim 映射到您已评估的 PersistenceVolume 的方式。
  • 配置和密文注入。为了避免每次更改环境配置时重新构建可部署的工件,请使用 ConfigMapSecret 将配置和密文注入 Pod。对于每个工作负载,请评估该工作负载正在使用哪些 ConfigMap 和 Secret,以及如何填充这些对象。
  • 依赖项。您的工作负载可能无法独立运行。它们可能具有依赖项,这些依赖项位于集群内部或者来自外部系统。对于每个工作负载,请捕获依赖项以及您的工作负载能否容忍依赖项不可用的情况。例如,常见的依赖项包括分布式文件系统、数据库、密文分发平台、身份和访问权限管理系统、服务发现机制以及任何其他外部系统。
  • Kubernetes Service。如需将工作负载公开给内部和外部客户端,请使用 Service。对于每个 Service,您需要知道其类型。对于外部公开的服务,请评估该服务与基础架构的其余部分进行交互的方式。例如,您的基础架构如何支持 LoadBalancer 服务Ingress 对象?您在集群中部署了哪些 Ingress 控制器
  • 服务网格。如果您正在环境中使用服务网格,请评估其配置方式。您还需要知道它涵盖多少个集群、哪些服务是该网格的一部分,以及如何修改该网格的拓扑。例如,您是否正在使用自动注入机制自动向该网格添加服务?

评估集群及其工作负载后,请评估基础架构中的其他支持服务和方面,例如:

完成评估

构建与 Kubernetes 集群和工作负载相关的清单后,请完成《迁移到 Google Cloud:评估和发现工作负载》中评估阶段的其余活动。

规划和构建基础

在规划和构建阶段,您需要预配和配置支持 Google Cloud 上的工作负载的云基础架构和服务:

  1. 构建资源层次结构。
  2. 配置身份和访问权限管理。
  3. 设置结算功能。
  4. 设置网络连接。
  5. 强化安全性。
  6. 设置监控和提醒。

如果您已采用基础架构即代码来管理 Kubernetes 环境中的工作负载,则可以对 Google Cloud 环境应用相同的过程。您可以分析 Kubernetes 描述符,因为 GKE 为您自动预配的一些 Google Cloud 资源可使用 Kubernetes 标签注释进行配置。例如,您可以通过向 LoadBalancer Service 添加注释来预配一个内部负载平衡器(而不是外部负载平衡器)。

以下部分依赖于《迁移到 Google Cloud:构建您的基础》

构建资源层次结构

如需设计高效的资源层次结构,请考虑您的业务和组织结构如何映射到 Google Cloud,如《迁移到 Google Cloud:构建您的基础》以及针对生产用途准备 GKE 环境中所述。

例如,如果您需要 GKE 上的多租户环境,可以在以下方式中进行选择:

  • 为每个租户创建一个 Google Cloud 项目。
  • 在不同租户之间共享一个项目,并预配多个 GKE 集群。
  • 使用 Kubernetes 命名空间。

您的选择取决于您的隔离、复杂性和可扩缩性需求。例如,如果每个租户都有一个项目,则租户会彼此隔离,但由于项目数量较多,因此资源层次结构会变得更加复杂,难以管理。不过,虽然管理 Kubernetes Namespace 比复杂资源层次结构相对容易,但此方式并不能保证相同的隔离度。例如,控制平面可能会在租户之间共享。

配置身份和访问权限管理

Identity and Access Management 提供了一些工具,用于集中配置对云资源的精细访问权限控制。如需了解详情,请参阅 Identity and Access Management针对生产用途准备 Google GKE 环境

请查看 Kubernetes RBAC 如何与 Google Cloud 中的身份和访问权限管理进行交互,并根据您在评估阶段收集的要求配置 RBAC。

设置结算功能

在预配任何 Google Cloud 资源之前,请先配置 Cloud Billing 并了解 GKE 价格模式。如需了解详情,请参阅结算

设置网络连接

网络配置是您的环境的基本方面。请评估工作负载的 GKE 网络模型和连接要求。然后,您就可以开始规划您的网络配置。如需了解详情,请参阅连接和网络

强化安全性

了解您的环境的安全模型与 Google Cloud 的模型之间的区别,以及如何强化 GKE 集群的安全性,这一点对于保护您的关键资源至关重要。如需了解详情,请参阅安全性

设置监控和提醒

清楚了解基础架构和工作负载的情况是寻找改进领域的关键。GKE 与 Google Cloud 的运维套件进行了深度集成,因此您可以获取有关 GKE 集群以及这些集群中的工作负载的日志记录和监控信息。如需了解详情,请参阅监控和提醒

部署工作负载

在部署阶段,您将执行以下操作:

  1. 预配和配置您的运行时平台和环境。
  2. 将数据从旧环境迁移到新环境。
  3. 部署工作负载。

以下部分依赖于《迁移到 Google Cloud:转移大型数据集》《迁移到 Google Cloud:部署工作负载》,以及《迁移到 Google Cloud:从手动部署迁移到自动容器化部署》

预配和配置您的运行时平台和环境

在将任何工作负载迁移到新的 Google Cloud 环境之前,请先预配 GKE 集群。

在评估阶段后,您现在已经知道如何在新的 Google Cloud 环境中预配 GKE 集群以满足您的需求。您可以预配以下各项:

  • 集群数量、每个集群的节点数量、集群类型以及每个集群和每个节点的配置。
  • 专用集群的数量。
  • 选择 VPC 原生网络还是基于路由器的网络
  • 您在 GKE 集群中需要的 Kubernetes 版本
  • 用于对 GKE 集群中的节点进行逻辑分组的节点池,以及是否需要使用节点自动预配功能来自动创建节点池。
  • 您可以从现有环境迁移到 GKE 环境的初始化过程以及您可以实现的新过程。例如,您可以通过为集群中的每个节点或节点池实施一个或多个最终具有特权的初始化过程来自动引导 GKE 节点

创建 GKE 集群后,在部署任何工作负载之前,请为每个 GKE 集群预配和配置 Namespace、RBAC、网络政策、ResourceQuotaPodSecurityPolicy

将数据从旧环境迁移到新环境

现在,您可以转移有状态工作负载所需的数据。

《迁移到 Google Cloud:转移大型数据集》包含有关此主题的指南。如果您正计划对工作负载进行现代化改造以应用微服务架构,或者您已采用该架构,请参阅将单体式应用迁移到 GKE 上的微服务。如需详细了解 GKE 上的数据存储选项,请参阅存储配置。例如,您可以使用地区级或跨区域复制Compute Engine 永久性磁盘,也可以使用 Filestore

在迁移数据之前,您需要预配所有必要的存储基础架构。如果您使用的是任何 StorageClass 预配工具,请在新集群中配置存储基础架构。

部署工作负载

如需部署工作负载,请根据您的要求设计和实施部署过程。如果您对部署过程不满意,并希望迁移到更具现代特色的自动化过程,请参阅《迁移到 Google Cloud:从手动部署迁移到容器和自动化部署》。它包含从手动部署迁移到容器编排工具和自动化部署的指南。部署阶段也是对工作负载进行现代化改造的好机会。例如,如果您正在环境中使用任何 Pod,请考虑将这些工作负载迁移到 Deployment

部署过程准备就绪后,您可以将工作负载部署到 GKE

优化您的环境

优化是迁移的最后一个阶段。在此阶段,您将使环境比以前更高效,同时,您将对可重复的循环执行多次迭代,直到您的环境满足优化要求。这种可重复的循环步骤如下:

  1. 评估您的当前环境、团队和优化循环。
  2. 确定优化要求和目标。
  3. 优化您的环境和团队。
  4. 调整优化循环。

以下部分依赖于《迁移到 Google Cloud:优化您的环境》

评估您的当前环境、团队和优化循环

虽然首次评估侧重于从您的环境到 GKE 的迁移,但这里的评估则是针对优化阶段的。

确定优化要求

查看针对 GKE 环境的以下优化要求

  • 实施高级部署过程。诸如 Canary 版部署蓝绿部署之类的过程为您提供了更大的灵活性,并且可以提高环境的可靠性、扩展测试以及减少任何问题对用户的影响。
  • 配置服务网格。通过在环境中引入服务网格,您可以将可观测性、流量管理和双向身份验证等特性用于您的服务,并为 DevOps 团队减少压力。您可以部署多集群服务网格以更好地细分工作负载,或者部署扩展服务网格以支持迁移到新环境
  • 设置自动扩缩。您可以使用不同的补充选项来自动扩缩 GKE 环境。您可以自动扩缩集群以及每个集群内的工作负载。通过配置集群自动扩缩器,您可以根据工作负载的需求来自动调整 GKE 集群的大小,方法是:向集群添加工作器节点或者从集群移除工作器节点。如果要自动扩缩工作负载,您可以使用 Pod 纵向自动扩缩器调整 CPU内存消耗请求和限制。使用自动扩缩器时,您不必考虑为每个容器的 CPU 和内存请求指定的值。
  • 使用抢占式虚拟机降低费用。如果您的某些工作负载能够容忍没有可用性保证的运行时环境,请考虑在由抢占式虚拟机组成的节点池中部署这些工作负载。抢占式虚拟机的价格低于标准 Compute Engine 虚拟机,因此您可以降低集群的费用。
  • 将 GKE 与其他产品集成。一些 Google Cloud 产品可以与 GKE 集成,以强化环境的安全性。例如,您可以分析容器中的漏洞或者在 Container Registry 中使用托管式基础映像

虽然您可以在 Kubernetes 环境中满足其中一些优化要求,但在 GKE 中更容易满足这些要求,因为您不必花费精力来保持集群运行。相反,您可以专注于优化本身。

完成优化

填充优化要求列表后,请完成优化阶段的其余活动

后续步骤