前言

与以往任何时候相比,现在的软件用户群体更大,其重要性也更突出。这两类需求通常被概括为扩展性(也可称为规模性)和可靠性。在过去的十年里,软件行业通过各种技术措施、基础设施以及类似DevOps译注1的开发文化举措来寻求软件的扩展性和可靠性。

其中一组常用的策略就是运维自动化:通过(编写)运维软件来运行你的软件,从而实现运维工作的自动化。重复性工作的自动化是网站可靠性工程(Site Reliability Engineering,SRE)的基石之一,SRE是一种用于IT运维的软件工程方法,O'Reilly出版社出版的Site Reliability Engineering一书系统地介绍了SRE的定义、原理和实践。DevOps和更新的GitOps译注2则将SRE的自动化思想应用于开发软件和构建软件的实践中。其中最简单的形式可能是:每当应用程序的源代码发生变化,就会触发自动构建和部署过程。

现代软件基础设施通过分布式计算寻求扩展性和可靠性。尽管实际上有非常多独立的计算机,但分布式计算能够让这么多独立的计算机像一台巨大的超级计算机一样工作。通过这种方式,整合在一起的超级计算机可以做更多的工作(扩展性),同时又可以迅速剔除潜在的故障点(可靠性)。

Kubernetes是一个管理分布式计算机上的应用程序的系统,它将应用程序封装在离散的、可以被快速替换的构件(称为容器)中。Kubernetes可以在不了解容器及其依赖项的情况下管理容器的运行地点和时间。因此,Kubernetes被称为容器编排系统。

OpenShift以Kubernetes为核心,将一组计算机(可以是物理机或虚拟机)整合成一个集群。组成集群的计算机称为节点。OpenShift定义了这些节点之间的关系,以及如何在这些节点上执行或运行工作负载。通过将核心分布式计算能力与使用它们的工具、策略和接口封装在一起,OpenShift能够帮助开发团队使用来源于DevOps和GitOps的最佳实践,并根据SRE规则实现重复流程的自动化处理。

本书的目标读者

如果你是一个熟悉数据结构和函数并知道如何将它们构建到应用程序中,但对容器、Kubernetes和应用平台还很陌生的软件开发人员,那么本书就是为你准备的。本书将告诉你如何使用OpenShift来构建、部署、扩展和管理应用程序,以及如何利用OpenShift的特性(比如构建触发器、流水线和自动伸缩器)来自动处理这些工作。

本书涵盖的内容

本书解释了什么是OpenShift以及如何使用它来构建应用程序、运行它们,并使它们能够通过业务需求改变、系统故障恢复和持续的新版本发布(新版本发布可以是功能修复或者新产品特性)等保持运行。

·第1章和第2章介绍OpenShift及其组件和基本概念。

·第3章告诉你如何在计算机上运行OpenShift,这样你就有一个虚拟集群来进行本书的练习。

·在第4章中,你将配置OpenShift来获取一个简单的Hello World应用程序的源代码,将其构建为一个容器镜像,并运行它。

·第5章介绍OpenShift流水线——一个用于持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD)的框架,并告诉你如何将流水线添加到集群中。

·在第6章中,你将部署一个具有多层架构和多个组件的更接近现实情况的应用程序。

·在第7章中,你将改造应用程序的后端模块添加新功能,改造好的后端模块能够保持会话之间的状态,将有状态数据存储到数据库中。

·第8章将告诉你如何通过手动和自动的方式检查、操作和扩展正在运行的应用程序,如何设置OpenShift以定期检查应用程序的健康状况,以及如何管理应用程序的新版本发布。

·第9章是对OpenShift的监控和告警功能的概要介绍。

·第10章分析OpenShift的自动化特性,通过让平台自动做重复性工作来消除人工操作。

排版约定

本书中使用以下排版约定:

斜体(Italic

表示新的术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体(Constant width)

用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。

粗体( Bold

显示应该由用户按字面意思直接输入的命令或其他文本。


该图示表示提示或建议。


该图示表示一般性说明。


该图示表示警告或注意。

示例代码

你可以从https://github.com/openshift-for-developers下载本书的补充材料(包括源代码、练习等)。

本书提供的代码是为了帮助你更好地理解本书的内容。通常,你可以在程序或文档中使用本书提供的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly图书提供的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。

非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:

OpenShift for Developers, Second edition,作者Joshua Wood和Brian Tannous,由O'Reilly出版,书号978-1-098-10336-1。

如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permission@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)

奥莱利技术咨询(北京)有限公司

本书配套网站https://oreil.ly/openshift-for-developer-2上列出了勘误表、示例以及其他信息。

如果你需要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn

关于书籍、课程和新闻的更多信息,请访问我们的网站http://oreilly.com

我们在Facebook上的地址:http://facebook.com/oreilly

我们在Twitter上的地址:http://twitter.com/oreillymedia

我们在YouTube上的地址:http://www.youtube.com/oreillymedia

致谢

我们要感谢Red Hat OpenShift团队,特别是OpenShift Developer Advocates小组,感谢他们在我们创作本书时提供的支持,以及自2011年OpenShift首次发布以来,他们为改进和增强OpenShift所做的不懈努力。在OpenShift从一个早期采用专用容器和容器编排技术的应用开发平台发展到后来采用Kubernetes作为应用平台核心的过程中,其目标始终如一:在现代大规模和可扩展的基础设施上实现应用程序运行的自动化和流程化,让开发人员专注于业务应用代码。而这也正是本书的目标。

我们也感谢那些曾经编辑、审核、提出建议的人,其中包括Jason Dobies、Daniel Hinojosa和Tero Ahonen。Sun Seng David Tan(https://github.com/sunix)创建了原始代码,我们在此基础上编写了本书的主要示例应用程序“Noted”。我们还要感谢家人和朋友,他们在我们创作本书时非常包容和支持我们。


译注1:DevOps,即开发运维一体化,开发人员需要分担维持应用程序运行的责任。

译注2:GitOps是一种云原生应用实现持续部署的方式,是一套使用Git来管理基础设施和应用部署、配置的最佳实践。