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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文讲的是【详解】为什么选择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。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
16 4
|
1月前
|
Kubernetes Nacos 微服务
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
24 1
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
|
1月前
|
Kubernetes SDN 微服务
微服务与 Kubernetes 容器云的边界
【2月更文挑战第30天】该文探讨了微服务与Kubernetes集群的关系,主要关注是否应跨多集群部署。理想的状况是每个微服务对应一个Kubernetes集群,配置和注册中心在同一集群内,以减少网络延迟。
|
1月前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【2月更文挑战第29天】在当今快速发展的软件开发领域,微服务架构已成为提高系统可维护性、扩展性和敏捷性的关键解决方案。本文将深入探讨如何利用Docker容器化技术和Kubernetes集群管理工具,共同构建一个既高效又可靠的微服务环境。我们将分析Docker和Kubernetes的核心功能,并展示它们如何协同工作以简化部署流程、增强服务发现机制以及实现无缝的服务伸缩。通过实际案例分析,本文旨在为开发者提供一套实用的微服务架构设计和实施指南。
|
1月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
145 2
|
2月前
|
开发者 Docker 微服务
深入浅出:使用Docker容器化部署微服务架构
在当今快速迭代的软件开发环境中,微服务架构因其高度解耦和独立性而成为企业首选。然而,微服务的管理和部署可能会变得复杂和繁琐。本文将探讨如何利用Docker,一个轻量级的容器化技术,来简化和加速微服务的部署。我们将从Docker的基础概念入手,详细介绍如何创建、配置和运行微服务容器,最后讨论Docker在微服务架构中的优势和挑战。本文旨在为开发者提供一条清晰的路径,通过容器化技术实现微服务架构的高效部署和管理。
87 0
|
2月前
|
Kubernetes 开发者 Docker
深入浅出:使用Docker容器化部署微服务架构
在当今快速演进的软件开发领域,微服务架构因其高度的模块化和可伸缩性而受到广泛欢迎。然而,微服务的部署和管理也带来了新的挑战。本文旨在通过深入浅出的方式,探讨如何利用Docker容器技术有效地部署和管理微服务架构。我们将从Docker的基本概念出发,逐步深入到如何构建、部署微服务,并讨论在此过程中可能遇到的常见问题及其解决策略。本文不仅适合刚接触Docker和微服务的新手,也为有经验的开发者提供了实用的参考。
56 1
|
2月前
|
JSON JavaScript Docker
深入浅出:使用Docker容器化部署微服务架构
本文旨在向读者展示如何利用Docker技术高效地构建和部署微服务架构。通过深入浅出的方式,我们将探索Docker的基本概念、容器化的优势以及如何将其应用于微服务架构中。此外,文章还将提供一个简单的示例,指导读者实践如何使用Docker将一个现有的后端应用容器化,并部署到本地开发环境中。不同于传统的摘要,这里我们强调实践操作的重要性,鼓励读者通过实际操作来加深对Docker和微服务架构的理解。
52 1
|
2月前
|
Kubernetes 负载均衡 Docker
深入浅出:使用Docker容器化部署微服务
在当今快速变化的软件开发领域,微服务架构因其高度的模块化和可伸缩性而受到广泛欢迎。然而,微服务的部署和管理带来了新的挑战。本文将探讨如何利用Docker容器技术,简化和加速微服务应用的部署过程。我们将从Docker的基础知识入手,逐步深入到如何构建、部署和管理微服务容器。通过本文,读者将获得一套实用的工具和方法论,以便在自己的项目中高效地应用Docker和微服务技术。
|
2月前
|
Java 开发者 Docker
深入浅出:使用Docker容器化部署微服务架构
在本文中,我们将探索Docker容器技术如何革新微服务架构的部署方式,提高开发效率和应用的可扩展性。不同于传统摘要的概述风格,我们将通过一个实际案例,步骤明晰地展示如何将一个简单的微服务应用容器化,并在Docker环境中部署运行。本文旨在为开发者提供一个清晰、易懂的指南,帮助他们理解容器化技术的基本原理和操作流程,无论是初学者还是有经验的开发人员都能从中获益。