【详解】为什么选择Kubernetes作为云平台的微服务治理框架

简介: 本文讲的是【详解】为什么选择Kubernetes作为云平台的微服务治理框架,很多同学在做技术选型的时候,往往过于关注技术/功能上的比较,陷入技术细节和功能特性上的争论。

如何做开源技术选型?

本文讲的是【详解】为什么选择Kubernetes作为云平台的微服务治理框架,很多同学在做技术选型的时候,往往过于关注技术/功能上的比较,陷入技术细节和功能特性上的争论。比如A产品有个X功能,看起来很棒,B产品有个Y功能,也不错,选哪个,好纠结……或者A产品的当前版本看起来不错,B就很一般,可是B的Roadmap里写,下一个版本会有个很强大的功能出来,是不是要再等等看,好纠结……

有时候勉强选了A,又看到B发展的也不错,心里不踏实。

其实在我们看来,技术/功能只是技术选型过程中需要考量的诸多维度中的一个,只要这些开源产品大体上能满足我们的需求,架构上没有明显的缺陷,开发语言和现有团队比较匹配、Roadmap比较完善,就没什么大问题,就可以进入其他维度的考量。

我们认为,技术/功能在技术选型中的权重,可能只有四分之一。有很多技术/功能上非常领先的开源项目,并没有得到很好的发展,比如ZFS,比如CloudStack,令人惋惜,这里不一一列举。那么技术选型过程中,除了技术/功能之外,我们还应该关注哪些事情呢?

项目的运作模式

开源项目的运作模式中,我们重点关注以下三点:

1、使用哪种开源License
2、开发模式和测试模式
3、被一家公司掌控还是松散的社区决策?

其中最重要的是License。在很多技术人员的眼中,License问题依然没有得到足够的重视。(对这个问题感兴趣的同学可以移步 http://choosealicense.com/ 查看各种开源License的差异。)

开发模式,值得关注,但是一般知名的开源项目,在开发模式上都不会有太大的问题,更重要的是测试模式。很多开源项目自身不重视测试,把填坑的事情丢给参与厂商,这种项目,如果贵司不是动不动就能派出几十人上百人的大厂,必须慎用。会认真做测试框架、定期发测试报告的项目,必须好评。

项目运作是被一家公司掌控还是松散的社区决策,以前都说大教堂不如集市,那是因为以前大教堂基本上不搞开源,搞开源的大教堂和集市,就难说哪个好了,参与过OpenStack厂商扯皮的同学,应该对这个深有体会。

技术提供者的产业背景

在项目技术提供者的产业背景中,我们重点关注以下三点:

1、技术提供者的产业经验
2、自己有没有大规模使用?
3、是从自身需求沉淀出来的产品还是按设想的需求开发的产品?

现在都讲“吃自己的狗粮”,很多最为成功的产品,都是在自己内部的长期的、大规模的使用中反复锤炼,再发布给公众使用的,最好的例子就是AWS。从自身的实际需求出发的、给自己做的产品,往往会比按设想需求出发的、给客户做的产品更好。所以我们往往更加青睐大型互联网公司释放出来的开源项目,比如Netflix的一系列开源项目。

生态环境

在项目所处于的生态环境中,我们重点关注以下三点:

1、技术和技术提供者在产业链中的位置
2、与友商的合作/竞争关系
3、是众望所归还是单打独斗?

互联网时代,没有生态、就等于没有未来。良好的合作、清晰的分工界面,会让项目得到更好的发展,总想占点上下游的便宜,动别人的奶酪,或者妄图以一己之力对抗全行业,当然也有成功的,但是概率真的很低。

我们的选择

现在回到故事的大背景中,看下我们为什么选择Kubernetes作为普元新一代云平台的微服务治理框架。

首先,以下为我们在云计算项目中遇到的需求:

image

云计算技术经过近十年的变迁,需求重点已经从早期的虚拟化资源池管理、单体应用的“栈”管理,过渡到了微服务的“图”管理。

管理微服务时,我们需要对这些微服务和它们的调用关系进行注册、为其分配资源、创建一定数量的节点副本、并发布到集群中去,同时还要为其配置好网络和负载均衡,使这些微服务能够被外部访问;在这些微服务的运行过程中,需要始终保持其可用性,一旦有节点出现问题,需要立即创建新的节点将其替换掉;运行过程中需要对这些微服务进行监控和日志收集;在负载发生变化的时候,还要能够迅速调整资源分配。

大体上能满足这些需求的开源项目有Kubernetes、Mesos Marathon、Docker Swarm、OpenShift、Cloud Foundry等等。

我们重点看一下Kubernetes:

image

可以看到,Kubernetes使用了较为常见的Master-Slave架构,在容器之上又封装了一层Pod结构,很好地适应了多容器服务,也符合Unix的进程模型。Pod通过Label标识为服务(Service),概念简洁明了而且非常灵活。

经常有人问,Mesos资源调度能力更加强大,而且产品推出的时间比较久,更加成熟、稳定,为什么不选择Mesos?还有人拿出了下面这张对比图,证明Mesos的功能更为强大:
image

需要注意的是,这张图只对比了资源调度,而Kubernetes提供的是从资源调度,到服务发放、变更、退休,到网络管理的全方位能力,而Mesos仅仅是资源调度,服务管理要借助Marathon,而网络管理能力聊胜于无。其他类似的技术,同理,这里就不一一展开了(上面那张图来源于剑桥大学CambridgeSystems at Scale博客的一篇文章,感兴趣的同学可以移步 http://www.cl.cam.ac.uk/research/srg/netos/camsas/blog/2016-03-09-scheduler-architectures.html)。

再来看一下Kubernetes的Roadmap:

image

我们关注的功能,例如CustomMetrics、Multi-zone、Multi-scheduler、Node affinity等,都在Roadmap之中,还有Device Scheduling这种意想不到的功能,三个月一个版本,进度和我们自己的产品规划也比较吻合。

技术这关到这就算是过了,接下来我们看下Kubernetes项目的运作模式。

Kubernetes使用Apache License,没有对参与厂商做太多的限制。虽然很多厂商在积极贡献代码,但是控制权还是在Google手上,不会出现某些“集体决策”项目因为要不要做一个特性一堆厂商反复扯皮的问题。开源项目的研发过程做到开放透明自然不必多说,在此之上,Kubernetes还做到了接地气,在沟通协作上没有使用所谓的“极客工具”,而是直接使用了Slack、Zoom这样的流行App,每次会议的会议纪要都会发布到Google Docs上,让开发人员之外的技术爱好者也能很方便的获取项目进展的第一手资料。至于测试,有一伙人专门在搞测试框架,对测试的重视程度高于一般开源产品。

image

评估过了项目的运作模式,我们再来看一下技术提供者的产业背景。大家都知道近两年这一波容器浪潮的推手是Docker,Docker俨然成为容器的代名词,那么Google的位置又在哪里呢?以下为来自Wikipedia的截图:

image

很多同学可能没注意过,容器的两个根本核心技术之一,cgroups,发起者就是Google,最初的目的是用来管理Google复杂庞大的互联网服务,后来贡献给Linux,至今已经快十年了。而Kubernetes就是源自于Google内部使用、经过多年的锤炼的集群容器管理系统Borg,所以Kubernetes才能做到架构简洁、适应性强而且极具扩展性。有句话说好的架构不是设计出来的,而是进化出来的,这里的反面教材就是Docker,有些同学可能了解Docker的C/S架构和网络设计,带来了多少麻烦,这就是有没有产业经验的区别。

最后,我们来看生态。Kubernetes首先是和CoreOS联合,形成名为Tectonic的端到端容器管理解决方案,而CoreOS又是etcd、rkt、fleet、flannel等一系列优秀开源项目的领头羊,这些开源项目彼此之间做到了很好的对接,避免了使用开源软件时经常碰到的“裁剪”问题。而前段时间的一个新闻更是将Kubernetes所在的生态环境进一步强化:

image

总结

经过上文的分析,可以看到,Kubernetes在技术/功能、运作模式、产业背景、生态等四个维度有着较为均衡的优势,所以我们选择Kubernetes作为普元新一代云平台的微服务治理框架。下图中浅蓝色的模块基于Kubernetes的能力开发:
image

原文发布时间为:2016-04-27
本文作者: 宋潇男
本文来自云栖社区合作伙伴EAWorld,了解相关信息可以关注EAWorld。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1732 10
|
3月前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
235 2
|
7月前
|
人工智能 数据可视化 JavaScript
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
Juggle是国内首个开源的微服务编排框架,专注于解决企业微服务进程中接口重复开发、系统对接复杂等问题。它提供零代码、低代码和AI增强功能,通过可视化拖拽快速组装简单API为复杂接口,支持多协议、多语言脚本和流程多版本管理。相比国外框架如Conductor,Juggle更贴合国内需求,具备高效开发、企业级可靠性及信创适配等优势,助力企业实现敏捷创新与数字化转型。
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
472 82
|
10月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
10月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
527 1
|
10月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
668 24
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
639 6
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?

热门文章

最新文章

推荐镜像

更多