新書推薦:
《
万有引力书系 纳粹亿万富翁 德国财富家族的黑暗历史
》
售價:HK$
109.8
《
中国常见植物野外识别手册:青海册
》
售價:HK$
76.2
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
87.4
《
迷人的化学(迷人的科学丛书)
》
售價:HK$
143.4
《
宋代冠服图志(详尽展示宋代各类冠服 精美插图 考据严谨 细节丰富)
》
售價:HK$
87.4
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
《
养育不好惹的小孩
》
售價:HK$
77.3
《
加加美高浩的手部绘画技法 II
》
售價:HK$
89.4
|
內容簡介: |
本书详细讲解Operator开发过程中所涉及的各个知识点,从简单的Operator示例应用入手,帮助读者快速上手Operator的开发流程,接着深入分析client-go、Deployment控制器等的源码,通过一个进阶应用的开发过程详细介绍Operator开发的各方面知识。通过本书的学习,读者能够轻松掌握Operator的开发技巧,深入理解Operator的底层原理,进而在日常工作中更好地利用Operator实现各种复杂的应用治理逻辑的开发。
|
目錄:
|
目录
推荐序1
推荐序2
前言
第一篇 入 门
第1章 了解Kubernetes 2
1.1 初识Kubernetes 2
1.2 Kubernetes集群的部署 3
1.2.1 Docker的安装 4
1.2.2 Kind工具介绍 6
1.2.3 使用Kind快速搭建Kubernetes环境 6
1.2.4 使用Kind搭建多节点Kubernetes集群环境 7
1.2.5 Kind用法进阶 10
1.3 Kubernetes集群的基本操作 12
1.3.1 示例项目介绍 12
1.3.2 基础操作演示 13
1.3.3 小结 18
1.4 Kubernetes的核心概念 18
1.4.1 节点 18
1.4.2 命名空间 19
1.4.3 容器组 21
1.4.4 副本集 22
1.4.5 部署 23
1.4.6 服务 24
1.5 Kubernetes的发展历史 26
1.6 本章小结 27
第2章 开始Operator开发 28
2.1 理解控制器模式 28
2.1.1 生活中的控制器 28
2.1.2 Kubernetes中的控制器 29
2.2 理解Operator模式 30
2.3 Operator开发环境准备 31
2.4 Kubebuilder的安装配置 31
2.5 从Application Operator Demo开始 32
2.5.1 创建项目 33
2.5.2 添加API 35
2.5.3 CRD实现 38
2.5.4 CRD部署 39
2.5.5 CR部署 40
2.5.6 Controller实现 41
2.5.7 启动Controller 42
2.5.8 部署Controller 44
2.5.9 资源清理 46
2.6 Operator的发展历史 46
2.6.1 Operator概念的提出 46
2.6.2 第一个Operator程序 47
2.6.3 Operator的崛起 47
2.7 本章小结 48
第二篇 进 阶
第3章 Kubernetes API介绍 50
3.1 认识Kubernetes API 50
3.2 使用Kubernetes API 50
3.2.1 Curl方式访问API 50
3.2.2 kubectl raw方式访问API 53
3.3 理解GVK:组、版本与类型 54
3.4 本章小结 54
第4章 理解client-go 55
4.1 client-go项目介绍 55
4.1.1 client-go的代码库 55
4.1.2 client-go的包结构 56
4.1.3 client-go的版本规则 56
4.1.4 获取client-go 57
4.2 client-go使用示例 57
4.2.1 client-go集群内认证配置 57
4.2.2 client-go集群外认证配置 60
4.2.3 client-go操作Deployment 63
4.3 本章小结 67
第5章 client-go源码分析 68
5.1 client-go源码概览 68
5.1.1 关于client-go源码版本 68
5.1.2 client-go模块概览 69
5.2 WorkQueue源码分析 71
5.2.1 普通队列Queue的实现 71
5.2.2 延时队列DelayingQueue的实现 74
5.2.3 限速队列RateLimitingQueue的实现 79
5.2.4 小结 82
5.3 DeltaFIFO源码分析 83
5.3.1 Queue接口与DeltaFIFO的实现 83
5.3.2 queueActionLocked()方法的逻辑 85
5.3.3 Pop()方法和Replace()方法的逻辑 86
5.4 Indexer和ThreadSafeStore 89
5.4.1 Indexer接口和cache的实现 89
5.4.2 ThreadSafeStore的实现 91
5.4.3 各种Index方法的实现 94
5.5 ListerWatcher 95
5.5.1 ListWatch对象的初始化 95
5.5.2 ListerWatcher接口 97
5.5.3 List-Watch与HTTP chunked 98
5.6 Reflector 102
5.6.1 Reflector的启动过程 102
5.6.2 核心方法:Reflector.ListAndWatch() 102
5.6.3 核心方法:Reflector.watchHandler() 106
5.6.4 Reflector的初始化 108
5.6.5 小结 108
5.7 Informer 109
5.7.1 Informer就是Controller 109
5.7.2 SharedIndexInformer对象 113
5.7.3 sharedProcessor对象 116
5.7.4 关于SharedInformerFactory 119
5.7.5 小结 121
5.8 本章小结 122
第6章 项目核心依赖包分析 123
6.1 API项目 123
6.2 apimachinery项目 124
6.3 controller-runtime项目 125
6.4 本章小结 126
第7章 Operator开发进阶 127
7.1 进阶项目设计 127
7.2 准备application-operator项目 127
7.2.1 创建新项目 127
7.2.2 项目基础结构分析 128
7.3 定义Application资源 132
7.3.1 添加新API 132
7.3.2 自定义新API 133
7.4 实现Application Controller 134
7.4.1 实现主调谐流程 134
7.4.2 实现Deployment调谐流程 137
7.4.3 实现Service调谐流程 140
7.4.4 设置RBAC权限 142
7.4.5 过滤调谐事件 146
7.4.6 资源别名 150
7.5 使用Webhook 151
7.5.1 Kubernetes API访问控制 151
7.5.2 Admission Webhook介绍 152
7.5.3 Admission Webhook的实现 152
7.5.4 cert-manager部署 154
7.5.5 Webhook部署运行 155
7.5.6 Webhook测试 157
7.6 API多版本支持 159
7.6.1 实现V2版本API 159
7.6.2 多版本API部署
|
內容試閱:
|
前 言
我不知道你是怎么发现这本书的,不过我相信有很大的概率是你关注了我的个人微信公众号“胡说云原生”,然后认可我分享的技术文章,接着某一天从中得知我写了这本《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专家 胡涛
|
|