容器的出现极大的改变了应用开发测试部署的流程,但也带来了很多麻烦事儿。云计算作为一种服务自觉承担起了复杂的部分,把简单易用提升用户体验当成自己的使命,在容器方面,作为云计算领头羊的AWS是怎么做的呢?
轻松也容器,麻烦也容器
容器确实挺方便的,以前运行程序需要的运行时、类库以及代码都被打包在一个镜像里,镜像就像一个脚本,只要有相同的镜像就能收获一个一模一样的容器,容器里安放着需要的应用程序,这个应用程序用起来与非容器化的传统应用也基本一样,能对外暴露接口并提供服务。
当用户在系统上安装了Docker,只需简单的run命令就能把容器运行起来,用户可以进入容器里查看各种信息,可以配置各种对外的目录,进行各种管理,但问题是,如果有成千上万个容器分布在多台机器上的时候,作为管理员要怎么管理这么多容器呢?
作为一个管理员,你首先需要将多台服务器组织成一个集群进行统一管理,又希望集群里的容器能提供多种不同的容器服务,还想看见成千上万个容器用了多少内存,想看看某台服务器上的资源占用情况,想看看某个容器在哪儿,某台服务器资源不够了你想把某些容器挪到别的服务器上,想对集群里成千上万个容器做负载均衡,还想……,这就需要自动化的容器编排工具了。
容器技术技术圈里有很多编排工具,几年前常听说的有Mesos,Swarm,还有kubernetes(k8s)。Mesos是Apache旗下的项目,Swarm是Docker公司的编排工具,但时间最终证明,k8s是呼声最高的那个。
这些编排工具在实践中经常被包装为PaaS软件,不过这些都是开源的项目,而且都管理着底层基础设施,国内出现了许多基于编排项目的创业公司,有许多专门的、复杂的事情要做。可见,部署安装使用体验方面,对一般技术人员来说还是有不少挑战的。
AWS云计算是如何提升容器的使用体验的?
笔者认为,云计算作为一种服务是要讲究使用体验的,这是云计算除了规模化和集约化之外的最大优势空间。云计算厂商提供的容器服务自然也是要降低复杂度,让用户少操心或者不操心,优化容器的使用体验。作为首屈一指的云巨头,AWS自然不会放过容器化的时代潮流,那么AWS云计算是如何提升容器的使用体验的呢?
AWS在2015年正式发布了Amazon ECS,那时k8s还没有现在这么火,ECS是AWS在容器上的第一个大的产品,也是最引人瞩目的那个。2018年,AWS又正式推出了Amazon Elastic Kubernetes Service (也就是常说的EKS,以下简称EKS),其实就是托管的k8s。它首先简化了k8s部署管理上的诸多麻烦,可以对接用户本地的k8s集群,而且能与AWS许多原生的服务比如Amazon CloudWatch,Amazon CloudTrail,Amazon VPC,负载均衡等服务无缝结合着使用。
需要明确的是,EKS是AWS托管的k8s,跟开源版本的k8s没什么本质上的区别,并不是k8s的一个分支,EKS可以提供跟k8s完全一致的API,能对接k8s现有的强大生态,如果k8s有什么好玩的工具或者项目,EKS用户也同样能享受到。
CNCF的证言显示,有51%的k8s工作负载运行在AWS上。关于这个说法笔者目前没有找到更为具体的说法,但至少也说明了AWS托管的k8s(EKS)是一个非常受欢迎的服务。具体其中有多少人是因为怕k8s的麻烦而使用EKS的呢?不得而知。
AWS的容器产品布局走到这一步,对于大部分用户来说可能已经够用了,但考虑到使用体验,后来推出的AWS Fargate将使用体验更进一步。
无论是ECS还是EKS,底层计算单元还是用的EC2主机,用户仍需要对容器集群的可用性、容量等进行管理,需要管理操作系统,需要升级维护操作系统,熟悉AWS的朋友都知道AWS在倡导的Serverless概念,让用户无需关注基础设施,只关注代码本身,Fargate的出发点一样,也是让用户不关注基础设施,只需关注用容器这件事本身即可。这对体验有多大帮助呢?
Fargate并不是独立于ECS和EKS之外的一个单独的服务,它只是一种部署和运行容器的方式(Launch Type),用户在ECS里可以选择用Fargate的方式部署容器,可以按照提示构建集群,无需配置EC2这样的基础设施。同样的,在ECS里也可以选择EC2的方式部署容器,这样就需要配置EC2的信息了,如果用户愿意对底层基础设施管理得更细致的话,EC2的方式适合你。
有过基础设施运维经验的人都知道管理基础设施是一件非常非常麻烦的事儿,AWS现代化应用产品市场负责人Aaron Kao举例说,当计算资源不够的时候,就需要扩充资源;当资源有空闲的时候,还需要用户自己去掉这些资源。有了Fargate就不用理会这些琐碎的事情了。笔者也了解到,Fargate是按照运行时间的用量来计费的,所以,在实际运行中,Fargate的按量付费其实有成本优势。
在AWS平台上用容器服务,大的选项有两个:一个是选ECS还是EKS,一个是选EC2的方式还是Fargate。
目前来看,笔者认为AWS其实更推荐用户用ECS,看得出来ECS在AWS的生态上更为成熟一些,因为,截止现在,Fargate只适用于ECS,据说很快也将支持EKS。而且,目前中国区用户可以使用的容器服务有ECR,ECS还有Fargate,Aaron Kao还表示,下一步,很快EKS会在AWS中国区可用,包括AWS中国(北京)区域和AWS中国(宁夏)区域。
结合用户实际情况,如果用户原来就在用k8s的话,上云最好是选EKS,如果没有本地的容器资源的话,AWS推荐用户上ECS。如果用户想掌控更多细节,那就推荐选EC2的方式部署,反之则选择Fargate。不过,这里的选择并不像双十一店家那样的残酷“二选一”,即使选了ECS和EKS,也可以通过APP Mesh来统一监控和管理容器服务。对服务体验还是比较友好的。
AWS的容器服务除了ECS和EKS之外,还有就是Amazon EC2 Container Registry(ECR)。ECR是AWS的镜像库,用户可以上传保存自己的容器镜像,从这里拉取镜像用到EKS和ECS上,用户可以基于AWS的各种服务构建CI/CD的Pipeline。
那么大家都是怎么用容器的呢?
在普遍的印象中,容器这种新技术更多只是在互联网公司流行,但从Aaron Kao的介绍中了解到,其实用容器的已经不仅仅是互联网公司,还能看到许多传统企业。
Aaron Kao介绍说,麦当劳使用AWS的ECS搭建微服务来支撑送货上门的服务,短短四个月时间就将系统构建完成了。如今麦当劳的云原生微服务架构可以以100毫秒的延迟每秒支撑起两万个订单。
Fidelity(富达)使用EKS运行一些企业级的大型工作负载,可以管理数以千计的应用以及数以百计的DevOps团队,这样它就可以把重点专注在创新上。
Turner是一家美国的媒体巨头,拥有包括CNN、TNT、TBS等品牌,Turner使用Fargate打造了一个网站共享服务平台,降低了成本,而且缩短了开发时间。
Aaron Kao还表示,用户一般会用EKS来进行企业应用的迁移上云,还有的客户使用EKS进行机器学习。
容器化应用后进行迁移是许多企业上云的重要一步,将EKS与机器学习结合的需求也非常普遍,机器学习的工作负载有时候会非常大,非常费时,EKS能将机器学习的负载分散到多个设备上,从而加速训练周期。业内有许多将k8s与Tensorflow结合的做法,有的还发布了开源项目,AWS发布博客介绍了在EKS上使用 Kubeflow 进行分布式 TensorFlow 训练。
当然,将Tensorflow分布式部署到k8s是因为Tensorflow 2.0有一些新的特性,但放眼未来,类似的应用肯定会越来越多,相信ECS或者k8s的使用场景也会越来越多,如果能降低使用门槛并提升使用体验的话,容器将给我们带来更大价值。