【51CTO.com快译】容器在改变公司构建和运行其应用程序和基础架构的方式。随着容器变得越来越普遍,它们引入了更动态的基础架构,并带来了各种各样的支持技术。我们在本报告中分析了成千上万Datadog客户运行的逾15亿个容器,揭示哪些技术、编程语言和编排实践在实际容器环境中受到追捧。
随着更多的公司将生产工作负载迁移到容器,Kubernetes和亚马逊弹性容器(ECS)之类的编排平台已成为容器生态系统不可或缺的一部分。如果目前的趋势继续下去,很快大多数运行容器的公司会在某种程度上使用Kubernetes。但是Kubernetes并非唯一的玩家。对于AWS客户而言,得益于ECS的Fargate计算引擎迅速得到采用,ECS仍是同样大受欢迎的选择。
不妨从最新的实际使用情况数据了解更多的见解和趋势。
趋势1:Kubernetes继续稳步上升
编排已成为使用容器的企业组织的标准实践。这在Kubernetes的使用稳步增长中体现得最为明显,丝毫没有下降的迹象。截至2019年10月,运行容器的Datadog客户中约45%使用Kubernetes,无论在自我管理的集群中,还是通过谷歌Kubernetes引擎(GKE)、Azure Kubernetes服务(AKS)或亚马逊弹性Kubernetes服务(EKS)之类的云服务。这表明Kubernetes的采用率较之前的12个月增加了10个百分点,较之前的24个月增加了20个百分点。
趋势2:Kubernetes在Azure中的使用快速增长
Kubernetes已在各大公共云提供商中广泛使用,尤其是在谷歌云平台(GCP)上,GKE历来是GCP的热门选择。然而近年来,Kubernetes在微软Azure上的使用增长势头迅猛,以至于现在Kubernetes在Azure上容器化环境中的人气几乎与在GCP上一样旺。Azure中运行容器的Datadog客户中约80%现正在使用Kubernetes,而一年前这个比例是67%。Azure上的Kubernetes使用既涵盖AKS部署,又涵盖自我管理的Kubernetes集群,不过我们在本次研究没有区分这些部署类型。在AWS中运行容器的企业组织中,Kubernetes的人气也在上升,在过去两年翻了一番,达到45%。
趋势3:GKE在谷歌云中占主导地位
谷歌云平台上的GKE和AWS上的EKS之类的托管Kubernetes服务已在各自的云平台上得到了广泛采用。这些服务的用户将Kubernetes控制平面的管理委托给云提供商,那样他们可以专注于在集群的worker节点上运行的工作负载。
在谷歌云平台上,运行Kubernetes的企业组织中90%以上采用了GKE。GKE的人气这么旺,可能归因于下列几个因素:
- GKE正式上市已有四年多
- Kubernetes最初由谷歌开发并开源
- 长期以来,GKE一直是谷歌云平台上的主力产品
EKS是一种颇新颖的产品,已经得到了势头较强劲的采用;随着时间的推移,我们预计越来越多的企业组织会采用EKS。毕竟,亚马逊弹性容器服务(ECS)的人气已经表明AWS客户对托管容器服务的需求不断增长。
趋势4:Fargate在19%的AWS容器环境中运行
AWS Fargate将容器集群中的基础架构层抽取出来,让客户无需管理EC2实例即可在ECS中运行应用程序。我们的研究表明,自首次推出以来的两年间,Fargate一直保持稳定快速的增长。在AWS中运行容器的公司中,现在19%使用Fargate,比一年前的5%显著上升。Fargate的快速增长已帮助ECS与AWS环境中持续采用的Kubernetes保持同步。
趋势5:容器的创建/删除速度在诸平台上趋于一致
使用编排的公司通常创建及删除容器的速度比不使用编排就运行容器的公司快得多。近年来,这种差异一直很惊人,在编排环境中创建/删除速度大约高出10倍。不过在2019年,未编排容器的创建/删除速度已大大提高了。在一家运行未编排基础架构的典型公司,容器寿命平均约2天,而2018年年中约6天。
即使ECS和Kubernetes仍然可以更快地创建/删除容器,典型的容器寿命约一天,但平台之间的差距已缩小。然而,寿命很长的容器在编排基础架构中仍然罕见得多。比如说,平均的容器寿命在19%的未编排环境中超过30天,相比之下只在7%的ECS环境中和3%的Kubernetes环境中超过30天。
趋势6:Node.js主导容器
我们的客户在应用程序开发中偏爱的编程语言和框架在容器环境和非容器环境之间有所不同。运行容器化工作负载的企业组织中57%使用Node.js,几乎是在非容器化环境中运行Node.js的企业组织的两倍。Java是容器环境中人气第二旺的语言,在传统应用程序环境中无疑是领先者。(请注意,百分加起来超过100%,因为每家企业组织可能使用几种语言。)
Node.js在容器环境中的人气很可能归因于其设计,其设计青睐轻量级、可扩展的应用程序,这些应用程序非常适合容器化和复制。另外值得一提的是, Node.js和Go这两种比较新的编程语言在容器环境中比在传统环境中流行得多,传统环境中更有可能发现遗留代码。
趋势7:NGINX在容器环境中盛行
在容器集群中运行的现成映像中,NGINX是最常见的映像,在Kubernetes环境中尤其如此。NGINX在约70%的Kubernetes环境、30%的ECS环境和40%的未编排容器基础架构中运行。NGINX在Kubernetes环境中的高普及率可能部分归因于NGINX是一种很流行的Kubernetes入站控制器,用于将外部流量路由传输到集群中的服务。
Kubernetes用户运行的现成容器映像通常比ECS用户多得多。我们假设许多AWS用户依赖托管服务而不是自托管的基础架构组件。比如说,许多AWS企业组织使用Amazon Relational Database Service,而不是运行自己的PostgreSQL或MySQL数据库。同样,Amazon Application Load Balancer在ECS集群中扮演的角色类似Kubernetes入站控制器在Kubernetes集群中扮演的角色,这可能有助于解释NGINX的使用在不同容器平台上有差异。
值得注意的是,服务网格技术还没有跻身主要容器映像的行列。截至本报告刊发时,这些技术似乎仍处于早期采用者的领域,不过我们在2019年下半年看到使用率有所上升。
趋势8:Kubernetes升级周期很长
Kubernetes平台发展迅速,每三个月左右就会出现新的次要版本(比如v1.16),并在此期间发布增量修正版。不过我们的研究表明,大多数组织喜欢较老的成熟版本,而不是最新版本。截至2019年10月,使用中的最受欢迎的版本是Kubernetes 1.13,该版本于2018年12月首次发布。在2019年发布的三个版本中,只有版本1.14得到了广泛采用,23%的Kubernetes企业组织使用它。由于每家组织可能运行多个版本的Kubernetes,因此下图中的百分比总计超过100%。
值得一提的是,Kubernetes版本并不总是明智的选择:托管Kubernetes服务的用户通常在集群启动时看到一个默认的稳定版本。分析本报告时,版本1.13仍是GKE和AKS的默认版本,而EKS默认提供版本1.14。
原文标题:8 Facts about the changing container landscape
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】