编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

【系统架构】Kubernetes还是DC/OS?容器编排平台如何选?

wxchong 2024-11-20 22:41:06 开源技术 37 ℃ 0 评论


从文章《【系统架构】什么是容器?什么容器编排?你都知道吗?》,我们已经了解到,容器和虚拟机一样,是一种内核轻量级的操作系统层虚拟化技术,它可以在操作系统之上搭建一套独立的运行环境,而不受其他进程干扰。不同的是,虚拟机需要虚拟出自己的OS和hypervisor,而容器却不需要。

容器的底层完全依赖宿主机,它比虚拟机更轻量,性能更好,更易于移植。也正是因为这些原因,近年来容器被广泛应用于生产中。据 CNCF 发布的 2019 年度调查报告显示,2016 年和 2018 年容器的使用率分别是 23% 和 73%,到了 2019 年,这一比例已经上升到了 84%。

容器的出现帮我们解决了很多问题,但是当容器数量达到一定规模时,你也会发现会有新的问题产生,比如,如何高效地管理成百上千的容器。此时,你不可能像维护单一容器那样维护成百上千的容器,因为如果是那样,维护容器将是一件非常繁琐的,甚至是不可完成的事情。

容器编排

为解决上面说的维护容器的问题,人们开发出了容器编排工具。最开始,业内能够称得上容器编排平台的只有 Kubernetes,也即是K8S。Swarm 和 Mesos 虽然也可以承担一部分容器编排的工作,但是一个需要 Compose 和 Docker Machine 等工具的配合,一个需要编排工具和组件服务的配合。

不过,Kubernetes “独步天下”的局面没有持续很久,在容器编排平台领域就出现了一个竞争者——DC/OS。DC/OS 是 D2iQ 公司(原名:Mesosphere)牵头开源的一个项目,其核心是基于 Mesos 实现的,可以集中基础设施资源,并实现跨多个分布式应用来共享资源。

如何选型:DC/OS 还是 Kubernetes?

DC/OS 和 Kubernetes 都可以进行容器编排,但各有各的最佳使用场景。在企业实际生产环境中,技术选型可分多种情况,下面从集群规模、工作负载和复杂度三个方面来看看选型结果。

第一,大集群选 DC/OS,小集群选 Kubernetes

我们可以把集群规模分为集群数量和单个集群规模两个部分来谈论。

集群数量指的是集群中虚拟机或实体机的数量,包括开发、测试、生产以及其它业务。一般以 500 个集群为界限,如果超过 500,就可以认为是大集群,应该选择 DC/OS;如果少于 500,那么就认为是中小集群,更适合选择 Kubernetes。

单个集群规模指的是在单个集群中的节点数量,一般来说,如果单集群节点为 8-10 个,建议使用 Kubernetes,而单集群节点超过 100,则建议使用 DC/OS。

第二,多定制使用 DC/OS,少定制使用 Kubernetes

从工作负载的角度来看,如果是千节点集群且定制较少可以选择使用 Kubernetes,而如果是万节点集群且定制较多,更适合使用 DC/OS。

DC/OS 的内核是 Mesos,Mesos 的优势在于双层调度机制。第一层调度先将整个 Node 分配给 Framework,之后再进行二次调度。如果有多个 Framework,还可以进行并行调度。

Kubernetes 数据结构的设计层次比较细,更符合微服务的设计思想。例如,从容器 ->Pods->Deployment,每个运行的容器都可能被封装为这么多的层次,且每一层都可以拆分组合,并具备自己的作用。

至于在定制方面的适用场景,以搭积木为例,Mesos 是零散的积木,需要自己组装来实现业务模型,而 Kubernetes 就是组装好的积木,直接拿来用就好了。

除此之外,应用状态也是一个需要考虑的因素。通常,应用的状态分为有状态和无状态两部分,两者的关键区别在于状态信息是由请求方还是响应方保存,如果是请求方保存就是无状态,反之亦然。

无状态应用无需关心响应方是谁,也无需同步各个响应方之间的信息,甚至被删除也不会影响其它。而有状态应用需要及时同步数据,不能丢失数据,消耗内存资源保存数据等,因此更需要谨慎对待。相比于 Kubernetes,DC/OS 捆绑了很多组件,且是分布式部署,因此能够支持更多的有状态服务,即使是复杂的分布式系统也可以在几分钟内部署完成。

第三,多租户 / 多部门协作选 DC/OS,反之选 Kubernetes

如果企业内部有多个业务部门,多个开发、测试、生产系统,需要协作完成相关工作,复杂度较高,那么建议选择 DC/OS,反之,则建议选择 Kubernetes。

在企业具体实践中,复杂度主要表现在以下几个方面:

  • 一是存储资源的复杂度,当企业内的数据中心或机房超过一个时,那么就需要关心如何降低运维的难度,如何按需对业务系统提供即时支持;
  • 二是多需求的复杂度,当企业存在多部门、多业务,且需求不同的时候,那么就要关心如何满足平台提供方与资源提供方的定制化需求;
  • 三是管理流程和人员的复杂性,如何做到集中和统一管理,减少差异化带来的额外成本。

以上就是 Kubernetes 和 DC/OS 的选型建议,希望能给你带来参考价值。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表