K8s/Kubernetes:AWS与Kubernetes的对比。GCP对决。蔚蓝

764 阅读19分钟

后端

11分钟阅读

K8s/Kubernetes。AWS vs. GCP vs. Azure

Guillaume Dury

在亚洲的创业公司工作多年,Guillaume掌握了Docker和Kubernetes,然后在2019年推出了自己的云咨询公司。

SHARE

Kubernetes(通常被称为 "K8s")在几年前赢得了容器编排工具的战斗。尽管如此,今天仍然有许多方法来实现Kubernetes,并使其与各种基础设施和许多工具一起工作--有些工具比其他工具维护得更好。不过,在这方面最有趣的发展是,顶级云供应商已经决定发布他们自己的管理型Kubernetes版本。

  • 微软Azure提供Azure Kubernetes服务(AKS)。
  • AWS提供了亚马逊弹性Kubernetes服务(EKS)
  • 谷歌云提供谷歌Kubernetes引擎(GKE)。

从DevOps的角度来看,这些平台能提供什么?它们是否达到了它们的承诺?它们的创建时间和其他基准如何比较?它们与各自的平台,特别是CLI工具的整合程度如何?维护和使用它们是什么感觉?下面,我们将深入探讨这些问题,以及更多。

注:对于那些希望在阅读之前解释Kubernetes集群的概念的读者,Dmitriy Kononov提供了一个很好的介绍

AKS vs. EKS vs. GKE:宣传的功能

我们决定将每个管理的Kubernetes版本所提供的不同功能归纳为几个仓。

  • 全球概览
  • 联网
  • 可扩展性和性能
  • 安全和监控
  • 生态系统
  • 价格

注:由于云供应商定期更新其产品,这些细节可能会随着时间的推移而改变。

全球概览

服务展望AKSEKSGKE
发布年份201720182014
最新版本1.15.11 (默认) - 1.18.2 (预览)1.16.8 (默认)1.14.10 (默认) - 1.16.9
特定组件oms-agent, tunnelfrontaws-nodeFluentd, fluentd-gcp-scaler, event-exporter, l7-default-backend
Kubernetes控制平面升级手册手动自动(默认)或手动
工作器升级手动是(使用管理的节点组很容易)。是的:自动和手动,可以进行微调
服务水平协议99.95%的可用性区域,99.9%的非可用性区域EKS(主站)为99.9%,EC2(节点)为99.99%。一个区域内99.95%,一个地区内99.5%。
本地Knative支持不支持不支持没有(但本地Istio安装)。
Kubernetes控制平面价格免费0.10美元/小时0.10美元/小时

Kubernetes本身是谷歌的项目,所以他们在2014年率先提出托管版本是合理的。

在这里比较的三家中,Azure是接下来的AKS,并且有一些时间来改进。如果你还记得几年前在Azure上用于配置Kubernetes的acs-engine,你会欣赏微软在其替代品aks-engine上的努力。

AWS是最后一个推出自己的版本EKS的,所以它有时会在功能方面显得落后,但他们正在追赶。

当然,在定价方面,事情总是在发展,谷歌决定加入AWS,其价格点为0.10美元/小时,2020年6月生效。Azure是这里的局外人,它免费提供AKS服务,但目前还不清楚这可能持续多久。

另一个主要区别在于集群的升级功能。最自动化的升级是在GKE中,而且是默认开启的。然而,AKS与EKS在这里是相似的,即都需要手动请求才能升级主节点或工作节点。

联网

服务展望AKSEKSGKE
网络策略是:Azure网络策略或Calico需要安装Calico是:通过Calico进行本地安装
负载平衡基本或标准 SKU 负载平衡器经典和网络负载平衡器容器原生负载平衡器
服务网没有开箱即用的AWS App Mesh(基于Envoy)。Istio(开箱即用,但为测试版)
DNS支持CoreDNS定制VPC内的CoreDNS + Route53CoreDNS + Google Cloud DNS

在网络方面,这三家云计算供应商彼此非常接近。例如,他们都让客户用Calico实施网络策略。关于负载平衡,他们都实现了与自己的负载平衡器资源的整合,并让工程师选择使用什么。

这里发现的主要区别是基于服务网的附加值。AKS不支持任何开箱即用的服务网(尽管工程师可以手动安装Istio)。AWS已经开发了自己的服务网状结构,称为App Mesh。最后,谷歌已经发布了自己与Istio的集成(尽管仍处于测试阶段),客户可以在创建集群时直接添加。

最佳选择:GKE

可扩展性和性能

服务网(ServiceAspectAKSEKSGKE
裸金属节点没有没有
每个群集的最大节点数1,0001,0005,000
高可用性群集没有对控制计划来说是的,对工人来说是手动跨亚利桑那州的。是的,通过区域集群,主站和工作站被复制。
自动扩展是的,通过集群自动缩放器是的,通过集群自动缩放器是的,通过集群自动缩放器
垂直吊舱自动调节器没有
节点池是的
GPU节点是的
内部部署可通过Azure ARC(测试版)使用没有通过Anthos GKE的内部GKE

在GKE与AKS与EKS的性能和可扩展性方面,GKE似乎处于领先地位。事实上,它支持最大数量的节点(5000个),并提供大量关于如何正确扩展集群的文档。所有的高可用性的功能都是可用的,而且很容易微调。更重要的是,GKE最近发布了Anthos,这是一个围绕GKE及其功能创建生态系统的项目;通过Anthos,你可以在企业内部部署GKE。

不过,AWS确实有一个关键的优势:它是唯一允许裸机节点运行你的Kubernetes集群的。

截至2020年6月,AKS缺乏主控的高可用性,这是一个需要考虑的重要方面。但是,像往常一样,这可能很快就会改变。

最佳选择:GKE

安全和监控

服务展望AKSEKSGKE
应用秘密加密没有是的,可以通过AWS KMS是的,可以通过云KMS
遵守规定IPA、SOC、ISO、PSI DSSIPAA、SOC、ISO、PSI DSSIPAA、SOC、ISO、PSI DSS
RBAC是的,并与IAM紧密结合
监控Azure Monitor容器健康功能Kubernetes控制面监控与Cloudwatch连接,节点的Container Insights MetricsKubernetes引擎监控并与Prometheus集成

在合规性方面,这三个云供应商都是同等的。然而,在安全方面,EKS和GKE通过其嵌入式密钥管理服务提供了另一层安全。

至于监控,Azure和谷歌云围绕Kubernetes提供自己的监控生态系统。值得注意的是,谷歌的那个系统最近已经更新,使用专门为Kubernetes设计的Kubernetes引擎监控。

Azure提供了自己的容器监控系统,该系统最初是为基本的、非Kubernetes容器生态系统制作的。他们已经增加了对一些Kubernetes特定指标和资源(集群健康、部署)的监控--在预览模式下,截至2020年6月。

AWS直接在Cloudwatch中为控制平面提供轻量级的监控。为了监控工人,你可以使用Kubernetes Container Insights Metrics,它是通过一个特定的CloudWatch代理提供的,你可以安装在集群中。

最佳选择:GKE

生态系统

ServiceAspectAKSEKSGKE
市场Azure市场(但没有明确的AKS整合)。AWS市场(250多个应用程序)谷歌市场(90多个应用程序)
基础设施即代码(IaC)支持Terraform模块
Ansible模块Terraform模块
Ansible模块Terraform模块
Ansible模块
脚本弱,但完整和强大的社区(2,000+ Stack Overflow帖子)。不太全面,但社区很强大(1500多个Stack Overflow帖子)。广泛的官方文档和非常强大的社区(4,000+ Stack Overflow帖子)。
CLI支持完整的完整的,加上特殊的独立工具eksctl (如下所述)。完整的

在生态系统方面,这三个供应商有不同的优势和资产。AKS现在有非常完整的围绕其平台的文档,并且在Stack Overflow上的帖子数量上位居第二。EKS在Stack Overflow上的帖子数量最少,但得益于AWS市场的力量。GKE作为最古老的平台,在Stack Overflow上的帖子最多,其市场上的应用数量也不少,但也是最全面的文档。

最好的赌注。GKE和EKS

价格

服务展望AKSEKSGKE
免费使用上限价值170美元不符合免费级别的条件价值300美元
Kubernetes控制平面费用免费0.10美元/小时0.10美元/小时(2020年6月)
减价(现货实例/可抢占的节点)是的是的
一个月的价格示例$342
3个D2节点300美元
3个T3.大型节点$190
3个n1-standard-2节点

关于整体价格,即使GKE对任何集群实施0.10美元/小时的价格点,它仍然是迄今为止最便宜的云。这要归功于谷歌特有的东西--持续使用折扣,只要每月的按需资源使用量达到一定的最低限度,就会有折扣。

值得注意的是,这个例子的价格行没有考虑到云提供商可以收取的对Kubernetes集群的流量。

AWS不允许使用他们的免费层来测试EKS集群的原因是,EKS需要比tX.micro层更大的机器,而且EKS每小时的价格不在免费层中。

尽管如此,使用每个云提供商的现货/可抢占节点,在适当的负载下测试任何这些管理的Kubernetes选项仍然是经济的--这种策略将很容易在最终价格上节省80%到90%。(当然,不建议在这种机器上运行有状态的生产负载!)。

广告中的功能和谷歌的优势

当在网上看不同的广告功能时,似乎管理的Kubernetes版本在市场上的时间长短和功能的数量之间存在着关联。如前所述,谷歌是Kubernetes项目的发起者,这似乎是一个不可否认的优势,导致其与自己的云平台更好、更强的整合。

但AKS和EKS在成熟后也不容小觑;两者都可以利用其独特的功能。例如,AWS是唯一拥有裸机节点集成的公司,同时也拥有其市场上最多的应用。

现在,每个Kubernetes产品的广告功能都很清楚了,让我们通过一些实际测试来做一个更深入的研究。

Kubernetes。AWS vs. GCP vs. Azure的实践

广告是一回事,但当涉及到服务生产负载时,不同的平台是如何比较的?作为一名云计算工程师,我知道在执行 "基础设施即代码 "时,生成和关闭集群所需时间的重要性。但我也想探索每个CLI的可能性,并评论每个云提供商使集群产生的容易程度(或不容易)。

集群创建的用户体验

AKS

在AKS上,生成集群与在AWS上创建实例相似。只要找到AKS的菜单并通过一系列不同的菜单就可以了。一旦配置得到验证,就可以创建集群,这是一个两步的过程。这是非常直接的,工程师们可以轻松快速地用默认设置启动一个集群。

EKS

EKS与AKS相比,集群的创建肯定更复杂。首先,默认情况下,AWS需要先去IAM为Kubernetes控制平面创建一个新的角色,并将工程师分配给它。还需要注意的是,这个集群的创建并不包括节点的创建,所以当我测得平均11分钟时,这仅仅是主控创建。节点组的创建是管理员的另一个步骤,同样需要一个工人的角色,并通过IAM控制面板制定三个必要的政策。

GKE

对我来说,在GKE上手动创建集群的体验是最愉快的。在Google Cloud Console中找到Kubernetes Engine后,点击创建一个集群。不同类别的设置出现在左边的菜单中。谷歌将为新集群预置一个易于修改的默认节点池。最后但并非最不重要的是,GKE拥有最快的集群生成时间,这让我们看到了下一个表格。

生成一个集群的时间

服 务 方 面AKSEKSGKE
规模3个节点(Ds2-v2),每个节点有2个vCPUs,7GB的RAM3个节点t3.large3个节点n1-standard-2
时间 (m:ss)一个完整的集群平均5:45主站11:06,节点组2:40(整个集群共13:46)。整个集群的平均时间为2:42

我在同一地区进行了这些测试(法兰克福和西欧的AKS),以消除这种差异对产卵时间的可能影响。我还试图为集群选择相同大小的节点。三个节点,每个节点有两个vCPUs和7或8GB的内存,这是一个标准的大小,可以在Kubernetes上运行一个小的负载并开始实验。我为每个集群创建了三次,以计算出平均数。

在这些测试中,GKE仍然遥遥领先,其生成时间总是低于三分钟。

Kubernetes。AWS vs. GCP vs. Azure CLI概述

不是所有的CLI都是一样的,但在这种情况下,所有三个CLI实际上都是一个更大的CLI的模块。使用每个云提供商的CLI工具链启动和运行是怎样的?

AKS CLI(通过az

在安装了az 工具,然后是AKS模块(通过az aks install-cli )之后,工程师需要授权CLI与项目的Azure账户进行通信。这是一个通过简单的az aks get-credentials --resource-group myResourceGroup --name myAKSCluster ,获得更新本地kubeconfig文件的凭证的问题。

同样地,要创建一个集群。az aks create --resource-group myResourceGroup --name myAKSCluster

EKS CLI (通过awseksctl)

在AWS上,我们发现一个不同的方法--有两个不同的官方CLI工具来管理EKS集群。一如既往,aws 可以连接到AWS资源,特别是集群。获取本地kubeconfig的凭证可以通过:aws eks update-kubeconfig --name cluster-test

然而,工程师们也可以使用由Weaveworks开发、用Go语言编写的eksctl ,来轻松创建和管理EKS集群。EKS为云计算工程师提供的一个主要好处是,他们可以将其与YAML配置文件相结合,创建基础设施即代码(IaC),因为它与CloudFormation合作。当把EKS集群整合到AWS上更大的基础设施中时,这绝对是一个值得考虑的资产。

通过eksctl 创建集群和eksctl create cluster 一样简单,不需要其他参数。

GKE CLI (通过gcloud)

对于GKE,步骤非常相似:安装gcloud ,然后通过gcloud init 进行认证。从这里可以看到各种可能性。工程师可以创建、删除、描述、获取证书、调整大小、更新或升级集群,或者列出集群。

gcloud 创建一个集群的语法是很简单的。gcloud container clusters create myGCloudCluster --num-nodes=1

AKS vs. EKS vs. GKE:试驾结果

在实践中,我们可以看到,无论从控制台的简易性还是集群的生成时间来看,GKE无疑是启动一个基本集群最快的。从用户体验上看,集群旁边的连接按钮,使得它也是最直接的连接到一个集群。

在CLI工具方面,这三家云计算供应商都实现了类似的功能;但是,我们可以把压力放在Weaveworks为EKS提供的额外工具上。eksctl ,是你在已有的AWS基础设施上实现基础设施即代码的完美工具,将其他服务与EKS相结合。

管理型Kubernetes产品向前发展。AWS vs. GCP vs. Azure

对于那些刚刚开始接触Kubernetes的人来说,我的首选是GKE,因为它是最直接的。它很容易设置,它有一个简单而快速的用户体验来催生,而且它很好地整合到了谷歌云平台的生态系统中。

尽管AWS是最后加入竞争的,但它有一些不可否认的优势,比如裸机节点,以及它与拥有最大心智份额的供应商整合的简单事实。

最后,AKS自创建以来已经取得了巨大的进步。工具和功能的平等可能不会花很长时间,同时在这个过程中留下创新的空间。与任何管理的Kubernetes产品一样,对于那些已经在母平台上的人来说,整合将是一个卖点。

一旦一个团队选择了一个Kubernetes云供应商,看看其他团队的经验,尤其是失败的经验,可能会很有趣。这些事后总结是对现实世界案例的反映--永远是发展自己的前沿最佳实践的一个好起点。我期待着你在下面的评论!

相关的。 Kubernetes服务网格的比较

了解基础知识

什么是容器编排?

容器编排是对围绕运行容器的所有资源的管理和抽象:配置、资源、扩展、监控、网络和工具。Kubernetes是业界最广泛采用的容器编排工具之一。

为什么我们需要容器编排?

我们需要容器编排,以便能够有效地管理和组织在服务器上运行的容器群。通过容器编排,我们可以建立可扩展的、有弹性的、以容器为中心的强大系统,以部署任何应用程序。

使用Kubernetes的容器编排的好处是什么?

与Kubernetes一起使用容器协调的好处是在服务器之上提供一个抽象层来运行你的容器。通过Kubernetes,你能够有效地管理配置和资源,并根据需要轻松地扩展你的基础设施。

到底什么是Kubernetes?

Kubernetes是一个开源工具,是在谷歌项目Borg的基础上开发的。它是一个生产级的容器编排工具,在服务器上创建了一个抽象层,允许轻松管理容器的扩展、监控、资源使用、网络和配置。

标签

淘宝网上卖的是什么?

自由职业者? 寻找你的下一份工作。

Kubernetes专家工作

[

查看完整资料

](www.toptal.com/resume/guil…)

纪尧姆-杜里

DevOps工程师和开发人员

关于作者

Guillaume是一位经验丰富的DevOps工程师,他一直在寻找改善自动化的方法,以帮助开发人员更快地交付。怀着创业的心态,他随时准备接受新的挑战。他对快节奏环境的喜好使他来到香港,在那里他为两家初创公司和一家对冲基金的网络应用程序建立了基础设施。

聘请纪尧姆

评论

纪尧姆-杜里

嗨,奥利弗,谢谢你的评论。事实上,AWS提供了Container Insights来监控你的工人和它的资源。我已经相应地更新了表格,提到了AWS的这个解决方案。我不知道CloudPosse的terraform模块,这听起来很有趣,会去看看的。干杯

纪尧姆-杜里

嗨,Jorge,你是对的,这一栏的小插曲,现在已经修好了:)谢谢你的评论!

Kevin Bloch

谢谢你的建议。如上所述,本文旨在关注三个最大的云供应商,而不是详尽无遗。

Jorge Galvis

谢谢你的这篇文章。如果我说错了,请纠正我,但看起来第一个表的EKS和GKE列的数值是混合的。

Tuncay Demirtepe

谢谢你的比较,这非常有用。你能不能把Digital Ocean加入你的比较中。可能是与 "三巨头 "最大的区别,他们目前的版本是1.18.3,令我惊讶的是它甚至比GKE还要高。一些比较点。- 免费控制平面 - 一个月的成本(3 x 8 GB Ram + 4 cpu pod)。$120

Oliver Schoenborn

很好的文章,谢谢你写的这篇文章!通过Prometheus进行的AWS监控正在测试中。关于这一点:"AWS为控制平面提供了轻量级的监控,但监控工人内部的资源需要第三方设置。"AWS现在提供Container Insights作为Cloudwatch的一部分,易于安装,提供对节点、pods、命名空间的CPU和内存等指标的监控。还有容器日志和日志洞察力,这很像GCP的stackdriver IIRC。虽然我发现由API(kubectl或dashboard)提供的日志对大多数任务来说更容易,但当你需要过滤几个容器的日志时,我可以看到学习Insights的查询语言是很有用的。最后,我发现CloudPosse的terraform模块在使用IaC配置EKS集群时超级容易使用,甚至支持AWS与IAM的整合,这意味着你可以对pod能做什么和不能做什么进行强大的控制。

Kevin Bloch

好问题。不仅仅是OpenShift,还有很多其他的CSP提供管理Kubernetes服务。但本文意在关注三个最大的云供应商,而不是详尽无遗。

马特-福克斯

OpenShift怎么样?

请启用JavaScript以查看由Disqus提供的评论。评论由Disqus提供

世界级的文章,每周送上。

获取精彩内容

订阅意味着同意我们的隐私政策

谢谢您!
请查看您的收件箱以确认您的邀请。

趋势文章

工程图示Chevron后端

使用Express.js路由进行基于承诺的错误处理

工程图示 ChevronWeb前端

企业应用的最佳React状态管理工具

工程图示 ChevronBack-end

使用AWS SSM进行SSH日志和会话管理

工程图ChevronTechnology

明尼苏达大学的Linux禁令引发了对开源的质疑

查看我们的相关人才

KubernetesAWSAWSCloudAWSDevOpsAzureDevOpsDockerGoogleCloudGoogle云平台

自由职业者? 寻找你的下一份工作。

Kubernetes专家工作

聘请作者

[

查看完整资料

](www.toptal.com/resume/guil…)

纪尧姆-杜里

DevOps工程师和开发人员

阅读 下一页

工程图示Chevron后端

使用Express.js路由进行基于承诺的错误处理