基于Python的DevOps

基于Python的DevOps
作 者: 诺亚·吉夫特 肯尼迪·贝尔曼 阿尔弗雷多·德萨 格里格·乔治乌 安道
出版社: 中国电力出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Noah Gift是西北大学和杜克大学研究生院数据科学专业与工程项目的讲师和顾问。 Kennedy Behrman是一位资深顾问,专门为初创企业设计和实施云解决方案。 Alfredo Deza是一位软件工程师和开源软件开发者,他重建了公司的基础设施。 Grig Gheorghiu是一名程序员、研究实验室主任、系统/网络/安全架构师和软件测试工程师。

内容简介

·Python基础知识,简单介绍语言特性。 ·如何自动处理文本,编写命令行工具和自动处理文件系统。 ·Linux实用程序、包管理、构建系统、监控、监测和自动化测试。 ·云计算、IaC、Kubernetes和Serverless。 ·站在DevOps的角度探讨机器学习和数据工程。 ·构建、部署和优化一个机器学习项目。

图书目录

目录

前言 . 1

第1 章 Python DevOps 基础知识 11

1.1 安装和运行Python 12

1.1.1 Python shell 12

1.1.2 Jupyter Notebooks13

1.2 过程式程序设计 13

1.2.1 变量 14

1.2.2 基本的数学运算 15

1.2.3 注释 15

1.2.4 内置函数16

1.3 执行控制 17

1.3.1 if/elif/else .17

1.3.2 for 循环 .18

1.3.3 while 循环 20

1.4 处理异常 20

1.5 内置对象 21

1.5.1 对象是什么 .21

1.5.2 对象的方法和属性 22

1.5.3 序列 23

1.6 函数 .35

1.6.1 函数剖析36

1.6.2 函数是对象 .37

1.6.3 匿名函数38

1.7 使用正则表达式 39

1.7.1 搜索 39

1.7.2 字符集合40

1.7.3 字符类 41

1.7.4 分组 41

1.7.5 具名分组42

1.7.6 查找所有42

1.7.7 查找迭代器 .42

1.7.8 替换 43

1.7.9 编译 43

1.8 惰性求值 44

1.8.1 生成器 44

1.8.2 生成器推导 .45

1.9 更多IPython 功能 .46

1.9.1 在IPython 中运行UNIX shell 命令46

1.9.2 使用IPython 的魔法命令 47

1.10 练习题 .47

第2 章 文件和文件系统自动化处理 49

2.1 读写文件 49

2.2 使用正则表达式搜索文本 .59

2.3 处理大型文件 .61

2.4 加密文本 62

2.4.1 哈希和hashlib 63

2.4.2 使用Cryptography 库加密 63

2.5 os 模块 65

2.6 使用os.path 管理文件和目录 .67

2.7 使用os.walk 遍历目录树 70

2.8 使用pathlib 处理路径对象 71

第3 章 使用命令行 . 73

3.1 使用shell 73

3.1.1 使用sys 模块探知系统信息 73

3.1.2 使用os 模块处理操作系统 .74

3.1.3 使用subprocess 模块派生进程 .75

3.2 编写命令行工具 77

3.2.1 使用sys.argv .79

3.2.2 使用argparse .81

3.2.3 使用click .85

3.2.4 使用fire 90

3.2.5 实现插件系统 95

3.3 案例分析:使用命令行工具提速Python 96

3.3.1 使用Numba JIT 编译器 97

3.3.2 通过Python CUDA 使用GPU 99

3.3.3 使用Numba 真正多核多线程运行Python 代码 100

3.3.4 k 均值聚类算法 .101

3.4 练习题 .103

第4 章 Linux 实用程序 105

4.1 磁盘实用程序 106

4.1.1 衡量性能106

4.1.2 分区 .108

4.1.3 获取特定的设备信息 109

4.2 网络实用程序 111

4.2.1 SSH 隧道 111

4.2.2 使用Apache Benchmark(ab)评测HTTP . 112

4.2.3 使用molotov 做负载测试 . 113

4.3 CPU 实用程序 . 116

4.3.1 CPU 实用程序简介 116

4.3.2 使用htop 查看进程 . 116

4.4 使用Bash 和ZSH 118

4.4.1 自定义Python shell . 119

4.4.2 递归路径模式匹配 120

4.4.3 搜索和替换确认提示 120

4.4.4 删除Python 临时文件 122

4.4.5 列出和筛选进程 122

4.4.6 UNIX 时间戳 123

4.5 Python 与Bash 和ZSH 混合使用 124

4.5.1 随机密码生成器 124

4.5.2 这个模块是否存在 125

4.5.3 进入模块所在的目录 125

4.5.4 把CSV 文件转换成JSON 文件 .126

4.6 Python 单行程序 .127

4.6.1 调试器 127

4.6.2 这段代码的运行速度有多快 128

4.7 strace .129

4.8 练习题 .131

4.9 实操题 .132

第5 章 包管理 133

5.1 打包简介 .134

5.1.1 打包的重要性 .134

5.1.2 何时不需要打包 134

5.2 打包准则 .135

5.2.1 恰当的版本号 .135

5.2.2 更改日志136

5.3 选择一种策略 137

5.4 打包方案 .138

5.4.1 Python 原生包 138

5.4.2 Debian 包 145

5.4.3 RPM 包 153

5.5 使用systemd 管理服务 160

5.5.1 长时间运行的进程 161

5.5.2 创建项目161

5.5.3 systemd 单元文件 .163

5.5.4 安装单元164

5.5.5 处理日志166

5.6 练习题 .167

5.7 实操题 .168

第6 章 持续集成和持续部署 . 169

6.1 真实案例分析:把维护不善的WordPress 网站转换成Hugo 169

6.1.1 设置Hugo .171

6.1.2 把WordPress 文章转换成Hugo 文章 .172

6.1.3 创建并更新Algolia 索引 174

6.1.4 使用Makefile 编排流程 176

6.1.5 使用AWS CodePipeline 部署 .176

6.2 真实案例分析:使用Google Cloud Build 把Python 应用部署到

Google App Engine 中 178

6.3 真实案例分析:NFSOPS 185

第7 章 监控和日志 187

7.1 构建可靠系统的关键概念 187

7.2 不可变的DevOps 原则 188

7.2.1 集中处理日志 .188

7.2.2 案例分析:生产数据库塞满硬盘 .189

7.2.3 自建还是购买? 190

7.2.4 容错 .190

7.3 监控 192

7.3.1 Graphite .192

7.3.2 StatsD .192

7.3.3 Prometheus 193

7.4 监测程序 .197

7.4.1 监测程序概述 .197

7.4.2 命名约定200

7.5 日志 201

7.5.1 为什么很难 202

7.5.2 basicconfig 202

7.5.3 深度配置203

7.5.4 常用模式208

7.6 ELK 栈 .209

7.6.1 Logstash .210

7.6.2 Elasticsearch 和Kibana .212

7.7 练习题 .215

7.8 实操题 .216

第8 章 pytest 在DevOps 中的应用 217

8.1 测试小钢炮pytest 217

8.2 pytest 入门 .218

8.2.1 使用pytest 测试 218

8.2.2 与unittest 的区别 .220

8.3 pytest 特性 .222

8.3.1 conftest.py 223

8.3.2 出色的assert223

8.3.3 参数化 225

8.4 固件 226

8.4.1 入门 .227

8.4.2 内置固件229

8.5 基础设施测试 231

8.5.1 什么是系统验证 232

8.5.2 Testinfra 简介 .233

8.5.3 连接远程节点 .233

8.5.4 特性和特殊固件 237

8.5.5 案例 .238

8.6 使用pytest 测试Jupyter Notebooks 241

8.7 练习题 .242

8.8 实操题 .242

第9 章 云计算 243

9.1 云计算基础知识 .244

9.2 云计算的类型 246

9.3 云服务的类型 246

9.3.1 IaaS 247

9.3.2 MaaS 251

9.3.3 PaaS .251

9.3.4 Serverless 252

9.3.5 SaaS .255

9.4 IaC .256

9.5 持续交付 .256

9.6 虚拟化和容器 256

9.6.1 硬件虚拟化 256

9.6.2 SDN .257

9.6.3 SDS .257

9.6.4 容器 .257

9.7 分布式计算面临的挑战和机遇 258

9.8 云时代Python 的并发、性能和进程管理 260

9.9 进程管理 .261

9.9.1 使用subprocess 管理进程 261

9.9.2 使用multiprocessing 库解决问题 .263

9.9.3 使用Pool() 派生进程 264

9.9.4 FaaS 和Serverless 267

9.9.5 使用Numba 提升Python 的性能 267

9.9.6 使用Numba JIT 编译器 .267

9.9.7 使用高性能服务器 268

9.10 小结 269

9.11 练习题 269

9.12 实操题 270

第10 章 IaC 271

10.1 基础设施自动化工具分类 272

10.2 手动配置 274

10.3 使用Terraform 自动配置基础设施 .275

10.3.1 配置S3 bucket .276

10.3.2 使用ACM 配置SSL 证书 .279

10.3.3 配置Amazon CloudFront 分配 280

10.3.4 配置Route 53 DNS 记录 283

10.3.5 把静态文件复制到S3 中 284

10.3.6 删除使用Terraform 配置的所有AWS 资源 .285

10.4 使用Pulumi 自动配置基础设施285

10.4.1 为AWS 新建一个Pulumi Python 项目 286

10.4.2 为过渡堆栈创建配置值 291

10.4.3 配置一个ACM SSL 证书 291

10.4.4 配置Route 53 区域和DNS 记录 292

10.4.5 配置一个CloudFront 分配 .295

10.4.6 为网站的URL 配置一个Route 53 DNS 记录 296

10.4.7 创建并部署一个新堆栈 297

10.5 练习题 300

第11 章 容器技术:Docker 和Docker Compose 301

11.1 Docker 容器是什么 .302

11.2 创建、构建、运行及删除Docker 映像和容器 .302

11.3 把Docker 映像发布到Docker 注册处中 .306

11.4 使用相同的映像在不同的宿主机中运行Docker 容器 308

11.5 使用Docker Compose 运行多个Docker 容器 310

11.6 把Docker Compose 运行的服务移植到新主机和操作系统中 323

11.7 练习题 327

第12 章 容器编排:Kubernetes . 329

12.1 Kubernetes 相关概念简述 330

12.2 使用Kompose 根据docker-compose.yaml 创建Kubernetes 清单 331

12.3 使用minikube 把Kubernetes 清单部署到本地Kubernetes 集群 .333

12.4 在GCP 中使用Pulumi 创建GKE Kubernetes 集群 349

12.5 把Flask 示例应用部署到GKE 中 352

12.6 安装Helm chart Prometheus 和Grafana 359

12.7 销毁GKE 集群 .364

12.8 练习题 365

第13 章 Serverless 技术 367

13.1 把同一个Python 函数部署到三大云服务商中 .370

13.1.1 安装Serverless 框架 .370

13.1.2 把Python 函数部署到AWS Lambda 中 .370

13.1.3 把Python 函数部署到Google Cloud Functions 中 373

13.1.4 把Python 函数部署到Azure 中 380

13.2 把Python 函数部署到自托管的FaaS 平台中 384

13.2.1 把Python 函数部署到自托管的PaaS 平台的优势 384

13.2.2 把Python 函数部署到OpenFaaS 中 .385

13.3 使用AWS CDK 配置DynamoDB 数据表、Lambda 函数和

API 网关方法 .393

13.4 练习题 415

第14 章 MLOps 和机器学习工程 417

14.1 机器学习是什么 417

14.1.1 监督型机器学习 .417

14.1.2 建模 420

14.2 Python 机器学习生态环境 423

14.2.1 Python 机器学习框架和生态系统 423

14.2.2 PyTorch 深度学习 424

14.3 机器学习云平台 428

14.4 机器学习成熟模型 429

14.4.1 机器学习重点术语 .429

14.4.2 第1 层:问题构建、范围界定和问题定义 430

14.4.3 第2 层:持续交付数据 431

14.4.4 第3 层:持续交付净化数据 .432

14.4.5 第4 层:持续交付探索性数据分析 434

14.4.6 第5 层:持续交付传统机器学习和AutoML 434

14.4.7 第6 层:机器学习运作反馈环 435

14.5 使用Docker 和Kubernetes 部署sklearn Flask 应用 435

14.5.1 EDA 440

14.5.2 建模 441

14.5.3 调整GBM 缩放 442

14.5.4 拟合模型 .443

14.5.5 评估 444

14.5.6 adhoc_predict 445

14.5.7 JSON 工作流 446

14.5.8 缩放输入 .446

14.5.9 adhoc_predict 447

14.5.10 缩放输入 448

14.6 练习题 448

14.7 实操题 449

14.8 学习评价 449

第15 章 数据工程 . 451

15.1 小数据 452

15.1.1 小数据与大数据 .452

15.1.2 处理小数据文件 .452

15.2 写文件 453

15.3 读文件 453

15.4 使用生成器流水线逐行读取和处理 453

15.5 使用YAML .454

15.6 大数据 455

15.7 大数据工具、组件和平台 457

15.7.1 数据源 .458

15.7.2 文件系统 .458

15.7.3 数据存储 .459

15.7.4 实时流式采集 460

15.8 案例分析:自制数据流水线 461

15.9 Serverless 数据工程 462

15.9.1 使用AWS Lambda 处理CloudWatch 事件 463

15.9.2 使用Amazon CloudWatch 日志分析AWS Lambda 463

15.9.3 使用AWS Lambda 填充Amazon Simple Queue Service .464

15.9.4 连接CloudWatch 事件触发器 468

15.9.5 创建事件驱动型lambda .469

15.9.6 从AWS Lambda 中读取Amazon SQS 事件 .470

15.10 小结 .474

15.11 练习题 .475

15.12 实操题 .475

第16 章 DevOps 惨痛经验和人物访谈 . 477

16.1 产不出电影的电影厂 .478

16.2 推不出游戏的游戏坊 .480

16.3 耗时60 秒才启动的Python 脚本 .482

16.4 用缓存和智能监测程序浇灭火情 483

16.5 自动化会让你失业 484

16.6 DevOps 反模式 .485

16.6.1 反模式:没有自动化构建服务器 485

16.6.2 盲目行事 .486

16.6.3 协调难题不可避免 .486

16.6.4 没有团队合作 487

16.7 人物访谈 492

16.7.1 Glenn Solomon 492

16.7.2 Andrew Nguyen 493

16.7.3 Gabriella Roman .495

16.7.4 Rigoberto Roche .496

16.7.5 Jonathan LaCour .498

16.7.6 Ville Tuulos 500

16.7.7 Joseph Reis 502

16.7.8 Teijo Holzer 503

16.7.9 Matt Harrison 505

16.7.10 Michael Foord 507

16.8 一些建议 510

16.9 练习题 511

16.10 挑战题 . 511

16.11 毕业项目 511