描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787519864415
在过去的十年里,技术发生了很大的变化。数据是热门话题,云无处不在,许多组织都需要某种形式的自动化。在这场变革中,Python发展成为世界上流行的语言之一。这本实用的资料将向你展示如何使用Python来完成Linux系统的日常管理任务,如何使用当下火热的DevOps工具,包括Docker、Kubernetes和Terraform。
对数百万专业人士来说,学习如何与Linux交互及实现自动化是必不可少的技能。通过这本书,你将学会如何使用容器开发软件、解决问题,以及如何监控、测试、负载测试和操作你的软件。想寻找借助Python解决问题的有效方法?看这本书没错。
- 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
次,Noah 在海中游泳,突然一波海浪袭来,把他卷入深水,无法呼吸。他挣扎着,奋力游出水面,可是海浪一波未平一波又侵袭而来。他的体力渐渐不支,慢慢沉入海中。而他没有放弃,还在拼命挣扎,但是海浪并没有停歇的意思。在与海浪的殊死搏斗中,他的体力所剩无几,他不知道自己会不会命丧于此。他无法呼吸,浑身无力,真害怕自己会溺水身亡。直面死亡的恐惧使他认识到,要想活命就必须保存体力、随波逐流,不能一味挣扎。
不使用DevOps 的初创企业就像Noah 那一次的经历一样,让人心惊胆战。生产环境中的火情频繁,几个月得不到解决;一切都是手动操作的,连续几天被警报消息吵醒……这样的问题持续下去,牺牲的只能是你的健康。脱离死亡漩涡的出路就是DevOps。
万事开头难,逐个解决问题,总有一天能打通整个环节。可以先搭建一个服务器,着手测试代码,并把目前手动执行的任务自动化。一定要做点什么,做什么都可以,重要的是行动。先把步走稳,而且要实现自动化。
初创企业,也可以说所有公司面临的一个共通性问题是,总想寻求“救世主”来解决问题。性能有瓶颈:“我们需要性能工程师”;销售不利:“我们需要首席营收官”;部署流程不畅:“我们需要DevOps 工程师”。
在某公司,Noah 的一个项目持续了一年多,期间使用不同语言重写了三次Web 应用。
现在只需要找一个“性能工程师”扫尾了。记得当时只有笔者初生牛犊不怕虎,问了句“性能工程师是做什么的”。性能工程师负责解决一切弹性伸缩问题。那一刻,Noah 突然认识到,他们是在寻找“救世主”。对救世主的依赖能揭示新产品或初创企业危机四伏的状况。连自己都拯救不了的人何谈拯救整个公司。
在其他一些公司,Noah 经常听到这样的抱怨:“要是能雇一个资深Erlang 工程师多好”“要是能雇一个人帮我们增加营收多好”“要是能雇一个人教我们规范财务制度多好”“要是能雇一个Swift 开发者多好”……难道多雇这么一个人,你的初创企业或新产品就能存活下来吗?即便真有这样的救世主,也要找到症结所在方能力挽狂澜。
对于寄希望于雇一位性能工程师的公司来说,真正的症结在于技术监督不力,在于用人不当(对真正能解决问题的人大喊大叫是解决不了问题的)。工作表现不好的人就解雇,让知道如何解决问题的团队成员发声,推翻当前的工作清单从头来过,调入合格的工程管理人员,这样性能问题将迎刃而解,根本不用救世主降临。
在创业的路上,不要指望别人;你和你所在的团队要设法保护自己,通力合作,规范流程,笃信未来。遇到问题,不是再雇一个人就能解决的;出现问题,要客观、认真地分析,找出根源所在,一步一步地行动,终找到解决方案。求人不如求己,根本没什么救世主。
就像在风暴中即将溺水的人一样,能拯救你(或公司)的人只有你自己。你就是公司要找的那个救世主,或许你会发现,你的同事也是。
混乱的状况也是有出路的,且听我们慢慢道来。
DevOps 在笔者心中的含义
软件行业中很多抽象的概念是无法准确定义的,云计算、敏捷和大数据就是如此,这些概念如何定义,取决于参与讨论的是哪些人。鉴于此,笔者不打算给DevOps下一个严格的定义。下面简单说一下DevOps 出现的必然因素:
• 开发和运维团队双向合作。
• 把几天甚至几周的运维任务精简到几分钟到几小时。
• 让开发人员积极参与,不然还是开发与运维各自为战。
• 运维人员需要具备一定的开发技能,至少要懂Bash 和Python。
• 开发人员需要具备一定的运维技能。开发人员的职责不限于编写代码,还要负责把系统部署到生产环境并监控异常。
• 自动化、自动化、自动化。不掌握开发技能无法准确实现自动化,不掌握运维技能无法正确实现自动化。
• 转变观念,让开发人员掌握话语权,至少要能自主部署代码。
• 可通过CI/CD 流水线实现。
• GitOps。
• 在开发和运维部门之间共享一切(工具、知识等)。
• 在设计、实现、部署和自动化上持续协作,合作是成功的基石。
• 不能自动化执行的操作让人心里不踏实。
• 文化:等级制度< 流程。
• 多个微服务> 巨型单体。
• 持续部署系统是软件团队的核心和灵魂。
• 没有救世主。
• 持续交付不是可选项,而是必达的命令。
如何阅读本书
本书可按任意顺序阅读。随便翻看一章,你都会找到对你的工作有所帮助的内容。有经验的Python 程序员可以跳过第1 章。如果你对惨痛经验、案例分析和人物访谈感兴趣,可以先阅读后一章。
内容结构
本书内容按讨论话题的不同分为以下几部分。
部分介绍Python 基础,涵盖语言基础知识、文件和文件系统的自动化处理及命令行工具的编写。
第二部分讨论运维技术,涵盖Linux 实用程序、包管理、构建系统、监控和监测,以及自动化测试。这些是胜任DevOps 工作的技能。
第三部分介绍云技术基础,涉及云计算、IaC、容器技术、Kubernetes 和Serverless。
目前,软件行业紧缺掌握云技术的人才。掌握这一部分的知识,你的薪水和事业都将更上一层楼。
第四部分讨论数据处理,在DevOps 的背景下介绍机器学习运维和数据工程。这一部分还有一个完整的演练项目,你可以使用Flask、Sklearn、Docker 和Kubernetes实践机器学习模型的构建、部署和落地。
第五部分即后一章,是DevOps 惨痛经验、案例分析、人物访谈。这一章适合睡前阅读。
Python 基础
• 第1 章 Python DevOps 基础知识。
• 第2 章 文件和文件系统自动化处理。
• 第3 章 使用命令行。
运维技术
• 第4 章 Linux 实用程序。
• 第5 章 包管理。
• 第6 章 持续集成和持续部署。
• 第7 章 监控和日志。
• 第8 章 pytest 在DevOps 中的应用。
云技术基础
• 第9 章 云计算。
• 第10 章 IaC。
• 第11 章 容器技术:Docker 和Docker Compose。
• 第12 章 容器编排:Kubernetes。
• 第13 章 Serverless 技术。
数据处理
• 第14 章 MLOps 和机器学习工程。
• 第15 章 数据工程。
案例分析
• 第16 章 DevOps 惨痛经验和人物访谈。
排版约定
本书采用下述排版约定:
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和扩展名。
等宽字体(Constant Width)
表示程序清单,在段落中出现则表示程序元素,如变量、函数名、数据库、数据类型、环境变量、语句和关键字。
粗体等宽字体(Constant Width Bold)
表示命令或其他由用户直接输入的文本。
斜体等宽字体(Constant Width Italic)
表示应该替换成用户提供的值,或者由上下文决定的值。
使用代码示例
本书的补充材料(代码示例、练习题,等等)可到https://pythondevops.com 下载。另外,可到Pragmatic AI Labs 的YouTube 频道(https://oreil.ly/QIYte)中观看与本书代码相关的DevOps 内容。
如有技术疑问想与作者探讨,或者在使用代码示例过程中遇到问题,请发电子邮件到[email protected]。
本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无须联系我们获得许可。例如,用本书的几个代码片段写一个程序无须获得许可,销售或分发O’Reilly 图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无须获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。
我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。例如:“Python for DevOps by Noah Gift, Kennedy Behrman, Alfredo Deza, and Grig Gheorghiu. (O’Reilly). Copyright 2020 Noah Gift,Kennedy Behrman, Alfredo Deza, Grig Gheorghiu, 978-1-492-05769-7.”。
如果你觉得自己对示例代码的用法超出了上述许可的范围,请通过[email protected] 与我们联系。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们有一群独家专家和创新者,他们通过图书、文章、会议和在线学习平台分享知识和技术。O’Reilly 的在线学习平台提供按需访问的直播培训课程、详细的学习路径、交互式编程环境,以及由O’Reilly 和其他200 多家出版社出版的书籍和视频。详情请访问http://oreilly.com。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
勘误、示例和其他信息可到oreil.ly/python-for-devops 上获取。
对于本书的评论或技术性问题,请发送电子邮件到:[email protected]
要了解O’Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:
http://www.oreilly.com
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
首先,笔者要感谢本书的两位主要技术审校。
位是Wes Novack,他是一名架构师和工程师,擅长公有云系统和Web 级SaaS应用。他负责设计、构建和管理复杂的系统,为托管在AWS 和GCP 上使用不同语言的大型微服务生态系统实现高可用性基础设施、持续交付流水线和快速发布。Wes 使用不同的语言、框架和工具定义Iac、推动自动化及减少劳作。他在技术社区十分活跃,并积极参与教学、研讨会和会议;他还是Pluralsight 视频教程的讲师。Wes 是DevOps 领域文化– 自动化– 精益– 度量– 分享(culture, automation, lean,measurement, Sharing,CALMS)模型的倡导者。他的Twitter 账号是@WesleyTech,博客地址是https://wesnovack.com。
第二位是Brad Andersen,他是一名软件工程师和架构师,已从事软件设计和开发30 年。他是变革和创新的引路人,曾在各种企业组织和初创企业中担任领导职务和开发人员。Brad 目前在加利福尼亚大学伯克利分校攻读数据科学硕士学位。Brad 的更多信息见他的LinkedIn 个人资料。
笔者还要感谢Jeremy Yabrow 和Colin B. Erdman,感谢他们提供的建议和反馈。
Noah
感谢与我合写本书的Grig、Kennedy 和Alfredo。与如此高效的团队合作真是让人心旷神怡。
Kennedy
感谢与我合写本书的各位,与你们合作特别愉快。感谢家人对我的耐心和理解。
Alfredo
写作本书的九年前,即2010 年,我找到了人生份软件工程工作。那一年我31 岁,没有大学学历,以前也没有从业经验,只能接受底薪,忍受没有医疗保险。我学到了很多,遇见了许多了不起的人,通过不懈地努力掌握了大量专业知识。那些年,如果没有人给我机会,没有人为我指明方向,我不可能有今天的成就。
感谢Chris Benson,他发现了我对知识的渴望,一直为我寻找学习的机会。
感谢Alejandro Cadavid,他发现我不辞辛劳,总是愿意做那些别人不愿意做的事。
在我感到心灰意冷,旁人觉得我一无是处时,是您帮我找到了工作。
Carlos Coll 带领我进入编程领域,在我自暴自弃时也没有放弃我。学习编程改变了我的生活,感谢Carlos 对我谆谆教导,督促我学习,指导我发布了人生个程序。
感谢Joni Benton,感谢他对我的信任,还帮我找到了份全职工作。
感谢Jonathan LaCour,他是一位鼓舞人心的老板,一直帮助我提升自我。您的建议珍贵无比。
感谢Noah,我们建立了深厚的友谊,您的指引是我巨大的动力源泉。我一直记得我们一起工作的日子,尤其是从头开始重新构建基础设施那次。在我还对Python 一无所知时,您的耐心和指导完全改变了我的生活。
后,特别感谢我的家人。感谢我的妻子Claudia,她从不怀疑我的学习能力和上进心,在我笔耕不辍时毫无怨言。感谢我的孩子们,Efrain、Ignacio 和Alana,我爱你们。
Grig
感谢所有开源软件的创作人员。没有他们,我们的工作将充满崎岖。同样感谢所有写作博文、免费分享知识的人。后,感谢与我合写本书的各位,这是一次充满乐趣的旅程。
“对这门语言做了出色介绍,深入剖析了所有对现代软件开发至关重要的技术领域。”
——Jeremy Yabrow
BeyondView公司工程总监
“读完本书你将掌握很多新知识、新技能,提高自己的DevOps实战水平。”
——Wes Novack
Pluralsight系统架构师
评论
还没有评论。