# 《Kubernetes Operator 开发进阶》- 作者絮絮叨


## 今天聊啥

昨晚在京东上试着搜索关键字“Kubernetes Operator 开发进阶”，看到我的书终于上架了，百感交集。

（没有老泪纵横。你以为是我没有眼眶湿润？不，我说的是我没有老！）

这本书花费了我大约半年的心血。半年，没有周末，没有假期。去年的除夕和大年初一都没有休息，每天三小时，赶稿子。

今天，严肃认真地介绍下这本书吧！

严肃！严肃。严肃，算了，严肃不起来。还是随便唠唠吧。

咱就唠这么几个角度：

- 本书读者
- 推荐序
- 推荐语
- 本书简介
- 本书前言
- 封面由来
- 目录概览
- 历史故事
- **送书活动**

没错，是要送书的，如果这是你唯一关心的“点”，那就直接翻到结尾吧！

## 本书读者

本书适合这么几类读者：

1. 显示器太低，又不能伸缩，需要一本书垫一垫的；
2. 喜欢吃泡面，但是没有锅，需要一本书盖一盖的；
3. ……

**总结：本书用来垫显示器和盖泡面那是一绝！**

（不配图了，我不吃泡面，我的显示器也可以伸缩，哇咔咔）

---

[《江城》](https://book.douban.com/subject/7060185/)（豆瓣9.1分）的作者[彼得·海斯勒](https://zh.m.wikipedia.org/zh-sg/彼得·海斯勒)在书中写到这样一段话：

> 至于《江城》，我也觉得糟糕透顶。这本书似乎一文不值 ——不过小孩子的写作水平而已。我完全无所适从，也想不起我在书里表达了什么样的观点。后来我才知道，很多作家在完成了高强度的写作之后，都有过类似的崩溃体验，就好似十月怀胎的妈妈们一朝分娩，接着遭受产后抑郁的折磨。

此刻我其实也是“内心奔溃”的，我觉得我这本《Kubernetes Operator 开发进阶》一文不值。

爱因斯坦在不同的角度有过类似的表述：

> 用一个大圆圈代表我所学的知识，但是圆圈之外有那么多空白，对我来说意味着无知，而且圆圈越大，它的圆周就越大，它与外界空白的接触面也就越大。

所以在写这本书的过程中，我其实也在经历着这样的心路历程：

**“我感觉我懂一些东西了，可以写一本书。” -> “我才懂一点皮毛，谁给我的勇气写这本书？”**

所以在这里我不想去说这本书可以帮助哪些人学到多少知识达到什么地步之类的话。

哎😌，还是盖泡面吧。

## 推荐序

能够邀请到**邓洪超**和**任晶磊**两位大咖给本书作序，太幸运了！

看看他们是怎么说的吧~

### 推荐序1 - 邓洪超

> **邓洪超**：Operator 机制创始作者之一，CNCF 应用交付领域联席主席

经过作者多年的实践积累和长期的精心准备，这本书终于和大家见面了。我有幸作为本书的首批读者，同时也是最早参与研发Operator技术的工程师，内心是十分激动的：我不仅见证了这项技术被应用到越来越多的现实场景中，同时也看到这部分知识通过书籍等形式记录下来，造福更多的开发者。

说起Operator的历史，一开始它是为了解决如何在Kubernetes上部署有状态应用而发明的。Kubernetes早期设计上只能够部署无状态应用，而对于有状态应用像etcd、MySQL、Kafka等并没有优雅的部署方案。后来我们通过 Operator这一套机制，让管理有状态应用变得跟无状态应用一样简单。不仅如此，Operator的核心价值在于能够扩展 Kubernetes API，这也让越来越多的工作负载得以运行在Kubernetes上。在阿里落地Kubernetes的过程中，就通过 Operator机制将大规模服务部署成功，并诞生了OpenKruise项目。

本书我认为非常值得大家一读，主要有以下几点推荐理由：

首先，本书内容通俗易懂，有助于初学者快速学习相关知识，并且从开发者角度出发，每一个概念加入了相应的代码实例来辅助理解。

其次，本书提供了大量的实例操作，不仅可以直接提高读者开发技能，还能够帮助解决在实践生产中经常遇到的各种关键问题。书中这些内容具有很高的借鉴和推广意义。

另外，本书讲解有些内容时直接深入解析代码实现，让读者彻底理解其中原理。这对于有一定基础（如 client-go）的专业人士学习Kubernetes的各种细节和实践操作十分有利。

最后，本书系统性地讲述了Operator整个机制的原理和生态，而不是单一地解读某个工具或者服务。我们可以看到，以Kubernetes为基础的整套云原生技术被越来越多的企业所采用。这里面的每一项技术（如Operator、Helm、Kustomize 等）都不是孤立无关的。相反，串联好一整套云原生技术，站在新技术变革的肩膀上，才能发挥出不可预估的价值！

### 推荐序2 - 任晶磊

> **任晶磊**：思码逸创始人兼CEO，清华大学计算机系博士

我们有幸经历了几代虚拟化技术的演进和整合，见证了云原生技术的星火燎原。记得还在校园的时候，我跑去中关村的一家小公司实习，天天啃Xen的源代码。那一年，陈海波教授的团队发表了国内第一篇SOSP论文，做嵌套的虚拟化技术CloudVisor；同年，UC Berkeley的AMPLab在NSDI上发表了Mesos论文，后来衍生出Mesosphere和其上的容器编排系统Marathon。时隔不久，Google开源了Kubernetes，并在EuroSys上公开了其内部容器管理系统Borg和Omega的设计，它们可谓Kubernetes的前身。

在近十年激烈的市场竞争中，Kubernetes脱颖而出，事实上占据了比Mesos+Marathon更加优势的地位。Kubernetes最终获得了更广泛的社区和用户，这与它简洁的设计、强大的可扩展性、优秀的开发者体验密不可分。而这些Kubernetes的成功要素有一个重要的基石，就是它的Operator模式。Operator扩展了Kubernetes可应用和服务的场景，同时为开发者参与和扩展这些新场景提供了有效途径。

胡涛将他在GitHub和博客上连载的Kubernetes源码分析文章扩充升级为此书，系统介绍了Operator开发的知识。从设计到源码，从实例到项目，此书是国内这方面少有的原理与实践相结合的佳作。相信它能帮助国内开发者一瞥Kubernetes的精髓，学习和掌握Operator技术，既提升对云原生和容器系统的理解，又满足实际系统开发和运维的需要。胡涛的工作既立足Kubernetes在开发者社区中快速扩展的关键点，同时也为Kubernetes社区和生态添砖加瓦。

在思码逸，胡涛正在和我们一起打造DevOps工具链管理器DevStream，并已成功捐赠给CNCF，继续推动云原生技术的发展。与胡涛共事，我深知他言语幽默，常常思如涌泉，期待读者能够享受他在此书中飞扬的文字。

## 推荐语

没错，除了推荐序之外，还有**张磊**，**宋净超**，**王泽锋**，**周鹏飞**和**郑东旭**五位重磅大咖写了推荐语，荣幸之至！

### 推荐语1 - 张磊

> **张磊**：CNCF TOC 成员

Operator机制是云原生生态的一项关键创新，也是扩展、运维和二次编程Kubernetes项目的必备技能。本书对Operator机制进行了深入的源码级剖析和讲解，是一本不可多得的技术读物。

### 推荐语2 - 宋净超

> **宋净超**：Tetrate 布道师，云原生社区创始人

Kubernetes Operator就好比云原生应用的发动机引擎，这本书将为你揭开引擎盖，直击Operator细节，带你玩转云原生应用！

### 推荐语3 - 王泽锋

> **王泽锋**：华为云云原生开源负责人，Kubernetes资深维护者，CNCF大使，KubeEdge、Volcano、Karmada项目创始人

随着云原生技术的普及，其关键技术Kubernetes已经无处不在。而Operator概念的提出，Kubebuilder、 controller-runtime等项目的兴起，开启了全民定制Kubernetes的时代。本书从Operator模式、Kubernetes API机制、client-go工作原理等维度系统介绍了如何高质量地开发一个Operator应用，值得每个云原生的开发者阅读和学习。

### 推荐语4 - 周鹏飞

> **周鹏飞**：微软 Azure 产品经理，CNCF大使

Kubernetes是云原生时代的分布式操作系统，Kubernetes Operator能够帮助云原生开发者在此操作系统之上灵活开发和扩展新的API与应用。本书来自于胡涛多年的云原生开源项目参与经验和工业界实践经验的总结，为读者深入浅出地介绍了Operator相关的概念理论、源码解析和工具实操等。本书结合了大量的流程图与示例代码，帮助开发者快速理解和上手 Kubernetes Operator开发，是目前市面上较为稀缺的Kubernetes开发工具类实战宝典。

### 推荐语5 - 郑东旭

> **郑东旭**：百度CNCF BFE开源项目作者之一，《Kubernetes源码剖析》作者

2014年Kubernetes开源，2015年CNCF成立，云原生浪潮就此袭来。云原生技术持续发展多年，在应用逐步上云的今天，Operator一直是Kubernetes生态系统的重要组成部分，它旨在简化复杂有状态应用的管理，降低其云上的部署和维护成本。我相信这本《Kubernetes Operator 开发进阶》值得每一位与云计算技术相关领域的工程师阅读。

## 本书简介

> 下面这段文字是我写在《Kubernetes Operator 开发进阶》这本书扉页里的一段“简介”（是不是有点“书”的味道了？没有博客那么自由~）：

Kubernetes 是一个由Google开源的容器化应用编排系统，为容器化应用提供了强大的资源管理调度、服务发现、应用扩缩容、应用滚动更新与失败回滚等一系列功能。Kubernetes早在几年前就已经一统容器编排领域，成为了容器编排的事实标准，彻底颠覆了软件的开发、运维模式。随着以Kubernetes为中心所构建的云原生应用的不断流行，人们逐渐发现通过Kubernetes原生资源与控制器来管理复杂有状态应用变得越来越困难。后来Kubernetes开始支持自定义资源，接着又出现了Operator模式，最后Operator模式开始逐渐流行，成为了复杂有状态应用上云的事实标准。

本书详细讲解了Operator开发过程中所涉及的各个知识点，从简单的Operator示例应用入手，帮助读者快速上手Operator的开发流程，接着深入分析了client-go、Deployment控制器等的源码，并且通过一个进阶应用的开发过程进一步详细介绍了Operator开发的各方面知识，相信本书能够帮助读者轻松掌握Operator的开发技巧，深入理解Operator的底层原理等知识，进而在日常工作中能够更好地通过Operator实现各种复杂的应用治理逻辑的开发。

无论是云原生领域的开发工程师、测试工程师、运维工程师、软件架构师和技术经理，还是想要深入研究Kubenetes，掌握Kubernetes Operator开发技能的大、中院校相关专业学生，本书都会极具参考价值。

全书一共分为10个章， 3个部分。

**第一部分：入门篇（第1-2章）**

从Kubernetes的部署方式、发展历史、核心概念和基本操作等入手，首先帮助对Kubernetes不是非常熟悉的读者对Kubernetes是什么、怎么用等基础知识有一个整体的理解。然后通过一个入门级的Operator应用一步一步详细讲解了Operator开发的整个过程，帮助没有Operator开发经验的读者快速上手Operator开发，进而心中对Operator是什么、能干什么等有一个宏观的认识。

**第二部分：进阶篇（第3-8章）**

进阶篇是本书的核心部分。本篇从Kubernetes API的理解、使用等入手，接着详细了介绍Operator开发所依赖的底层核心工具库client-go的使用，进而花了较大篇幅详细分析了client-go中和Operator开发相关的模块源码，比如Workqueue、DeltaFIFO、Indexer、ListerWatcher、Reflector和Informer等等。然后又通过一个进阶项目详细介绍了Operator开发中所涉及到的各种进阶知识，最后详细分析了一个经典的控制器模式的应用，也就是Kubernetes原生的Deployment控制器的源码。

**第三部分：工具篇（第9-10章）**

本篇内容先详细介绍了云原生应用最常使用的多环境配置管理工具Kustomize和应用打包、管理工具Helm的核心概念、部署安装等基础知识，接着通过详细的操作示例演示了如何使用这两个工具。

## 本书前言

> 同样，书中的前言也分享给大伙看下：

我不知道你是怎么发现这本书的，不过我相信有很大的概率是你关注了我的个人公众号“胡说云原生”，然后认可我分享的技术文章，接着某一天从中得知我写了这本《Kubernetes Operator 开发进阶》，最后你决定支持一下这个默默写了好几年技术文章的“博主”，于是在网上下单买了这本书。假如你是我的粉丝，在这里我想对你一直以来的认可与支持表示最真诚的感谢！

在2013年划时代的项目Docker正式发布，让容器化技术进入大众视野。接着在2014年Kubernetes开源，2015年CNCF成立，云原生浪潮就此袭来，容器编排和管理系统开始蓬勃发展，进而开始了Kubernetes、Mesos、Swarm+Compose三分天下的局面。

我是在2016年下半年开始工作的（巧的是第一个Operator项目也是在2016年下半年诞生的），也就是CNCF成立后一年。毕业那年我去了H3C的云计算部门，有幸早早接触到了Kubernetes，然后在云原生的世界里摸爬滚打，走了无数弯路，从小白逐渐成长为一只“老鸟”，开始承担Kubernetes集群的维护、异常定位、优化等工作。后来凭借着在云原生领域的技术积累，在第二份工作的时候开始有机会参与整个云平台从0到1的建设。眨眼间从毕业到现在我已经工作了六年，这六年时间里我的每一份工作都围绕着“云原生”生态技术栈，仔细想来，我在企业里落地以Kubernetes为核心的云原生生态技术栈，其实也是以Kubernetes为核心的云原生生态技术栈给了我“饭碗”。在我可预见的很长的职业生涯中我都会围绕着云原生、DevOps等技术，想来也是和Kubernetes结缘颇深！

Kubernetes一词来自于希腊语，意思是“舵手”。我们知道container这个单词的意思其实是集装箱，而Docker的logo是“驮”着集装箱的一只鲸鱼，寓意着其“容器管理器”的定位。而Kubernetes以“舵”作为logo，可见其野心是要做容器管理的“领路人”。事实上，Kubernetes也确实已经确认了“领路人”的领导者地位，成为了云原生时代的一个“云操作系统”，成为了容器编排领域的事实标准。

伴随着微服务理念的发展与流行，云上应用逐渐变得复杂起来，在云上部署一个应用所需要的配置越来越繁多复杂，这给云原生应用的运维带来了不小的挑战。后来Helm和Kustomize的出现分别解决了云原生应用的部署管理复杂性问题和多环境差异化配置管理问题等，一定程度上简化了应用上云的过程。但是复杂的分布式、有状态应用除了部署复杂之外，还有大量复杂的维护工作需要SRE工程师去操心，比如数据备份、故障恢复、有条件地扩缩容等等，这些技能往往是特定领域运维工程师擅长的，而不是一类应用所共有的属性。伴随着云上应用的复杂化，Operator应用而生，接着SRE工程师便可以通过编写Operator类型的运维软件来运维自己的应用，也就是将自己的领域运维经验代码化，以代码的形式管理应用，通过代码代替手动的云上运维操作，自动化地实现特定应用的运维管理。

毫无疑问，Kubernetes 的理念很酷，而Kubernetes里最酷的就是通过Operator模式实现的高度可拓展性。但是目前市面上很少有书籍介绍如何开发Operator，介绍Operator的底层原理等。尤其是专门讲解Operator的书籍，更是少之又少。我自己在学习Operator的过程中也是一度感觉入门很困难，走了很多的弯路。很多Operator的原理在网上几乎找不到，要想深入学习，只能自己深入源码去摸索，而Kubernetes的源码阅读起来其实门槛不低。那时候我在网上以开源的方式连载《k8s-1.13版本源码分析》，这本电子书目前在我的GitHub(https://github.com/daniel-hutao)里已经有接近1000的star了。后来我又在自己的个人博客网站(https://www.danielhu.cn)连载《Kubernetes client-go 源码分析》，针对Operator开发所涉及到的client-go底层模块详细分析源码。所以有一天华章图书的卞诚君编辑找到我，问我是不是有意向出版相关图书时，我便欣然答应了。

在和卞编辑约稿后的大半年时间里，我几乎没有周末和假期，在本就很忙碌的本职工作之外花了大量精力来编写本书。但是毕竟我个人的能力和精力有限，而Kubernetes又是一个庞大的“工程”，所以我再认真也难免会出一些纰漏和错误。如果读者朋友发现了书中的任何错误，欢迎不吝雅正，将其通过评论的方式留到本书对应的博客https://www.danielhu.cn/advanced-kubernetes-operator/的评论区。大家有任何其他意见、建议也都可以通过我的博客网站或者GitHub等平台找到我的邮箱等联系方式，然后反馈给我，让我们能够互相学习，一起玩转Operator、玩转云原生！

最后，感谢邓洪超和任晶磊两位前辈在百忙之中抽空为本书作序；感谢张磊、宋净超、王泽锋、周鹏飞和郑东旭等专家为本书编写推荐语；感谢朴文峰设计师精妙绝伦的封面创意！也感谢家人在这大半年时间里的鼓励与支持！

## 封面由来

先欣赏下封面（这个是拼版图）：

![封面](./cover.jpg)

怎么样？看着还行吧？还是有点味道吧？

再来个照片：

![封面](./cover1.jpeg)

还有还有：

![封面](./cover2.jpeg)

这是我司的朴文峰大设计师帮忙设计的原型，再经由出版社的美编润色微调，最终有了这个效果！（我很满意，很感激，还有些许的得意，哈哈哈哈哈……）

## 目录概览

目录也得贴一个（有点长，不粘文字了，来个照片吧）：

![toc](./toc1.jpeg)

![toc](./toc2.jpeg)

![toc](./toc3.jpeg)

## 历史故事

不知道你有没有看到过“**胡说云原生**”的博客（或者公众号）。

我也记不得是从哪年开始写博客的了，可能是2017年前后，那时候我主要发[博客园](https://www.cnblogs.com/daniel-hutao/)。当然，初期一直不温不火，也没想过要火，单篇博文阅读量稳定在几百上下。我也单纯是当做自己的一个“小笔记”，用输出倒逼输入。

2018年时我开始发一些源码分析类的文章，阅读量差不多翻了十倍，单篇在几千上下，算是小小地被认可了。也是在那时候，**机械工业出版社-华章图书**的编辑开始联系我，问我能不能写一本和**Kubernetes源码分析**相关的书，但是当时时机还没到，我感觉自己还不够资格写一本书，就没有答应。

在2021年的8月中旬，华章图书再次找到我，这次我觉得可以写写了，就欣然答应了下来。接着就开始了讨论选题、章节规划、合同等等事务。

后面年底又被换工作之类的事情打断，陆陆续续到了2022年中旬我才差不多完成了初稿，全部交到了出版社。

三审三校工作本来应该是两三个月就能完成，所以预计本书会在2022年的9月上架，但是刚好赶上了国家政策调整，收严出版物审核工作，于是我的书又被加了一轮审校（同期其他书也是），于是很自然，延期了一两个月。虽然多了一轮审校，但是11月或者12月初应该是要上架销售的，不过搞笑的是防疫政策调整，接着就进入了“普阳”阶段，出版社的工作人员同样也阳的差不多了。作为出版社，阳了肯定还是得“充分休息”，于是我这本印刷好的书就在仓库里默默躺过了阳历年，在2023年1月初才终于顺利上架，开始销售……

## 送书活动

没错，得送书！

但是不能送多，因为我是作者，不是出版社领导，我手里也没有库存！（我送出去的书同样是从京东或者当当买的，六七十块一本，，，心疼啊😭……）

但还是得送一些，有太多“忠实粉丝”长达半年甚至一年的时间在关注着我这本“破书”，时不时问我还有多久出版，不送他们几本我感觉良心不安！

另外帮忙写推荐序和推荐语的7位大咖，总得每人送一本吧！

送都开始送了，不抽个奖？还是抽抽吧！

**具体规则我还没想好，总之，关注微信公众号“胡说云原生”，我会在下周发一篇文章，详细介绍“抽奖、送书规则”，敬请期待！**

