《基础设施即代码 云服务器管理》PDF下载

  • 购买积分:10 如何计算积分?
  • 作  者:(美)基夫·莫里斯(Kief Morris)
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2018
  • ISBN:9787115490636
  • 页数:240 页
图书介绍:本书旨在解释如何利用云计算时代基础设施即代码的方法来管理IT基础设施。主要内容包括:组织在采用新一代的基础设施技术经常掉进的陷阱以及避免这些陷阱的核心原则和基础设施即代码的关键实践;动态基础设施平台的性能和服务模型;提供、确认核心基础设施资源的工具;规定服务器、构建服务器模板和更新运行服务器的最佳实践和模型。

第一部分 基础 3

第1章 挑战与原则 3

1.1为什么采用基础设施即代码 3

1.2什么是基础设施即代码 4

1.3动态基础设施的挑战 5

1.3.1服务器蔓延 5

1.3.2配置漂移 6

1.3.3雪花服务器 6

1.3.4脆弱的基础设施 7

1.3.5自动化恐惧症 7

1.3.6侵蚀 8

1.4基础设施即代码的原则 8

1.4.1系统能够轻松复制 8

1.4.2系统是用完可扔的 9

1.4.3系统是一致的 10

1.4.4过程是可重复的 10

1.4.5设计经常变更 10

1.5实践 11

1.5.1使用定义文件 11

1.5.2自文档化的系统和流程 11

1.5.3一切版本化 12

1.5.4持续测试系统和流程 13

1.5.5小的变更,而不是批量变更 13

1.5.6让服务持续可用 13

1.6反脆弱性:超越“稳健性” 14

1.7结语 15

1.8下一步 15

第2章 动态基础设施平台 16

2.1什么是动态基础设施平台 16

2.2对动态基础设施平台的要求 17

2.2.1可编程 17

2.2.2按需获取 19

2.2.3自服务 19

2.3平台提供的基础设施资源 19

2.3.1计算资源 20

2.3.2存储资源 20

2.3.3网络资源 22

2.4动态基础设施平台的类型 23

2.4.1公有IaaS云 23

2.4.2社区IaaS云 23

2.4.3私有IaaS云 23

2.4.4反模式:手摇云 24

2.4.5混合云服务 24

2.4.6裸机云 24

2.5如何选择动态基础设施平台 25

2.5.1公有还是私有 25

2.5.2云的可移植性 27

2.6与云和虚拟化的“机械通感” 29

2.7结语 30

第3章 基础设施定义工具 31

3.1选择基础设施即代码的工具 31

3.1.1需求:脚本接口 32

3.1.2需求:无人值守的命令行工具 32

3.1.3需求:支持无人值守的执行 33

3.1.4需求:外部化配置 34

3.2配置定义文件 36

3.3使用基础设施定义工具 37

3.3.1用过程化脚本置备基础设施 38

3.3.2声明式定义基础设施 40

3.3.3使用基础设施定义工具 41

3.3.4配置服务器 41

3.4配置注册表 42

3.4.1轻量级配置注册表 42

3.4.2配置注册表是CMDB吗 43

3.4.3 CMDB的审计与修复反模式 44

3.4.4 CMDB的基础设施即代码方式 44

3.5结语 44

第4章 服务器配置工具 45

4.1自动化服务器管理的目标 45

4.2具有不同的服务器管理功能的工具 46

4.2.1创建服务器的工具 46

4.2.2配置服务器的工具 47

4.2.3打包服务器模板的工具 48

4.2.4在服务器上运行命令的工具 49

4.2.5从中央注册中心获取配置 50

4.3服务器变更管理模型 51

4.3.1临时变更管理 51

4.3.2配置同步 51

4.3.3不可变的基础设施 51

4.3.4容器化服务 52

4.4容器 52

4.4.1以容器方式和非容器方式管理Ruby应用程序 53

4.4.2容器是虚拟机吗 54

4.4.3使用容器而不是虚拟机 55

4.4.4运行容器 56

4.4.5安全和容器 56

4.5结语 58

第5章 基础服务概述 59

5.1基础设施服务和工具的考虑 59

5.1.1支持外部配置的工具优先 60

5.1.2假定基础设施是动态的工具优先 61

5.1.3具有云兼容许可的产品优先 61

5.1.4支持松耦合的产品优先 62

5.2团队之间共享服务 62

5.3监控:告警、指标和日志 63

5.3.1告警:出现问题时告诉我 64

5.3.2指标:收集和分析数据 65

5.3.3日志聚合和分析 65

5.4发现服务 66

5.4.1服务器端的服务发现模式 67

5.4.2客户端的服务发现模式 67

5.5分布式进程管理 67

5.5.1使用服务器角色编排进程 67

5.5.2使用容器编排进程 67

5.5.3调度短期任务 68

5.5.4容器编排工具 68

5.6软件部署 68

5.6.1部署流水线软件 68

5.6.2打包软件 69

5.7结语 70

第二部分 模式 73

第6章 置备服务器的模式 73

6.1服务器置备 74

6.1.1服务器的生命周期 74

6.1.2服务器都承载了什么 77

6.1.3服务器上东西的类型 77

6.1.4服务器角色 79

6.2创建服务器的模式 80

6.2.1反模式:手动制作服务器 80

6.2.2实践:将服务器创建参数放在脚本中 81

6.2.3反模式:热克隆服务器 82

6.2.4模式:服务器模板 82

6.2.5反模式:雪花工厂 82

6.3引导新服务器的模式 83

6.3.1推送引导 83

6.3.2拉取引导 84

6.3.3实践:对每个新服务器实例进行冒烟测试 84

6.4结语 85

第7章 管理服务器模板的模式 86

7.1供应模板:不能让别人来做吗 86

7.2使用模板置备服务器 87

7.2.1创建时置备服务器 87

7.2.2在模板中置备 88

7.2.3平衡模板和创建之间的置备工作 88

7.3构建服务器模板的流程 89

7.4原始镜像 90

7.4.1反模式:热复制服务器模板 90

7.4.2基于操作系统安装镜像烘焙模板 91

7.4.3基于供应镜像烘焙模板 91

7.4.4基于Unikemel构建模板 92

7.4.5在不启动服务器的情况下自定义服务器模板 92

7.5更新服务器模板 92

7.5.1重新烘烤模板 93

7.5.2烘焙新模板 93

7.5.3版本控制服务器模板 93

7.6 构建基于角色的模板 95

7.6.1模式:分层模板 95

7.6.2共享模板的基础脚本 96

7.7自动化服务器模板管理 96

7.7.1在烘焙前自定义服务器 96

7.7.2实践:自动测试服务器模板 97

7.8结语 97

第8章 服务器更新与变更模式 98

8.1服务器变更管理模型 99

8.1.1临时性变更管理 99

8.1.2持续配置同步 99

8.1.3不可变服务器 99

8.1.4容器化服务器 100

8.2通用模式和实践 100

8.2.1实践:最小化服务器模板 101

8.2.2实践:当服务器模板变更时更换服务器 101

8.2.3模式:凤凰服务器 101

8.3持续部署的模式与实践 102

8.3.1模式:无主服务器的配置管理 102

8.3.2实践:应用Cron 103

8.3.3持续同步流 104

8.3.4未配置领域 104

8.4不可变服务器的模式与实践 106

8.4.1服务器镜像作为制品 106

8.4.2使用不可变服务器简化确认管理工具 106

8.4.3不可变服务器流程 107

8.4.4使用不可变服务器引导配置 108

8.4.5事务性服务器更新 109

8.5管理配置定义的实践 109

8.5.1实践:保持配置定义最小化 109

8.5.2组织定义 110

8.5.3实践:使用测试驱动开发来驱动良好的设计 110

8.6结语 110

第9章 定义基础设施的模式 111

9.1环境 112

9.1.1反模式:手动制作的基础设施 112

9.1.2定义基础设施栈即代码 112

9.1.3反模式:每个环境单独的定义文件 114

9.1.4模式:可重用的定义文件 114

9.1.5实践:测试并推进栈定义 115

9.1.6自服务的环境 116

9.2组织基础设施 116

9.2.1反模式:单体栈 116

9.2.2迁移基础设施时避免“直接迁移” 118

9.2.3将应用程序环境分到不同的栈中 118

9.2.4管理栈之间的配置参数 119

9.2.5共享基础设施元素 120

9.2.6实践:应用程序代码和基础设施代码一起管理 122

9.2.7共享定义的方法 123

9.2.8实践:基础设施设计要与变更范围匹配 124

9.2.9示例:微服务的基础设施设计 125

9.3运行定义工具 128

9.4结语 128

第三部分 实践 131

第10章 基础设施的软件工程实践 131

10.1系统质量 132

10.1.1低质量的系统很难变更 132

10.1.2高质量的系统能更容易、更安全地变更 132

10.1.3基于代码的基础设施质量 133

10.1.4快速反馈 133

10.2基础设施管理的版本控制系统 133

10.3持续集成 134

10.3.1持续测试分支不是持续集成 134

10.3.2谁破坏了构建 136

10.3.3忽略失败的测试 137

10.3.4针对基础设施的持续集成 137

10.4持续交付 137

10.4.1集成阶段的问题 137

10.4.2部署流水线和变更流水线 138

10.4.3持续交付不是持续部署 139

10.5代码质量 140

10.5.1整洁代码 140

10.5.2实践:管理技术债务 140

10.6管理重大的基础设施变更 141

10.7结语 142

第11章 测试基础设施变更 143

11.1敏捷测试方法 144

11.1.1自动化测试提供快速反馈 144

11.1.2有机地构建一个测试套件 145

11.2构建测试套件:测试金字塔 145

11.2.1避免失衡的测试套件 146

11.2.2实践:尽可能在最低层级进行测试 147

11.2.3实践:仅实现需要的层级 148

11.2.4实践:经常删减测试套件 148

11.2.5实践:持续评审测试的有效性 148

11.3实现均衡的测试套件 149

11.3.1低层级测试 150

11.3.2中间层级测试 151

11.3.3高层级测试 154

11.3.4测试运维质量 155

11.4管理测试代码 156

11.4.1实践:将测试代码与所测代码放在一起 156

11.4.2反模式:反射测试 156

11.4.3隔离组件进行测试的技巧 157

11.4.4重构组件以便隔离 158

11.4.5管理外部依赖 158

11.4.6测试设置 159

11.5测试的角色和工作流 161

11.5.1原则:人们应该为所构建的东西编写测试 161

11.5.2编写测试的习惯 162

11.5.3原则:每个人都应该能够使用测试工具 162

11.5.4质量分析师的价值 162

11.5.5测试驱动开发 163

11.6结语 164

第12章 基础设施的变更管理流水线 165

12.1变更管理流水线的好处 166

12.2设计流水线的准则 166

12.2.1确保每个阶段的一致性 167

12.2.2对于每个变更都立即得到反馈 167

12.2.3在手动阶段之前运行自动阶段 168

12.2.4尽早获得类生产环境 168

12.3基本流水线设计 169

12.3.1本地开发阶段 169

12.3.2构建阶段 169

12.3.3发布配置制品 170

12.3.4自动化测试阶段 171

12.3.5手动验证阶段 172

12.3.6上线 173

12.3.7流水线的节奏 173

12.4使用流水线的实践 174

12.4.1实践:证明每个变更都对生产准备就绪 174

12.4.2实践:每个变更都始于流水线起点 175

12.4.3实践:出现错误时停止流水线 175

12.5扩展流水线到更复杂的系统 175

12.5.1模式:扇入型流水线 176

12.5.2实践:保持较短的流水线 179

12.5.3实践:解耦流水线 179

12.5.4集成模型 180

12.6处理组件之间依赖的技巧 181

12.6.1模式:库依赖 181

12.6.2模式:自置备的服务实例 183

12.6.3提供预发布的库构建 183

12.6.4为消费者提供服务的测试实例 184

12.6.5将服务的测试实例用作消费者 185

12.7管理组件间接口的实践 186

12.7.1实践:保证接口的向后兼容性 186

12.7.2实践:从发布解耦部署 186

12.7.3实践:使用版本相容 187

12.7.4实践:提供测试替身 187

12.7.5实践:用契约测试来测试提供者 188

12.7.6实践:用参考消费者来测试 188

12.7.7实践:提供者接口的冒烟测试 188

12.7.8实践:运行消费者驱动契约测试 188

12.8结语 189

第13章 基础设施团队的工作流 190

13.1任何可以自动化的都要自动化 190

13.1.1手动变更 191

13.1.2临时的自动化 191

13.1.3自主的自动化 192

13.1.4自主的自动化工作流 193

13.2使用本地沙箱 194

13.2.1使用本地虚拟化做沙箱 194

13.2.2具有本地测试的工作流示例 196

13.2.3使用虚拟化平台做沙箱 197

13.3代码库组织模式 197

13.3.1反模式:基于分支的代码库 198

13.3.2模式:每个组件一个主干 199

13.3.3模式:单一主干 199

13.4工作流的效率 199

13.4.1加快变更 199

13.4.2代码评审 200

13.4.3将治理融入工作流 200

13.5结语 202

第14章 动态基础设施的连续性 203

14.1服务连续性 204

14.1.1真实可用性 204

14.1.2用动态服务器池做恢复 205

14.1.3为动态基础设施设计软件 206

14.1.4为连续性划分系统 208

14.2零停机变更 208

14.2.1模式:蓝绿替换 209

14.2.2模式:凤凰替换 209

14.2.3实践:缩小替换的范围 210

14.2.4模式:金丝雀替换 211

14.2.5为零停机替换路由流量 212

14.2.6有数据的零停机变更 213

14.3数据连续性 214

14.3.1冗余地复制数据 214

14.3.2重新生成数据 215

14.3.3委托数据持久化 215

14.3.4备份到持久存储 215

14.4灾难恢复 216

14.4.1持续的灾难恢复 217

14.4.2灾备计划:为灾难做计划 218

14.4.3实践:优先重建而不是冷备份 218

14.4.4通过流水线持续监控 219

14.5安全 220

14.5.1自动掩盖危害 220

14.5.2以可靠的更新作为防护 221

14.5.3包的来源 221

14.5.4自动加固 222

14.5.5流水线中安全验证的自动化 223

14.5.6变更流水线的漏洞 223

14.5.7管理云账号的安全风险 224

14.6结语 225

第15章 基础设施即代码的组织要求 226

15.1演进式架构 226

15.1.1在实战中学习 228

15.1.2从先驱者流水线开始 228

15.2度量有效性 229

15.2.1首先对期望的结果达成一致 229

15.2.2选择有助于团队的度量指标 230

15.2.3跟踪和改善周期时间 230

15.2.4使用看板可视化工作 232

15.2.5回顾会议及事后分析 233

15.3组织授权用户 233

15.3.1划分功能模型的陷阱 233

15.3.2采取自服务模型 235

15.3.3承担全部责任:谁构建,谁运行 235

15.3.4组织跨职能团队 236

15.4持续变更管理的治理 237

15.4.1提供稳固的构建单元 237

15.4.2在流水线中证明运维就绪 238

15.4.3共享运维质量的所有权 238

15.4.4审查和审计自动化流程 238

15.4.5优化发现和修复问题的时间 239

15.5结语:永无止境 239

关于作者 240

关于封面 240