作为一个用于自动化容器化应用程序的部署,扩展和管理的开源系统,Kubernetes的受欢迎程度非常高。越来越多地云提供商开始提供将Kubernetes作为托管和托管服务的平台。
在本文中,我们将介绍托管和自托管服务之间的一些差异,并分析目前可用的五种流行服务:Google的Kubernetes引擎,Azure Kubernetes服务(AKS),亚马逊针对Kubernetes的弹性容器服务(Amazon EKS),以及IBM的云容器服务和Rackspace。
托管与自托管
Kubernetes是业界领先的开源容器编排框架。由谷歌创建,目前由云原生计算基金会(CNCF)维护,由于其处理大型集群的能力,成为了容器市场的香饽饽。目前,由于其活跃的社区和功能集,它正被企业,政府,云提供商和供应商采用。
如果你没有一定的专业技术知识积累,自托管Kubernetes可能会非常困难。在多台计算机上有大量的网络,服务发现设置和Linux配置。此外,由于Kubernetes管理你的整个基础架构,你必须更新它以防止攻击。从版本1.8开始,Kubernetes提供了一个名为kubeadm的工具,允许用户在一台机器上运行Kubernetes以进行测试。
另一方面,如果你选择托管或管理Kubernetes,则不需要了解很多或者对基础架构有很多经验。只需要在云提供商中订阅,它就会部署并保持所有内容的运行和更新。
当你准备扩展到更多计算机和更高的可用性时,会发现托管解决方案是最容易创建和维护的,并且有可供选择的全部可能性和服务。以下,我们也将讨论市场上最主流的托管服务并逐一进行分析。
托管服务
这里选择了五个托管服务,并将分别对它们进行分析,并将它们与一些流行的Kubernetes功能进行比较,以便你自己决定。
谷歌的Cloud Kubernetes引擎
Google的Kubernetes引擎是Kubernetes最早托管的服务之一。由于Google是Kubernetes的最初创建者,因此它是最先进的Kubernetes管理者之一,具有广泛的功能。
Azure Kubernetes服务(AKS)
Azure KubernetesService是用于托管Kubernetes的微软解决方案。该服务最近向公众开放,但微软此前提供了一个名为Azure容器服务的旧版托管服务。使用较旧的服务,用户可以在Kubernetes,DC/OS和Docker Swarm之间进行选择,但它没有Kubernetes在其新服务上可用的详细程度。
亚马逊针对Kubernetes的弹性容器服务(Amazon EKS)
亚马逊的EKS是最新的服务之一。最近,亚马逊接受了创建自己的托管Kubernetes实例而非专有实例的挑战。该服务经过Kubernetes认证,可以在一个集群中管理多个AWS区域。
IBM的云容器服务
IBM的云容器服务自2018年3月开始提供,因此它是主要云上可用的最早管理的服务之一。尽管名头不如以上的三个那么大,但IBM Cloud正在快速增长。
Rackspace KAAS
Rackspace Kubernetes即服务于2018年6月推出,仍然具有许多最佳的Kubernetes功能,Rackspace是一家多云咨询公司,因此可以通过许多其他云提供多云可移植性等解决方案。
托管服务比较
我选择了一些Kubernetes特性,并比较了它们在每个托管服务上的实现方式。
自动更新
要将集群版本更新为最新版本,需要使用自动更新。Google Cloud提供自动更新,无需手动操作,Azure和IBM提供按需版本升级。自从推出最新版本(v1.10)以来,AWS和Rackspace将如何运作尚不清楚。
负载平衡和网络
有两种类型的负载平衡:内部和公共服务。顾名思义,内部负载均衡在容器实例之间分配调用,而公共负载实例将容器实例分发到外部集群。
本机负载平衡意味着将使用自己的云架构而不是基于软件的内部负载平衡来服务。图2显示了一个Azure仪表板,其中包含Kubernetes解决方案使用的云本地负载均衡。
自动扩展
Kubernetes可以本地扩展容器实例以解决性能瓶颈,这是其主要功能之一,并且是任何Kubernetes托管或自托管版本的一部分。然而,当根据资源利用率增加或减少在集群上运行的节点(VM)的数量时,只有少数托管服务提供解决方案。
自动扩展解决方案提供了一种在白天工作负载变化时降低集群成本的简便方法。例如,如果你的应用程序主要在商业时间使用,Kubernetes会增加节点数以在高峰时段提供更多CPU和内存,而在高峰时段后减少到仅一个节点。如果没有自动扩展,则必须手动更改节点数或将其保留为高(并支付更多)以便能够处理高峰时段。
Google Cloud提供了一种更简单的解决方案:可以调整GUI或CLI,指定VM大小以及最小和最大节点数。其他一切都由提供商管理。亚马逊EKS排名第二,它使用AWS自己的自动扩展器,可用于其云端的任何内容,但与Google Cloud相比,配置起来更加困难。Azure缺少此功能,但Kubernetes本身提供的名为Kubernetes autoscale的工具可为你提供所需的一切。遗憾的是,IBM和Rackspace云不提供此功能。
节点池
节点池是有用的Kubernetes功能,允许你在集群中使用不同类型的计算机。例如,数据库实例需要更快的存储,而CPU重型软件则根本不需要更快的存储。
谷歌云拥有此功能,亚马逊EKS也在追赶。Azure在其路线图上有,并承诺它将在今年年底交付。目前,IBM和Rackspace没有关于何时可用的信息。
多个区域
多个区域允许集群位于世界上的多个区域中。这样可以降低每个请求的延迟,有时还可以降低成本。可以将集群配置为指示附近节点响应请求。
目前,只有Google Cloud和IBM云提供多个区域。
RBAC
基于角色的访问控制(RBAC)为管理员提供了一种通过Kubernetes的API动态配置策略的方法。所有评估的托管服务都提供RBAC实现。
裸金属集群
虚拟机是位于计算机和物理硬件之间的仿真层中的计算机。这种高度优化的层,增加了计算消耗。在便携性和沙箱方面,容器类似于VM,但它们可以直接接触硬件,这是一个巨大的优势。
裸金属机器只是出租的物理硬件。它们的部署非常复杂,并且由于运营成本较高,付款与VM不同。目前,只有三个云提供商允许集群节点成为裸机:IBM,Rackspace和AWS。
结论
Kubernetes是DevOps的一个新起点。因此,几乎所有主要的云提供商都在竞相为Kubernetes提供更好,更简单的解决方案。管理Kubernetes本身可能既困难又昂贵,任何程度的自动管理都可以充分降低成本并提高可靠性。
使用Kubernetes还提供了一种避免供应商锁定解决方案的有效方法:由于每个云提供商都已拥有自己的Kubernetes实例,因此在维护所有脚本的同时更容易更改提供程序。
由于Google的领导地位和Kubernetes的参与,GoogleCloud对于任何新集群都是一个不错的选择:大多数功能从一开始就可用,并且可以快速应用新的更新。对于较大的部署,请尝试避免忽略节点组的服务,每个镜像都有不同的要求,这些要求将更适合不同的计算机。对于CPU绑定流程(例如批处理或大数据分析),提供裸机(例如IBM和Rackspace)的解决方案可能会提供更好的性能。