从 Amazon ECS 迁移到 EKS 可能是您最不想花时间做的事情。

然而,你来了。因此,ECS 很可能没有完全为您服务。或者您可能好奇是否应该开始计划迁移以及需要多长时间。

我将尝试回答您的大部分问题,从您是否应该查看 EKS 到您做出决定时的一些实际迁移和 EKS 管理技巧。

为什么要从ECS迁移到EKS?

想要在 Kubernetes 中取得进步的公司最好使用 EKS。亚马逊、汇丰银行、摩根大通和 Delivery Hero 等巨头都使用 EKS,因为它提供了控制力和灵活性。

ecs 与 eks

1.可移植性

虽然 ECS 是 AWS 专有技术,但 EKS 基本上是由 AWS 开发和维护的 Kubernetes 即平台服务。 EKS 集群实际上是可移植的,您可以使用 vanilla K8s 在本地环境、开发环境等上重新创建类似的体验。因此,您大概可以判断在哪种情况下您将面临云供应商锁定的风险。

如果您在 ECS 中构建和运行应用程序,从长远来看,您可能会遇到供应商锁定问题。如果您决定使用其他提供商,则必须定义整个架构以匹配它。

这就是为什么将您的应用程序设计为在 EKS 上运行会给您带来更大的灵活性。 EKS 的抽象层可帮助您打包容器并将它们快速移动到另一个平台。这样一来,您就可以在任何其他 Kubernetes 集群上运行工作负载——无论是本地还是为您提供最优惠价格的云提供商。

最重要的是,您可以在市场上找到允许您在不同托管 Kubernetes 服务之间无缝切换的解决方案。

开源和社区是与此相关的两个重点。

使用 EKS,您可以在其上构建大量工具,并且社区本身正在迅速发展。你知道这意味着什么——你会得到很多支持,因为许多问题已经有了解决方案。

开源还允许您选择您的工具,而在 ECS 中,一切都非常固执己见,最终没有多少灵活性。

2.网络限制

Amazon ECS 允许用户仅使用一种网络模式为任务分配弹性网络接口 (ENI):awsvpc。通常,每个 EC2 实例只能获得 8-15 个网络接口,但 ECS 也支持具有更高限制的容器(只要您满足特定的先决条件)。总的来说,每个 EC2 实例最多可以运行 120 个任务。

在 EKS 中,您可以享受更大的网络灵活性。您可以在多个 Pod 之间共享一个 ENI,并为每个实例放置更多 Pod。

3.命名空间

命名空间很方便,因为它们隔离了在同一个 Kubernetes 集群中运行的工作负载。例如,您可以在一个集群中拥有开发、登台和生产环境。它们都可以共享集群的资源。

问题是,您不能在 ECS 中使用命名空间。解决方案只是不将它们作为一个概念包括在内。与此相反,EKS 允许您像在自我管理的 Kubernetes 中一样使用它们。

4.没有配置灵活性

很多人选择ECS是因为它很简单。但要为此付出代价 - 即有限的配置选项。例如,您无法访问集群节点,这限制了您的故障排除能力。

如果您将 ECS 与 Fargate 一起使用,请为更多限制做好准备。例如,您无法像在 EKS 中那样轻松地将特定于环境的配置与容器映像分离以实现可移植性。

ECS 到 EKS 词汇表

在从 ECS 迁移到 EKS 之前,您需要熟悉一些 Kubernetes 常用的术语:

  • ECS 与 K8s 构建块 - 这是最好的入门位置,回顾ECS和Kubernetes的构建块将帮助您了解这两者之间的区别。

  • EKS 工作节点 - 这是运行您的工作负载 (Pod) 的 EC2 实例。

  • IaC - 基础设施即代码 - 这些工具允许您在通常提交到 Git 存储库的代码中定义基础设施。除此之外,只要您的代码与云中的基础设施不匹配,您就会获得类似 Git 的差异输出。示例包括Pulumi、Terraform和AWS CloudFormation

  • Helm- Kubernetes 世界中最流行的打包解决方案。

  • ALB - 应用程序负载均衡器。

  • NLB - 网络负载平衡器。

  • 互联网网关- 互联网网关是一个水平扩展、冗余且高度可用的 VPC 组件,允许您的 VPC 和互联网之间进行通信。

  • VPC- Amazon Virtual Private Cloud (Amazon VPC) 使您能够将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络与您在自己的数据中心中运行的传统网络非常相似,具有使用 AWS 的可扩展基础设施的优势。

ECS 附带您可能熟悉的自己的术语。以下是不同的 ECS 概念如何转化为 EKS 世界。

  • ECS 任务定义 <> EKS Kubernetes 部署 YAML

  • ECS 任务 <> EKS Kubernetes Pod

  • ECS 集群 <> EKS 集群

如果您在此处需要更多指导,可以查看ECS Workshop和EKS Workshop的一些很好的资源。

使用 EKS 可以获得什么

对于正在运行的每个工作负载,您可能不需要 pod。但你不能否认它们提供了对 pod 放置和资源共享的无与伦比的控制。当您处理大多数基于服务的架构时,这非常有价值。

EKS 为管理底层资源提供了更大的灵活性。您可以在 EC2 实例、Fargate 甚至本地(通过 EKS Anywhere)上运行集群。

如果您熟悉 Kubernetes 并希望亲身体验它提供的灵活性和功能,请选择 EKS。

如何从ECS迁移到EKS

ecs 架构

Kubernetes 架构

AWS 有一些关于迁移到 EKS的好技巧。

但我们发现在您的 ECS 到 EKS 迁移之前您需要注意一些其他事项。

1.将 ECS 任务定义文件重写为 K8s 部署 YAML

首先,您需要将 ECS任务定义文件重写为 Kubernetes部署 YAML。这部分是不可避免的,并且与 ECS 和 EKS(或 vanilla Kubernetes)之间的最大区别之一有关。

ECS 到 EKS 迁移

2.启动你的环境

您还需要启动 EKS 上的相应环境版本。人们通常选择使用基础设施即代码 (IaC) - 使用 Terraform、CloudFormation 或 Pulumi。好消息:最流行的 IaC 工具支持 EKS。

假设您已经熟悉 Docker 并已打包应用程序映像并可供使用:

  • 您可以使用 Terraform(或替代 IaC 工具)的功能,例如kubernetes 提供程序将您的部署 YAML 作为 IaC 流程的一部分发送。

  • 如果您的应用程序包使用 Helm,您也可以使用Helm Provider。

  • 或者,您可以使用 CloudFormation,它允许将工作负载部署到 EKS 集群,假设您的应用程序是使用 Helm 打包的。

您可以通过更多方式获得上述工作 - 每种方式都有其优点和缺点。但是这个简单的解决方案现在就足够了。

3.配置 CI/CD 管道

您需要执行此操作才能将您的应用程序部署到 EKS 集群中。

4.联网

ECS 和 EKS 都支持类似的网络功能:ALB 和 NLB。您可以在 ECS 中使用您当前熟悉的基本网络结构。如果您正在寻找有关 ALB 入口的更多详细信息,这篇文章可能会派上用场。

5.运行一些测试

针对新配置运行测试套件以确保一切正常。

6.将您的流量切换到 EKS 集群

这可能因您的配置而异,但为了让您了解需要做什么:

  • 您可以切换您的域指向的 IP,使其指向您的 EKS 集群使用的负载均衡器。这是您确保您的应用程序流量现在指向 EKS 集群的方式。

  • 对于有状态的应用程序,你还需要考虑其他的事情,比如确保基于K8s的应用程序转换为数据库的主用户(从使用数据库的ECS平滑切换到使用数据库的EKS应用程序)用于写作)。

通过自动化让您的 EKS 之旅更轻松

配置和运行 EKS 并不难。这就是所有托管 Kubernetes 工具的用途。

例如,CAST AI 带有固执己见的 Kubernetes 实施,可帮助您管理所有基础设施的复杂性:

  • 专注于你最感兴趣的高水平工作。

  • 创建和管理 CAST Al 组件很容易 - 您可以通过 API 和 Terraform 来实现基础设施生命周期管理的自动化。

  • 您可以使用余量策略简化自动缩放,以适应突然的需求高峰。

  • 并自动化现场实例使用以进一步降低成本。如果现货可用性减少,您的工作负载会自动转移到按需实例,并且永远不会停止。

  • 总而言之,您将从自动化的云成本优化中受益——该平台选择最具成本效益的 AWS 实例类型和大小,并提供详细的成本报告。

如果您想了解这在现实生活中是如何运作的,以下是电子商务机构 Snow Commerce 如何迁移到 EKS,现在通过完全自动化的环境无缝推出应用程序。

了解 CAST AI 在现实生活中的工作原理

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐