图书目录

目    录

第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