本书以实践为主, 内容涵盖容器技术、Kubernetes核心资源以及基于Kubernetes的企业级实践。从容器基础知识开始, 由浅入深, 向读者介绍Kubernetes各个方面的知识, 并提供许多实际项目和应用场景, 以帮助读者更好地理解和掌握这些概念。全书分为3部分, 第1部分讲解容器技术, 这是理解Kubernetes的必要基础, 主要介绍容器的定义、创建和管理容器、容器的网络和存储等方面的知识。第2部分深入讲解Kubernetes的核心资源, 包括Pod、Deployment、Service、Ingress等, 将逐步介绍这些资源的定义、使用和管理方法, 并提供实际场景来说明这些概念。第3部分是基于Kubernetes的企业实践, 将通过实际的企业案例, 向读者介绍如何使用Kubernetes解决实际问题, 包括如何使用Kubernetes进行应用程序部署、监控、自动化扩缩容和灰度发布等操作。
亲爱的读者,很高兴向你介绍我的新书《Kubernetes从入门到DevOps企业应用实战》。在过去的几年中,我一直从事容器和Kubernetes的相关工作,通过实践和培训,我意识到学习Kubernetes对于企业的发展至关重要。
从2013年Docker容器推出到2014年Kubernetes开源项目推出至今,我接触容器技术也有了差不多十年时间,在学习和实践期间,深刻感受到Kubernetes这个工具如果完全靠自学,还是有一定难度的,为了使读者尽快掌握这个工具,我推出了Kubernetes系列视频课程,受到了广大学员的欢迎,并入选了工信部人才交流中心认证课程,本书就是在系列课程的基础上编撰完成的。
本书的特点是以实践为主,内容涵盖容器技术、Kubernetes核心资源以及基于Kubernetes的企业实践。我将使用循序渐进、逐步深入的方式,从容器的基础知识开始,向读者介绍Kubernetes各个方面的知识,并辅之以操作范例和应用场景,书中还给出了大量有实用价值的案例和项目,既可以帮助读者深入理解Kubernetes的概念和原理,又能够在实际工作中进行 实践。
第1~3章讲解容器技术,这是理解Kubernetes的必要基础,重点介绍容器的定义、创建和管理容器、容器网络和存储等方面的知识。
第4章讲解如何使用Kubeadm和二进制文件安装高可用Kubernetes集群。
第5~12章讲解Kubernetes的核心资源,包括Pod、Deployment、Service、Ingress等资源的定义、使用和管理方法,以及实际应用场景。
第13~20章讲解基于Kubernetes的企业实践,主要通过实际项目或案例介绍如何使用Kubernetes解决实际问题,包括使用Kubernetes进行应用程序的部署、容器云平台的构建、流量治理、监控、自动化扩缩容和灰度发布等。
本书提供了丰富的资源文件,包括Kubernetes的官方文档、Kubernetes的学习资源、Kubernetes的工具和插件等。这些资源可以帮助读者更好地学习和理解Kubernetes,可扫描以下二维码获取:
Kubernetes配书资源.part1 Kubernetes配书资源.part2 Kubernetes配书资源.part3 配书资源使用说明
本书基于Kubernetes 1.27新版本编写(本书的内容也适合1.20之后的所有版本),从零基础开始,涵盖理论知识、企业案例,以及自动化运维DevOps体系和一些大厂架构设计思路,适合云原生领域的从业者、Kubernetest初学者、运维和开发人员使用,也可作为企业内训、培训机构和大中专院校的教学用书。
如果你对Kubernetes和本书有任何问题或建议,请随时联系我,你还可以在Gitee上找到我做的项目(联系方式参见下载文件)。
最后,感谢清华大学出版社的编辑王金柱老师的全力支持和指导,以及我的妻子王静女士和各位技术同行的支持和鼓励。希望这本书能够帮助各位读者学习和使用Kubernetes,从而推动企业的发展和进步。
韩先超
2023年5月
第1章 Docker初探 1
1.1 Docker概述 1
1.1.1 Docker是什么 1
1.1.2 Docker的版本 2
1.1.3 学习Docker的方式 2
1.2 Docker的组成与特点 2
1.2.1 Docker的组成 2
1.2.2 Docker的特点 4
1.3 安装和配置Docker 5
1.3.1 配置主机名 5
1.3.2 关闭Firewalld防火墙 6
1.3.3 关闭SELinux 6
1.3.4 配置时间同步 7
1.3.5 编写计划任务 7
1.3.6 重启crond服务使计划任务生效 8
1.3.7 安装基础软件包 8
1.3.8 安装Docker-CE 9
1.3.9 修改内核参数 11
1.3.10 配置Docker镜像加速器 13
1.4 Docker镜像与容器 14
1.4.1 Docker镜像 14
1.4.2 Docker容器 17
1.5 案例:通过Docker部署Nginx服务 24
1.5.1 基于CentOS镜像运行一个Docker容器 24
1.5.2 查看Docker容器是否正常运行 24
1.5.3 在Docker中安装Nginx容器 25
1.5.4 在Docker容器中通过yum安装Nginx 26
1.6 本章小结 28
第2章 Dockerfile构建企业级镜像 29
2.1 Dockerfile语法详解 29
2.2 Dockerfile构建企业级镜像 43
2.2.1 案例:Dockerfile构建Nginx镜像 43
2.2.2 案例:Dockerfile构建Tomcat镜像 48
2.3 本章小结 50
第3章 Docker私有镜像仓库Harbor 51
3.1 Harbor的概念及证书签发 51
3.2 安装Harbor 53
3.3 Harbor图形界面使用说明 57
3.4 测试使用Harbor私有镜像仓库 59
3.5 Harbor高可用 62
3.6 本章小结 63
第4章 Kubeadm快速搭建Kubernetes集群 64
4.1 初始化实验环境 65
4.1.1 配置静态IP地址 67
4.1.2 配置机器主机名 68
4.1.3 配置主机hosts文件 68
4.1.4 配置控制节点到工作节点无密码登录 68
4.1.5 关闭交换分区 69
4.1.6 修改机器内核参数 70
4.1.7 关闭Firewalld防火墙 72
4.1.8 关闭SELinux 72
4.1.9 配置安装Docker和Containerd需要的阿里云的在线yum源 73
4.1.10 配置安装Kubernetes组件需要的阿里云的在线yum源 74
4.1.11 配置时间同步 75
4.1.12 安装Docker-CE和Containerd服务 76
4.2 安装Kubernetes集群 80
4.2.1 安装初始化Kubernetes集群需要的软件包 80
4.2.2 Kubeadm初始化Kubernetes集群 81
4.2.3 配置Kubectl的配置文件config 83
4.3 扩容Kubernetes集群 85
4.3.1 添加第一个工作节点 85
4.3.2 添加第二个工作节点 86
4.4 安装Kubernetes网络插件Calico 88
4.4.1 安装Calico 88
4.4.2 Calico的配置 89
4.4.3 calico-kube-controllers解析 94
4.5 测试Kubernetes集群是否健康 95
4.5.1 测试在Kubernetes中创建的Pod是否可以正常访问网络 95
4.5.2 测试CoreDNS是否正常 96
4.5.3 延长证书 96
4.6 本章小结 99
第5章 Kubernetes核心资源Pod 100
5.1 Pod是什么 100
5.1.1 Pod基本介绍 100
5.1.2 Pod如何管理多个容器 101
5.1.3 Pod网络 102
5.1.4 Pod存储 102
5.2 Pod的工作方式 103
5.2.1 自主式Pod 103
5.2.2 控制器管理的Pod 107
5.3 如何创建一个Pod资源 111
5.3.1 通过YAML文件创建Pod资源 112
5.3.2 Pod资源清单编写技巧 113
5.3.3 创建一个完整的Pod资源 141
5.3.4 和Pod相关的命令解读 144
5.4 nodeName和nodeSelector 146
5.4.1 nodeName实例 147
5.4.2 nodeSelector实例 148
5.5 亲和性、污点和容忍度 149
5.5.1 节点亲和性 149
5.5.2 Pod亲和性和反亲和性 154
5.5.3 污点和容忍度 160
5.6 Pod生命周期和健康探测 165
5.6.1 初始化容器initcontainer 166
5.6.2 存活探测 167
5.6.3 就绪探测 170
5.6.4 容器钩子 172
5.7 本章小结 174
第6章 ReplicaSet和Deployment控制器管理Pod 175
6.1 ReplicaSet如何管理Pod 176
6.1.1 ReplicaSet概述 176
6.1.2 ReplicaSet资源清单文件的编写技巧 176
6.2 ReplicaSet管理Pod案例:部署Guestbook留言板 178
6.3 ReplicaSet管理Pod实例:扩容、缩容、更新 180
6.4 Deployment如何管理Pod 183
6.4.1 Deployment概述 183
6.4.2 Deployment如何管理ReplicaSet和Pod 184
6.5 Deployment资源清单文件的编写技巧 185
6.5.1 查看Deployment资源对象YAML文件的组成 186
6.5.2 查看Deployment下的spec字段 186
6.6 Deployment管理Pod案例解析 188
6.7 Deployment管理Pod:扩容和缩容 190
6.7.1 电商网站访问量急增——扩容Pod 190
6.7.2 电商网站淡季或业务低峰期——缩容Pod 191
6.8 基于Deployment实现Pod滚动更新——WebApp应用版本升级 192
6.9 本章小结 195
第7章 Service四层负载均衡 197
7.1 Service的概念与原理 197
7.1.1 Service基本介绍 197
7.1.2 Kubernetes集群中的3类IP地址 198
7.2 创建Service资源 200
7.2.1 创建Service资源的方法 200
7.2.2 案例:用YAML文件创建Service资源 200
7.2.3 查看定义Service资源需要的字段 202
7.2.4 Service的4种Type类型 203
7.2.5 Service的端口定义 206
7.2.6 创建Service:类型是ClusterIP 207
7.2.7 创建Service:类型是NodePort 209
7.2.8 创建Service:类型是ExternalName 212
7.3 本章小结 215