Diego - cloud foundry新的容器管理系统 下图展示Diego如何处理请求:
- CC传递请求给stage,通过CC-Bridge运行app。
- CC-Bridge翻译staging在LRPs(Tasks and Long Running Processes)中运行请求,然后通过HTTP API向BBS(Bulletin Board System)提交请求
- BBS提交任务和LRPs给Diego Brain中的拍卖者(Auctioneer)
- 拍卖者通过竞拍将任务与LRPs分发给Cells
- 一旦拍卖者分配一下任务或者LRP给Cell, 一个进程内部的执行者就会在Cell中创建一个Garden容器。这个任务或者LRP就会在容器中运行
- BBS tracks想要LRPS,运行LRP实例,分配任务给Converger,Converger周期性分析这些信息,纠正差异保证ActualLRP和DesiredLRP计数器的一致性
- Metron Agent,输出日志,错误信息和度量信息给Loggregator.
Diego核心组建
核心组建运行和监控任务和LRPs。
Diego Brain
分发任务和LRPs给Diego Cells,同步ActualLRP计数器(真实LRP)和DesiredLRP计数器(期望LRP)保证容错和长期一致性,由Auctioneer和Converger两部分组成
Auctioneer
- 使用拍卖算法分发任务和LRPs
- 使用HTTP与Cell Reps通信
- 在BBS中使用一个锁防止一个拍卖者同时参与多个拍卖
Converger
- 从运行模式到分析快照,保证一致性和容错
- 同步DesiredLRP计数器和ActualLRP计数器,如果DesiredLRP 超过了 ActualLRP,Converger向Auctioneer请求开始一个拍卖,相反Converger发送一个停止消息给Rep
- 监控潜在的丢失的消息,如果需要的话重新发送
- BBS中维持一个锁,防止在同一时间汇集方法给一个Converger
Diego Cell Components
管理和维持任务与LRPs
Rep
- 代表一个Cell去竞拍
- Cell与BBS消息中介者
- 确保任务和LRPs在BBS中和容器中的表现一致
- 维持Cell在BBS中存在
- 让进程中的执行者(Executor)通过创建容器运行任务和LRPs
Executor
- 运行逻辑的进程
- 实现一般的执行方法
- 输出STDOUT 和STDERR给Cell中运行的Metron代理
Garden
- 提供跨平台的服务端与客户端去管理Garden容器
- 为容器实现定义garden-linux接口
Metron Agent
输出应用日志,错误和度量给LoggregatorDatabase VMs
Diego Bullentin Board System
- 维持实时的集群状态,包括所有的desired LRPs 运行LRP实例,和正在执行的任务
- 通过HTTP提供核心组件和扩展客户端远程调用API,包括SSH代理,CC桥接和路由发送
etcd
- 提供持久化的key-value数据存储
Access VMs
File Server
"Blob Store"SSH proxy
运行在实例容器中的SSH代理。Consul
- 提供动态服务注册与DNS负载
- 提供持久化存储,维持分布式锁和参与的组建
Consuladapter
etcd的客户端Cloud Controller Bridge
翻译app从指定的从CC发送给BBS的请求Stager
- 翻译CC给一般任务和LRPs的执行请求
- 任务完成时给CC回应
CC-Uploader
- 执行者上传给CC的中介者
- 把简单的HTTP post请求(Executor给CC的)翻译成复杂的martipart-form请求
Nsync
- 监听app请求通过BBS更新desiredLRPs计数器和更新DesiredLRPs
- 周期性的检查cc的每个app,保证DesiredLRPs计数器的正确性
TPS
- 提供给CC当前运行的LRPs的信息,cf apps的回应
- 监控ActualLRP的活动报告给CC
Platform-specific组建
Garden Backends
一个接口集合,任意平台指定的后端必须实现,包含以下动作 - 创建/删除容器
- 分配容器资源限制
- 打开和分配网络和端口给容器
- 文件复制进容器,复制出文件
- 容器内运行进程
- STDOUT STDERR数据输出容器
- 任意的元数据注释容器
- 容器快照,使可以快速重新部署
App lifecycle Binaries
以下三个平台特定的文件部署应用和管理其生命周期
- Builder,准备执行一个CF应用,CC-Bridge每次执行请求到来时把编译器当作一个任务运行,编译器做一些程序第一次运行前必须要做的事情
- Launcher 运行一个CF app。CC-Bridge把Launcher设置成一个DesiredLRP动作,Launcher使用正确的系统上下文,包括工作目录和环境变量执行开始命令行。
- Healthcheck, 容器内运行的监控运行着的CF app状态。CC-Bridge设置Healthcheck当作一个DesiredLRP监控动作。
其它组建
Route-Emitter
- 监控DesiredLRP和ActualLRP状态。当检测到变化时发送路由注册和注销消息给CF router
- 周期性发送整个路由表给router