目 录
第1章 编排器概述 2
1.1 为什么从零开始实现一个编排器 2
1.2 苦乐参半的往日时光 3
1.3 什么是容器,它与虚拟机有何不同 4
1.4 什么是编排器 6
1.5 编排系统的组件 6
1.5.1 任务 7
1.5.2 作业 7
1.5.3 调度器 8
1.5.4 管理器 8
1.5.5 工作节点 8
1.5.6 集群 9
1.5.7 命令行接口 9
1.6 认识Cube 11
1.7 本书将使用哪些工具 12
1.8 关于硬件 13
1.9 本书未涉及的内容 15
1.9.1 分布式计算 15
1.9.2 服务发现 15
1.9.3 高可用性 15
1.9.4 负载均衡 16
1.9.5 安全性 17
本章小结 17
第2章 从思维模型到基础代码 18
2.1 任务框架 20
2.2 工作节点框架 22
2.3 管理器框架 24
2.4 调度器框架 25
2.5 其他框架 26
2.6 让框架运转起来 27
本章小结 30
第3章 为任务框架补充细节 31
3.1 Docker:通过命令行启动、停止和检查容器 32
3.2 Docker:通过API启动、停止和检查容器 34
3.3 任务配置 36
3.4 启动和停止任务 37
本章小结 44
第4章 Cube的工作节点们,团结起来 47
4.1 Cube的工作节点 47
4.2 任务与Docker 50
4.3 队列的作用 50
4.4 数据库的作用 51
4.5 计数任务 51
4.6 实现工作节点的方法 51
4.6.1 实现StopTask方法 52
4.6.2 实现StartTask方法 53
4.6.3 关于任务状态的插曲 54
4.6.4 实现RunTask方法 57
4.7 整合所有内容 58
本章小结 60
第5章 工作节点的API 61
5.1 工作节点API概述 62
5.2 数据格式、请求与响应 63
5.3 API结构体 65
5.4 处理请求 66
5.5 提供API 69
5.6 整合所有内容 70
本章小结 75
第6章 指标 76
6.1 应该收集哪些指标数据 77
6.2 从/proc文件系统获取的指标数据 78
6.3 使用goprocinfo收集指标数据 80
6.4 在API上暴露指标数据 84
6.5 整合所有内容 86
本章小结 88
第7章 管理器的引入 90
7.1 Cube管理器 91
7.2 Manager结构体 92
7.3 实现管理器的方法 93
7.3.1 实现SelectWorker方法 93
7.3.2 实现SendWork方法 95
7.3.3 实现UpdateTasks方法 96
7.3.4 向管理器添加任务 98
7.3.5 创建管理器 98
7.4 故障与弹性能力的讨论 99
7.5 整合所有内容 99
本章小结 104
第8章 管理器的 API 105
8.1 管理器API概述 105
8.2 路由 106
8.3 数据格式、请求和响应 107
8.4 API结构体 108
8.5 处理请求 109
8.6 提供API服务 111
8.7 提升便利性的几项重构 112
8.8 整合所有内容 113
本章小结 118
第9章 可能出现的问题 119
9.1 新场景概述 119
9.2 故障场景 120
9.2.1 应用启动失败 120
9.2.2 应用程序错误 121
9.2.3 资源问题导致的任务启动失败 121
9.2.4 Docker守护进程崩溃和重启导致的任务失败 121
9.2.5 机器崩溃和重启导致的任务失败 122
9.2.6 工作节点故障 122
9.2.7 管理器故障 122
9.3 恢复选项 122
9.3.1 从应用故障中恢复 123
9.3.2 从环境故障中恢复 123
9.3.3 从任务级故障中恢复 123
9.3.4 从工作节点故障中恢复 124
9.3.5 从管理器故障中恢复 125
9.4 实现健康检查 126
9.4.1 检查工作节点上的任务 126
9.4.2 在工作节点上实现任务更新 128
9.4.3 健康检查与重启 129
9.5 整合所有内容 133
本章小结 138
第10章 实现一个更复杂的调度器 140
10.1 调度问题 140
10.2 调度时应考虑的事项 141
10.3 调度器接口 141
10.4 将轮询调度器适配到调度器接口 143
10.5 使用新的调度器接口 145
10.5.1 向Manager结构体添加新字段 145
10.5.2 修改New帮助函数 146
10.5.3 修改管理器的多个方法 147
10.6 你注意到这个bug了吗 149
10.7 整合所有内容 150
10.8 E-PVM调度器 153
10.8.1 相关理论 153
10.8.2 实践中的应用 154
10.9 完成 Node 实现 158
10.10 使用E-PVM调度器 161
本章小结 162
第11章 实现任务的持久化存储 163
11.1 存储问题 163
11.2 Store接口 164
11.3 实现任务的内存存储 166
11.4 实现任务事件的内存存储 168
11.5 重构管理器以使用新的内存存储 169
11.6 重构工作节点 174
11.7 整合所有内容 178
11.8 引入BoltDB 179
11.9 实现持久化任务存储 180
11.10 实现持久化任务事件存储 184
11.11 将内存存储替换为持久化存储 187
本章小结 188
第12章 构建命令行接口 190
12.1 CLI的核心组件 191
12.2 引入Cobra框架 192
12.3 设置Cobra应用程序 192
12.4 理解新的main.go 193
12.5 理解root.go 193
12.6 实现worker命令 195
12.7 实现manager命令 200
12.8 实现run命令 203
12.9 实现stop命令 208
12.10 实现status命令 210
12.11 实现node命令 212
本章小结 215
第13章 展望未来 216
13.1 参与Kubernetes及相关工具的开发 216
13.2 管理器-工作节点模式与工作流系统 217
13.3 管理器-工作节点模式与集成系统 217
13.4 结束语 218
附录 环境设置 219
