DC/OS是什么
DC/OS能用来做什么?一句话,不管你的应用是什么形式的,何种语言开发,是独立的可执行程序,需要部署到容器中的应用,需要依赖缓存、MQ等中间件,需要多实例集群,还是具有更加复杂的物理拓扑,只要是能够部署到服务器集群中,就可以全部可视化的运行在DC/OS中。
想象这样一种场景,你有成百上千台服务器组成的网络,原本需要规划详细的清单,跟踪在每台服务器上安装的各种应用及其对应的依赖,一旦记录出错,很容易造成各种冲突甚至搞不清楚状况,出现各种各样的问题。作为开发人员,更是搞不清楚自己开发的系统部署成了何种拓扑结构,一旦出现问题,开发与运维在这个世界的各个角落中查找。
而现在,每台服务器除了安装基本操作系统,就只安装了DC/OS,然后所有的应用都通过DC/OS来部署安装,管理和监控,由DC/OS为你的应用提供CPU、内存、磁盘和网络资源并按需调度。作为开发人员,你通过WEB管理界面对所有的应用和中间件一目了然;作为运维人员,你只需要运维监控硬件、网络、操作系统和DC/OS,再也不用担心应用的各种奇葩依赖问题。
DC/OS在分布式的规模主机集群(Cloud或Bare Metal)之上构建了一个分布式操作系统,为上层业务应用按需提供资源。
开始探索DC/OS
下面我们尝试用类似面向数据流的分析方法来研究DC/OS。前文《领域修炼方法-论软件架构设计的思想及其适应性》讲过,面向数据流的分析是一种自外到内,自顶向下,逐层分解数据的输入/输出的结构化分析方法。
这里,我们对DC/OS的分析从外向内拆解。为三层:第一层将DC/OS作为一个整体,看其与外部的交互和职能(关于DC/OS职能的引导性阐述请参考《微服务和传统应用并存之道,极简架构:容器与DC/OS》一文的调度管理小节),第二层分析DC/OS的各个组成部分,看每一部分的职能极其为上层提供的支撑,第三层分析每一个组成部分的内部机制(限于篇幅,本层在后续文章中展开)。
第一层,将DC/OS看做一个整体
如下图所示,DC/OS为图中的中间层,下层为规模主机系统集群环境,上层为业务应用。
DC/OS依存的规模主机系统集群环境可分为三类。1)在本机搭建的Vagrant集群环境,2)基于云端服务实例集群构建的资源环境,3)本地物理主机集群或虚拟主机集群构建的弹性业务环境。
集群节点组成与划分
在一个DC/OS集群中,需要选择1/3/5台(当前,一旦选定安装后,集群master节点数将不能增加,如要变更,只能重建集群。集群节点数不是越多越好,生产环境推荐3/5个)主机安装master节点。
其余主机节点(下称Agent节点)安装DC/OS服务后,除了DC/OS自身占用的资源,其它所有空闲的CPU、内存、磁盘和网络端口等都被master归集在一起形成一个资源池。
为了网络安全,这些Agent节点划分为两类,一类为Public节点,通常会配置公网IP,可通过IP或DNS访问。DC/OS通常会在这些节点上部署Marathon-LB做负载均衡或者部署API网关。另一类为Private节点,DC/OS会将所有内部服务在这些节点上按需调度。
外部交互,CLI & GUI
DC/OS提供了强大的CLI命令行管理工具,可以安装、配置、更新和卸载服务,查看服务状态,跟踪服务日志等。特定服务也可以扩展CLI接口,提供自己特定的命令行管理操作。
Command line utility for the Mesosphere Datacenter OperatingSystem (DC/OS). The Mesosphere DC/OS is a distributed operatingsystem built around Apache Mesos. This utility provides tools for easy management of a DC/OS installation.
Available DC/OS commands:
auth Authenticate to DC/OS cluster
config Manage the DC/OS configuration file
help Display help information about DC/OS
job Deploy and manage jobsin DC/OS
marathon Deploy and manage applications to DC/OS
node Administer and manage DC/OS cluster nodes
package Install and manage DC/OS software packages
service Manage DC/OS services
task Manage DC/OS tasks
Get detailed command description with 'dcos <command> --help'.
DC/OS的GUI管理工具让所有的管理操作以可视化的方式进行。当前DC/OS的GUI管理接口可以浏览和查看Universe仓库并安装卸载应用,监控所有agent节点的状态和资源分配情况,查看、部署和维护管理所有的业务服务,查看服务的运行日志,部署和管理定时任务等。
与上层应用对接
DC/OS通过Mesos可以支持各种调度框架,如Marathon本身,Aurora和Singularity等长期服务调度框架,Hadoop,Spark,Storm,MPI和Exelixi等大数据处理服务框架,Chronos,Jenkins等批处理计划服务框架,Alluxio,Cassandra,ElasticSearch和MrRedis等数据存储服务框架,Linkerd等微服务框架,Vamp等DevOps工具服务。
DC/OS内置了Marathon调度框架,可以用来调度任何AppC容器镜像和Docker容器镜像。DC/OS自1.9版本开始支持Pods。
通过DC/OS,这些业务服务、框架及中间件再也不需要去各个主机系统上规划,配置和安装,直接在DC/OS中就可以完成,并具备负载均衡和弹性伸缩等能力。如果是单实例的服务,其能够在DC/OS中自动迁移的特性,也可以有效避免节点故障导致的服务不可用问题。
交互接口
DC/OS通过各个内部组件提供了丰富的管理端口和GUI管理界面
第二层,构成DC/OS的各个部分
DC/OS的核心组件是Mesos,内置的Marathon和Metronome三大核心组件及一系列外围服务组件,涉及:集群管理,容器运行,网络,存储,日志,监控,安全和部署等。
Mesos
Mesos负责调度底层计算资源。Mesos采用两级调度来控制集群中的资源配给。不同于集中式的存储集群中的资源信息,它通过资源提供(resource offers)的概念,让运行的框架通过Master获取Agent节点所提供的资源,从而保持整个系统架构的简洁和可扩展性。
Marathon
dcos-marathon.service,内置的Marathon负责调度容器应用。
Metronome
dcos-metronome.service,Metronome负责调度Job任务。
Admin Router(Agent)
dcos-adminrouter-agent.service,高性能的WEB服务器和WEB反向代理服务器,用于保存集群中所有Agent节点的列表。
Admin Router(Master)
dcos-adminrouter.service,高性能的WEB服务器和WEB反向代理服务器,用于保存集群中所有Master节点的列表。
Admin Router Reloader Timer
dcos-adminrouter-(agent)-reload.timer,周期性(默认每小时一次)的重启Admin Router Nginx服务,启用新的DNS解析。
Admin Router Service
dcos-adminrouter.service,由Mesosphere创建的一个Nginx配置,用于中心授权,代理集群节点内部服务。Admin Router服务是DC/OS内部核心的负载均衡服务。Admin Router是一个定制的Nginx,它在端口80上代理所有内部的服务。
Diagnostics
dcos-3dt.service,DC/OS systemd组件的诊断工具服务。
DNS Dispatcher
dcos-spartan.service,RFC5625标准DNS转发器。
DNS Dispatcher Watchdog
dcos-spartan-watchdog.service,确保DNS Dispatcher正常运行,如果DNS Dispatcher状态异常,该服务会将其杀掉。
DNS Dispatcher Watchdog Timer
dcos-spartan-watchdog.timer,每5分钟唤醒一次DNS Dispatcher Watchdog,检查DC/OS是否需要重启DNS Dispatcher。
Erlang Port Mapping Daemon
dcos-epmd.service,为Minuteman的4层负载提供服务支撑。
Exhibitor/Zookeeper
dcos-exhibitor.service,由Netflix开发的,可以管理和自动部署Zookeeper的监控管理工具。
Generate resolv.conf
dcos-gen-resolvconf.service,动态提供“/etc/resolv.conf”,使得每一个集群节点都可以使用Mesos-DNS将任务名称解析为对应的IP地址和端口。
History Service
dcos-history.service,该服务让DC/OS UI可以展示集群服务状态统计,并将最新的24小时的数据存储在磁盘上,同时公开一个HTTP API接口让用户查询。
Layer 4 Load Balancer
dcos-minuteman.service,该服务也称为“Minuteman”,是一个4层负载均衡实现,可以用来编排多层微服务架构。
Logrotate Mesos
dcos-logrotate-master(agent).service,自动循环压缩、删除和传送Master节点上的日志,确保不会在磁盘上存储过多日志文件。
Mesos Agent
dcos-mesos-slave.service,运行在Private Agent节点上的mesos-slave进程。
Mesos Agent Public
dcos-mesos-slave-public.service,该服务是运行在Public Agent节点上的mesos-slave服务进程。
Mesos DNS
dcos-mesos-dns.service,该服务负责在集群内部提供服务发现功能,这是DC/OS集群的内部服务,它为集群服务提供了域名“$sevice.mesos”,如一个Master Leader节点,其域名为“leader.mesos”,在集群内部就可以通过“ssh leader.mesos”登录该节点。
Virtual Network Service
dcos-navstar.service,该服务是一个守护进程,用来提供虚拟网络和DNS服务。
OAuth
dcos-oauth.service,该服务负责DC/OS的安全检查。
Package service
dcos-cosmos.service,内部打包API服务。当每次通过CLI执行“dcos package install”时都会调用该服务。该服务将DC/OS服务包从DC/OS Universe部署到你的DC/OS集群。
Signal
dcos-signal.service,该组件为帮助完善DC/OS,会周期性的向Mesosphere发送当前集群的概要信息反馈,并为集群问题提供高级检测。Signal查询Master节点上的诊断服务“/system/health/v1/report”,并将数据发送到SegmentIO,用于跟踪度量和客户支持。
REX-Ray
dcos-rexray.service,REX-Ray存储方案实现,让Marathon能够使用外部存储。
System Package Manager API
dcos-pkgpanda-api.service,创建链接,安装systemd服务单元,为每个主机建立指定角色(Master,Private Agent, Public Agent)。
了解了DC/OS的这些构件组成,下一步就需要厘清每一步操作形成的数据流经过了哪些组件,产生了什么结果输出,对整体系统有什么样的影响。
总结
DC/OS的应用实践到现在,个人感觉,说简单也简单,说复杂也复杂。说其简单,是因为它是一个开箱即用的弹性业务服务平台,能够快速上手;说其复杂,作为一个平台,如果你想真正掌握它,你必须对操作系统,容器,存储,网络,监控,日志,安全和部署等各个领域有基本的概念理论认知,同时能够将这些理论概念映射到构成DC/OS的各个构成组件上。