前言
我不知道你是怎么发现这本书的,不过我相信有很大的概率是你关注了我的个人微信公众号“胡说云原生”,然后认可我分享的技术文章,接着某一天从中得知我写了这本《Kubernetes Operator开发进阶》,最后你决定支持一下这个默默写了好几年技术文章的“博主”,于是在网上下单买了这本书。假如你是我的粉丝,在这里我想对你一直以来的认可与支持表示最真诚的感谢!
在2013年,划时代的项目Docker正式发布,让容器化技术进入大众的视野。接着在2014年Kubernetes开源,2015年CNCF成立,云原生浪潮就此袭来,容器编排和管理系统开始蓬勃发展,进而开始了Kubernetes、Mesos、Swarm+Compose三分天下的局面。
我是在2016年下半年开始工作的(巧的是第一个Operator项目也是在2016年下半年诞生的),也就是CNCF成立后一年。毕业那年我去了H3C的云计算部门,有幸早早接触到了Kubernetes,然后在云原生的世界里摸爬滚打,走了无数弯路,从小白逐渐成长为一只“老鸟”,开始承担Kubernetes集群的维护、异常定位、优化等工作。后来凭借着在云原生领域的技术积累,我在第二份工作中开始参与整个云平台从0到1的建设。眨眼间,从毕业到现在我已经工作了6年,在这6年时间里,我的每一份工作都围绕着云原生生态技术栈。仔细想来,我在企业里落地以Kubernetes为核心的云原生生态技术栈,其实也是以Kubernetes为核心的云原生生态技术栈给了我“饭碗”。在可预见的很长的职业生涯中,我都会围绕着云原生、DevOps等技术,想来也是和Kubernetes结缘颇深!
Kubernetes一词来自希腊语,意思是“舵手”。我们知道container这个单词的意思是集装箱,而Docker的LOGO是一只“驮”着集装箱的鲸鱼,寓意着其“容器管理器”的定位。而Kubernetes以舵作为LOGO,可见其野心是要做容器管理的“领路人”。事实上,Kubernetes确实已经确立了“领路人”的地位,成为云原生时代的一个“云操作系统”,也成为容器编排领域的事实标准。
伴随着微服务理念的发展与流行,云上的应用逐渐变得复杂起来,在云上部署一个应用所需要的配置越来越复杂,这给云原生应用的运维带来了不小的挑战。后来Helm和Kustomize的出现分别解决了云原生应用的部署管理复杂性问题和多环境差异化配置管理问题等,在一定程度上简化了应用上云的过程。但是复杂的分布式、有状态应用除了部署复杂之外,还有大量复杂的维护工作需要站点可靠性工程师(SRE)去操心,比如数据备份、故障恢复、有条件地扩/缩容等,这些技能往往是特定领域的运维工程师擅长的,而不是一类应用所共有的属性。伴随着云上应用的复杂化,Operator应运而生,接着站点可靠性工程师便可以通过编写Operator类型的运维软件来运维自己的应用,也就是将自己的领域运维经验代码化,以代码的形式管理应用,通过代码代替手动的云上运维操作来自动化地实现特定应用的运维管理。
毫无疑问,Kubernetes的理念很酷,而Kubernetes里最酷的就是通过Operator模式实现的高度可拓展性。但是目前市面上很少有书籍介绍如何开发Operator,以及Operator的底层原理等。尤其是专门讲解Operator的书籍,更是少之又少。我自己在学习Operator的过程中也是一度感觉入门很困难,走了很多弯路。很多Operator的原理在网上几乎找不到,要想深入学习,只能自己深入源码去摸索,而Kubernetes的源码阅读起来其实门槛不低。那时候我在网上以开源的方式连载《k8s-1.13版本源码分析》,这本电子书目前在我的GitHub(https://github.com/daniel-hutao)里标星已经接近1000了。后来我又在自己的个人博客(https://www.danielhu.cn)上连载《Kubernetes client-go源码分析》,详细分析Operator开发所涉及的client-go底层模块的源码。所以有一天,机械工业出版社的编辑找到我,问我是否有意向出版相关图书时,我便欣然答应了。
在约稿后的大半年时间里,我几乎没有周末和假期,在本就很忙碌的本职工作之外花费了大量精力来编写本书。但是毕竟我个人的能力和精力有限,而Kubernetes又是一个庞大的“工程”,所以我再认真也难免会出现一些纰漏。如果读者朋友发现了书中的不妥之处,欢迎不吝指正,可以通过评论的方式将其留到本书对应的博客(https://www.danielhu.cn/advanced-kubernetes-operator/)的评论区,也可以通过我的博客或者GitHub等平台反馈给我。让我们互相学习,一起玩转Operator、玩转云原生!
思码逸DevOps专家 胡涛