a) 部署: AppWorker汇报目前没有运行任何服务, AppMaster返回部署命令给AppWorker; b) 启动: AppWorker汇报部署成功了, AppMaster返回启动命令给AppWorker; c) 更新: AppWorker汇报当前服务的版本号, AppMaster发现不匹配, 返回更新命令给AppWorker; d) 失败处理: AppWorker汇报(部署失败 or 启动失败 or 更新失败), AppMaster记录此次异常,并根据策略决定是否让AppWorker继续重试;
Galaxy
Copyright 2015, Baidu, Inc.
Galaxy是一个数据中心操作系统,目标是最大化资源的利用率与降低应用部署运维代价。
Galaxy 3.0设计
背景
Galaxy3.0是对Galaxy2.0的重构,主要解决以下问题:
系统架构
1. 资源管理层(Resource Management)
组件: ResMan + Agents
一个Galaxy集群只有一个处于工作状态的ResMan,负责容器的调度,为每个容器找到满足部署资源要求的机器;
ResMan通过和部署在各个机器上的Agent通信,来创建和销毁容器;
容器: 一个基于linux cgroup和namspace技术的资源隔离环境;
容器里默认会启动AppWorker进程,是容器内的第一个进程,也就是根进程;
ResMan不暴露给普通用户接口, 仅供内部组件以及集群管理员使用;
2. 服务管理层 (Service Management)
组件: AppMaster + AppWorkers
AppMaster是外界用户操作Galaxy的唯一入口;
一个Galaxy集群通常只有一个AppMaster,负责服务的部署、更新、启停和状态管理,把服务实例分发到各个机器上的容器内启动并跟踪状态;
AppMaster通过调用ResMan的RPC接口创建容器,容器内自动拉起AppWorker进程;
容器内的AppWorker进程通过和AppMaster进程通信,获得需要在容器内执行的命令,包括部署、启停、更新等等;
AppWorker会汇报服务的状态给AppMaster,例如托管的服务是否在正常运行,进程退出码等;
调度逻辑
用户提交的Job内容主要是两部分:资源需求 + 程序描述
资源需求: CPU核数、内存大小、磁盘容量、机器Lable、端口范围、mount路径
程序描述: 部署命令、启动命令、停止命令、更新命令、版本号
1. ResMan的调度逻辑
ResMan通过定时查询Agent,获得每个Agent上面可分配的资源
ResMan不断检查当前是否有处于Pending状态的容器, 寻找有资源的Agent创建容器;
创建失败的容器,又进入Pending状态,等待重新调度;
不符合预期的容器, ResMan命令Agent销毁, 重新进入Pending状态;
ResMan确保容器的个数始终符合用户的需求;
2. AppMaster的调度逻辑
AppMaster等待AppWorkers的定时汇报;
如果AppWorker汇报的服务状态不符合AppMaster的预期,则AppMaster返回一些命令让AppWorker执行;
容错
服务发现
服务更新
权限管理和quota管理模型
系统依赖