前言
一次,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 内容。
如有技术疑问想与作者探讨,或者在使用代码示例过程中遇到问题,请发电子邮件到technical@pythondevops.com。
本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无须联系我们获得许可。例如,用本书的几个代码片段写一个程序无须获得许可,销售或分发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.”。
如果你觉得自己对示例代码的用法超出了上述许可的范围,请通过permissions@oreilly.com 与我们联系。
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 上获取。
对于本书的评论或技术性问题,请发送电子邮件到:bookquestions@oreilly.com
要了解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
感谢所有开源软件的创作人员。没有他们,我们的工作将充满崎岖。同样感谢所有写作博文、免费分享知识的人。最后,感谢与我合写本书的各位,这是一次充满乐趣的旅程。