DC/OS 与 Kubernetes
本篇文章将主要介绍“Kubernetes on DC/OS”的实现机制与优势,不会就Mesos与Kubernetes的架构与技术细节做过多的展开。关于Mesos与DC/OS的具体功能细节,大家可以关注本公众号,本公众号后续会陆续推送不同类型的技术文章,这些文章将包括Mesos以及DC/OS的架构介绍、技术原理与实现方式,以及微服务、分布式应用、大数据平台、AI平台在DC/OS平台之上运行的最佳实践。
随着容器技术快速地发展与不断的成熟,与容器相关的生态体系也在不断地丰富和完善。近些年,有很多媒体将Mesos与Kubernets进行比较,然而实际上Mesos与Kubernetes是完全不同层面的两种互补技术,Mesos是一套数据中心的资源调度系统,而Kubernetes则是一套功能强大、生态活跃的现代容器应用编排平台。
真正与Kubernetes具备可比性的则是DC/OS平台中的Marathon组件,Marathon组件通过与Mesos集成,接受Mesos提供的资源offer从而对容器进行生命周期的管理,而本文即将要讨论的DC/OS是一套以Mesos、Marathon以及其它几十个组件共同组成的企业级数据中心操作系统。与Kubernetes不同的是,DC/OS采用资源的二次调度机制,除了可以支持容器应用的管理与调度之外,还支持与众多计算框架进行集成从而在一套基础设施上真正地实现各种应用、任务的混合运行。因此相比Kubernetes,DC/OS的定位与使用范围也相对更广泛,很多大型企业以及互联网公司都采用了以Mesos为核心的技术搭建新一代云原生应用数据中心,承载并运行着众多关键的生产级业务系统。
在今年九月份的MesosCon北美峰会上,硅谷科技公司Mesosphere宣布了将在未来的Open DC/OS与DC/OS Enterprise上支持Kubernetes平台,即采用DC/OS技术的用户,不仅可以通过Marathon框架对容器进行管理,也可以选择通过Kubernetes的方式对容器进行管理,用户在技术选型上可以面临更加灵活、丰富的选择。
技术实现与部署流程
通过DC/OS部署Kubernetes的实现流程描述如下。
1.Kubernetes的Framework通过容器的方式运行在DC/OS Agent节点之上,Framework容器创建的过程通过Marathon组件实现。Framework 详情查看:https://github.com/kubernetes-graveyard/kube-mesos-framework。
2.Kubernetes 的Framework容器实例运行之后,会与DC/OS中的Mesos Master进行注册,注册之后该调度器便可接受Mesos提供的资源。
3.Kubernetes Framework接受Mesos的资源调度,并按照顺序依次创建etcd,kube-apiserver,kube-controller,kube-scheduler,kubelet与kube-proxy等组件。各组件以docker镜像的方式存储在镜像库中,并通过UCR的方式运行在Mesos Agent之上。
具体流程可参照图一,在部署Kubernetes之前,用户可以通过GUI或者CLI配置参数从而指定各组件的资源规格与数量,之后Kubernents Framework调度器会按照指定的参数完成各组件的部署。DC/OS的Mesos-dns为各服务提供域名服务,从而使各服务通过服务名称完成服务的发现与通信,此外DC/OS的Minuteman组件可以为内部服务提供分布式负载均衡服务,从而实现对多实例部署的组件提供网络负载均衡服务。
图(一)Kubernetes on DC/OS 部署流程
Kubernetes on DC/OS 亮点分析
亮点一 :Kubernetes调度器
无论运行何种应用框架,DC/OS均采用二次调度的机制,即应用调度与资源调度相分离。这一点与Kubernetes不同,Kubernetes的应用调度与资源调度全部都是通过内部的组件完成的,其自身的资源调度平台仅能为容器运行提供支撑,不能为其它的Framework提供资源支撑,可以说Kubernetes的容器调度与资源调度是紧耦合的。而在DC/OS平台下,各应用调度框架与Mesos资源实现了松耦合,Mesos仅负责资源的调度,而上层应用的调度则由各应用的Framework自身完成,Framework自身也可以通过容器的方式运行在平台之上。因此在Kubernetes on DC/OS的场景下,当用户部署Kubernetes平台时,用户首先部署的是Kubernetes的Framework,在Kubernetes Framework创建成功后会与Mesos进行注册,并完成Kubernetes 各组件的自动部署,这一点已在上文的技术实现部分做过阐述。
值的一提的是,Mesos提供标准的接口与SDK,其中SDK接口简单易用,用户完全可以根据实际需求灵活地编写自己所需要的Framework,分布式应用如Cassandra、Kafka、Spark、Flink以及人工智能框架Tensorflow等,都可以通过编写Framework的方式与DC/OS进行集成。
SDK详情查看:https://mesosphere.github.io/dcos-commons/developer-guide.html。
图(二)Mesos 支持多种应用框架
亮点二:Kubernetes管理平台模块化拆分
Kubernetes平台由管理集群与计算集群组成,这一点与虚拟化平台类似,其中管理集群负责资源全局的管理与调度,计算集群用于承载容器应用实例。其中管理节点的核心组件包括etcd, kube-api, kube-scheduler, kube-controller,计算节点的核心组件包括kubelet以及kube-proxy,此外kubernets中还有一些add-on组件,如dashboard、kube-dns等,用于实现界面管理以及DNS管理等。
在通用场景下,kube-api, kube-scheduler, kube-controller等组件均统一部署在管理节点上,kubelet以及kube-proxy等组件则统一部署在计算节点之上。此外,管理节点与计算节点一般部署在物理服务器或者虚拟机之上,而其它的add-on组件则一般是在完成k8s平台的部署后,通过容器的方式运行在k8s的节点之上。
在Kubernetes on DC/OS场景下,所有的Kubernetes组件均采用模块拆分的方式部署,无论是etcd,kube-api, kube-scheduler, kube-controller等管理平台组件,还是kubelet以及kube-proxy等计算平台的组件,均以UCR容器的方式混合运行在DC/OS计算节点之上。
图(三)Kubernetes 模块化拆分与容器化部署
亮点三:Kubernetes计算节点容器化
与其它组件类似,在kubernentes on DC/OS场景下,计算节点是通过容器的方式进行发放的,每当用户新增一个Kuberneres计算节点时,Kubernetes Framework会接受Mesos的资源offer,然后在的Mesos Agent创建Kubelet与Kube-proxy的UCR容器实例,kubelet与kube-proxy实例的比例是1:1,每当一个新的kubelet创建时必然会有一个kube-proxy随之共同创建。kubelet的节点的主要作用是用于承载Kubernetes发布的应用容器实例,因此在Kubernertes on DC/OS 场景下,一个很重要的特点便是容器嵌套技术,首先kubelet是通过容器的方式运行,其次,当用户通过Kubernetes创建应用时,应用实例会以容器的方式运行在UCR容器之上,其实质为容器嵌套技术。UCR容器与主机共享网络,因此不会出现用户所担心的,由于容器嵌套,网络也会随之嵌套,导致性能瓶颈。
对于存储,由于Kubernetes内部有自身的一套存储管理机制,并遵循相关的标准和接口,在Kubernetes on DC/OS场景下,如果客户有对接多种存储的需求,用户可以通过Kubernetes自身的机制实现多种存储资源的对接。
约束限制:为保证资源有效的隔离,Kubernetes平台上的kubelet与kube-proxy与节点的对应关系为1:1,即一台几点仅能运行一台kubelet与kube-proxy。但是该节点除了kubelet与kube-proxy之外,可以运行其它任意类型的应用或着任务。
通过将kubernets 部署在DC/OS上,用户可以在技术与框架选型上做到两者兼顾,其具体优势可总结如下。
1、Mesosphere早期的很多工程师是Kubernetes的核心贡献者,到目前位置仍有很多工程师与Google的Kubernetes核心代码贡献者保持着紧密的联系,DC/OS部署的Kubernetes为社区原生交付,并且与社区版本保持高度同步。
2、得益于Kubernetes的调度器,当用户希望部署Kubernetes时,仅需要输入必备的参数后便可以在数分钟内完成Kubernetes的快速自动化部署、配置更新、节点扩容等操作。此外,Kubernetes 调度器将陆续加入HA、安全控制、版本切换与升级、故障判断的功能,因此在很大程度上让资源变得更有弹性并解放了Kubernetes的管理运营成本。
3、DC/OS的定位是帮助客户构建企业级的数据中心操作系统,而不仅仅是一套容器管理平台,通过引入Kubernetes,DC/OS为用户提供了更多的工具选择,可以同时利用Marathon与Kuberenetes的容器编排功能,从而实现优势互补。
4、DC/OS运行在通用的操作系统之上,而Kubernetes运行在DC/OS之上,这就意味着在Kuberntes on DC/OS的场景下,Kubernetes平台对底层资源是不感知的,因此无硬件限制与资源依赖,平台可以运行在物理服务器、虚拟化平台,私有云或者公有云等任意资源上。
5、除了构建容器编排平台,DC/OS平台还可以运行传统的应用、以及其它类型的计算框架,如Spark,Flink,Tensorflow、Casandra、Kafka以及MPI等。对于分布式计算平台,虽然通过Kubernetes部署技术上可行,但是其维护成本与与传统方式相比相差不多。通过Kubernetes on DC/OS,用户可以在Kubernetes平台内运行无状态服务、微服务等应用,可以将维护难度大的分布式应用运行在DC/OS之上,DC/OS提供的DNS服务以及服务发现机制,用户可以将Kubernetes内的容器应用与运行在DC/OS之上的分布式应用进行简单、无缝地即成。从而实现通过一套基础设施便可以同时支撑有状态服务、无状态服务、微服务、分布式数据平台、AI平台等,帮助用户在真正意义上构建新一代的企业级云原生应用平台。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。