重磅推荐
【产品特色】


【编辑推荐】

本书展示了如何通过构建操作器来扩展Kubernetes的控制平面和API,帮助运维团队和应用程序开发人员可靠地部署和管理关键的服务及组件。
操作器是一种打包、部署与管理Kubernetes应用程序的方式。操作器能够为Kubernetes添加应用程序特有的技术,从而降低自动化复杂的有状态应用程序的难度。本书通过鲜活生动的例子向读者展示了操作器的工作方式,以及如何使用操作器框架和SDK构建操作器。
操作器非常熟悉应用程序的内部状态,能够协调应用程序的安装与升级,修复故障,并自动化充满重复性或精心策划的维护工作。本书向读者展示了如何通过构建操作器来扩展Kubernetes的控制平面和API,帮助运维团队和应用程序开发人员可靠地部署和管理关键的服务及组件。
“Kubernetes已然成为世界上功能强大的容器编排平台,但其真正的力量隐藏在可扩展API及自动化框架的背后,它们将重新定义未来平台的构建与操作方式。而本书正是我们缺少的手册。”
—— Kelsey Hightower
Google云技术专家


【内容简介】

本书主要内容有:学习如何在Kubernetes集群上部署操作器。从使用到实现,全面探索操作器。探索操作器框架:操作器SDK、操作器生命周期管理器以及操作器度量。利用SDK的Go编程语言支持构建、打包和运行操作器。利用现有的Helm和Ansible资产打包和部署操作器。学习如何在Kubernetes集群上分发操作器。学习如何利用操作器实现网站可靠性工程实践。


【作者简介】

Jason Dobies是红帽的开发推广工程师,美国维拉诺瓦大学软件工程与高级项目的兼职教授。 Wood是红帽的开发推广工程师,主要从事使用开源软件构建实用程序计算的工作。


【目录】

目录
前言 . 1
第1 章 操作器为Kubernetes 带来的创新 7
1.1 Kubernetes 的工作方式 .8
1.2 示例:无状态Web 服务器 10
1.3 有状态的应用程序 11
1.4 操作器是软件SRE 11
1.5 操作器的工作原理 12
1.6 如何创建操作器 13
1.7 示例:etcd 操作器 14
1.8 操作器面向的对象 15
1.9 整装待发 16
第2 章 运行操作器 . 17
2.1 建立操作器实验室 17
2.1.1 集群版本要求 18
2.1.2 授权要求18
2.1.3 标准的工具和技术 19
2.1.4 建议的集群配置 20
2.1.5 检查集群的版本 22
2.2 运行一个简单的操作器 .22
2.2.1 常见的示例 .23
2.2.2 获取etcd 操作器的清单 24
2.2.3 CR:自定义API 端点 24
2.2.4 我是谁:定义操作器的服务账号 25
2.2.5 部署etcd 操作器 29
2.2.6 声明etcd 集群 30
2.2.7 练习使用etcd 32
2.2.8 扩展etcd 集群 33
2.2.9 故障与自动恢复 34
2.2.10 升级etcd 集群 36
2.2.11 清理 .39
2.3 小结 .39
第3 章 构建在Kubernetes 接口上的操作器 . 41
3.1 标准伸缩:副本集资源 .41
3.2 自定义资源 43
3.3 自定义控制器 .43
3.4 操作器的范围 .44
3.4.1 命名空间范围 44
3.4.2 集群范围的操作器 45
3.5 授权 .45
3.5.1 服务账号45
3.5.2 角色 46
3.5.3 角色绑定47
3.5.4 集群角色与集群角色绑定 47
3.6 小结 .47
第4 章 操作器框架 . 49
4.1 操作器框架的起源 49
4.2 操作器成熟度模型 50
4.3 操作器SDK .51
4.4 操作器生命周期管理器 .52
4.5 操作器度量 53
4.6 小结 .54
第5 章 示例应用程序:访客网站 55
5.1 应用概况 56
5.2 使用清单安装 .57
5.2.1 部署MySQL 58
5.2.2 后端 60
5.2.3 前端 63
5.3 部署清单 65
5.4 访问访客网站 .65
5.5 清理 .66
5.6 小结 .66
第6 章 适配器操作器 . 67
6.1 Helm 操作器 69
6.1.1 构建操作器 .70
6.1.2 完善CRD 75
6.1.3 检查操作器的权限 75
6.1.4 运行Helm 操作器 75
6.2 Ansible 操作器 76
6.2.1 构建操作器 .77
6.2.2 完善CRD 80
6.2.3 检查操作器的权限 80
6.2.4 运行Ansible 操作器 80
6.3 测试操作器 81
6.4 小结 .82
6.5 补充阅读 82
第7 章 使用操作器SDK 构建Go 语言的操作器 . 83
7.1 初始化操作器 .84
7.2 操作器的范围 .85
7.3 自定义资源定义 87
7.3.1 定义Go 类型 .88
7.3.2 CRD 清单 90
7.4 操作器权限 90
7.5 控制器 91
7.6 编写操作器的技巧 94
7.6.1 检索资源94
7.6.2 创建子资源 .96
7.6.3 删除子资源 .99
7.6.4 子资源的命名 .101
7.6.5 幂等性 101
7.6.6 操作器的影响 .102
7.7 在本地运行操作器 .103
7.8 访客网站示例 104
7.9 小结 105
7.10 补充阅读 106
第8 章 操作器生命周期管理器 107
8.1 OLM 自定义资源 108
8.1.1 集群服务版本 .108
8.1.2 目录源 109
8.1.3 订阅 .109
8.1.4 安装计划 110
8.1.5 操作器组 110
8.2 安装OLM 111
8.3 使用OLM 113
8.3.1 探索操作器 119
8.3.2 删除操作器 121
8.4 OLM 捆绑包的元数据文件 121
8.4.1 自定义资源定义 122
8.4.2 集群服务版本文件 122
8.4.3 包清单文件 123
8.5 编写集群服务版本文件 123
8.5.1 生成文件的骨架 123
8.5.2 元数据 125
8.5.3 操作器拥有的CRD .127
8.5.4 操作器依赖的CRD .131
8.5.5 安装模式132
8.5.6 版本和更新 133
8.6 编写包清单文件 .134
8.7 本地运行 .135
8.7.1 前提条件135
8.7.2 构建OLM 捆绑包 .140
8.7.3 通过OLM 安装操作器 142
8.7.4 测试正在运行的操作器 .144
8.8 访客网站操作器示例 144
8.9 小结 145
8.10 补充阅读 145
第9 章 操作器的理念 147
9.1 每个应用程序的SRE 147
9.2 不劳而获 .148
9.2.1 自动化:计算机自动工作 148
9.2.2 徒劳无功:没有持久价值的工作 .149
9.2.3 扩展的痛点:随着系统扩展不断加重的工作 .149
9.3 操作器:Kubernetes 应用程序可靠性工程 150
9.3.1 管理应用程序的状态 151
9.3.2 发送到软件的黄金信号 .151
9.4 高度成功的操作器的七个习惯 153
9.5 小结 155
第10 章 亲身参与 . 157
10.1 功能请求和报告错误 .158
10.2 贡献代码 159
10.3 共享操作器 .159
10.4 小结 160
附录A 作为集群内部的部署运行操作器 . 161
附录B 自定义资源验证 163
附录C 基于角色的访问控制 . 167
作者介绍 171
封面介绍 171


【前言】

前言
Kubernetes 是一款流行的容器编排器。它将许多计算机整合成一个大型计算资源,并建立了一种通过Kubernetes 应用程序编程接口(API)寻址资源的方法。Kubernetes 是起源于Google 的开源软件,在云原生计算基金会(Cloud Native Computing Foundation,CNCF)的带领下,通过众多合作者过去五年的努力开发而成。
操作器扩展了Kubernetes,能够自动化特定应用程序整个生命周期的管理。操作器不仅可以作为Kubernetes 上分发应用程序的打包机制,而且还可以监视、维护、恢复和升级部署的软件。
本书面向的读者对象
如果你有在Kubernetes 集群上部署应用程序的经验,那么一定很熟悉构建操作器模式所面临的难题和诉求。如果你有在编排集群之外维护基础服务(如数据库和文件系统)的经历,并且渴望将其带入社区,那么本书一定非常适合你。
本书的主要内容
本书介绍了什么是操作器,以及如何利用操作器扩展Kubernetes API。书中展示了如何部署和使用现有的操作器,以及如何使用红帽的操作器框架为你的应用程序创建和分发操作器。此外,本书还介绍了有关设计、构建和分发操作器的良好实践,以及将网站可靠性工程(SRE)原则运用到操作器的理念。第1 章首先介绍了操作器及其概念。接下来,介绍了一些获得访问Kubernetes集群的方法,以供在后续章节的练习中使用。在成功运行集群之后,本章介绍了操作器的部署,并观察应用程序发生故障、扩展或升级到新版本时操作器的行为。
在接下来的几章中,我们将探索操作器SDK,并向你展示如何利用SDK 来构建操作器,以帮助示例应用程序成为Kubernetes 的一流公民。在对实践基础有了基本了解之后,我们还将讨论操作器所应用的SRE 理念及其共同目标,即降低运维的工作量和成本,提高服务可靠性,将团队从日复一日地维护工作中解脱出来,激励团队成员的创新。
操作器框架与SDK
操作器模式源自CoreOS(https://coreos.com),这是一种自动化Kubernetes集群上日益复杂的应用程序的方法,包括管理Kubernetes 本身及其核心的etcd 键值存储(https://github.com/coreos/etcd)。在被红帽收购后,操作器一直在不断发展,终于2018 年发布了开源的操作器框架和SDK。本书的示例使用了红帽的操作器SDK,以及操作器框架所结合的分发机制。
其他操作器工具
操作器的社区在不断地发展,单是红帽分发频道就容纳了对应于众多供应商和项目应用程序的一百多个操作器。除此之外,还有其他几种操作器的构建工具。虽然本书没有详细讨论这些工具,但是在你阅读完本书之后,可以将它们与操作器SDK 和框架进行比较。其他可用于构建操作器的开源工具包括Python 版的Kopf(https://oreil.ly/JCL-S)、面向Kubernetes 项目的Kubebuilder(https://oreil.ly/8zdbj)以及Java 版的操作器SDK(https://oreil.ly/yXhVg)。
排版约定
本书使用了下述排版约定。
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和扩展名。
等宽字体(Constant Width)
表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。
加粗等宽字体(constant width bold)
表示应该由用户输入的命令或其他文本。
等宽斜体(constant width italic)
表示应该由用户输入的值或根据上下文确定的值替换的文本。
使用代码示例
你可以通过如下链接下载本书的补充材料(代码示例,练习等):https://github.com/kubernetes-operators-book/
如果你对本书代码示例的使用有任何技术问题或困难,请发送电子邮件到:bookquestions@oreilly.com
本书的目的是帮助你完成工作。一般来说,你可以在自己的程序或者文档中使用本书附带的示例代码。你无需联系我们获得使用许可,除非你要复制大量的代码。例如,使用本书中的多个代码片段编写程序就无需获得许可。但以CD-ROM 的形式销售或者分发O’Reilly 书中的示例代码则需要获得许可。回答问题时援引本书内容以及书中示例代码,无需获得许可。在你自己的项目文档中使用本书大量的示例代码时,则需要获得许可。
我们不强制要求署名,但如果你这么做我们将深表感激。署名一般包括书名、作者、出版社和国际标准书号。例如:“Kubernetes Operators by Jason Dobies and Wood (O’Reilly). Copyright 2020 Red Hat, Inc.,978-1-492-04805-3”。
如果你觉得自身情况不在合理使用或上述允许的范围内,请通过邮件和我们联系,地址是 permissions@oreilly.com。

如果你对本书有一些评论或技术上的建议, 请发送电子邮件到:
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。
致谢
本书得以付梓,我们要感谢红帽以及OpenShift Advocacy 团队的大力支
持,特别是Ryan Jarvinen 给予的全方面协助。感谢Anish Asthana、Evan
Cordell、Michael Gasch、Michael Hausenblas、Shawn Hurley 和Jess Males,
感谢你们为本书的审核、检查、建议以及其他工作所付出的努力,本书的内
容才更加完善和连贯。


返回顶部