本书精选Kubernetes的硬核知识,帮助读者快速进阶和积累Kubernetes实战经验。本书共8章,主要包括认识Kubernetes,快速构建Kubernetes集群,Kubernetes核心对象使用,Kubernetes容器编排实践,Kubernetes系统运维与故障处理,构建Kubernetes高可用集群,Kubernetes监控与告警(Prometheus Grafana)和基于Kubernetes的CI/CD项目综合实践(GitLab Harbor Jenkins)。
本书前三章可以帮助读者快速掌握Kubernetes核心知识和高频操作;第4、第5章帮助读者快速掌握Kubernetes的进阶使用;第6~8章是Kubernetes及其外围系统的综合应用,帮助读者快速积累实战经验。
本书既可以作为云原生及相关行业从业者的技术参考书,也可以作为高等院校计算机、云计算和大数据相关专业的教材。
一本书讲透k8s基础,k8s集群的安装、配置、管理、监控,k8s集群的自动化部署、运维与容器编排,丰富的实践案例帮助读者快速积累k8s实战经验。
配套资源丰富,包括关键示例程序源代码、配置文件、数据文件,以及配套的《实践手册》免费电子书、系列高清课程视频,方便读者参考学习。
前言
Kubernetes是由Google开源的一个容器编排(Orchestration)系统,它实现了集群中容器管理、部署、迁移和扩展的自动化。自2014年开源以来,Kubernetes经过多个版本的迭代和完善,已经广泛用于生产环境。Google、Microsoft、Amazon、阿里和腾讯等知名企业,都提供云上的Kubernetes服务,阿里自身的核心应用更是全部运行在Kubernetes之上。Linux基金会报告显示,2021年,云原生技术首次超过Linux自身,成为最热门的开源技术,而Kubernetes作为云原生技术的代表,则更是热门中的热门。
因此,对于IT从业人员而言,Kubernetes是一个重要的加分项和加薪项,Kubernetes学得越早,掌握得越好,就越会成为自身的一个优势。然而从学习的角度而言,Kubernetes涉及的概念新、概念多,而且需要很多的前置知识,例如Linux、网络、虚拟化、Docker容器等;而且Kubernetes是面向整个集群的容器编排,在架构、运行机制和使用上更为复杂;再加上Kubernetes是一个底层基础设施,几乎所有的应用都需要进行迁移,这些都增加了Kubernetes的学习难度。
为此,笔者根据自身在Kubernetes上的研发和使用经验,编写了《Kubernetes快速进阶与实战》这本书,本书共8章,主要包括认识Kubernetes、快速构建Kubernetes集群、Kubernetes核心对象使用、Kubernetes容器编排实践、Kubernetes系统运维与故障处理、构建Kubernetes高可用集群、Kubernetes监控与告警(Prometheus Grafana)和基于Kubernetes的CI/CD项目综合实践(GitLab Harbor Jenkins)。此外,本书还提供配套的《实践手册》免费电子书和虚拟机使用等免费高清视频资源供读者参考学习。
这不是一本大而全的字典书,本书只讲解Kubernetes的硬核知识,旨在帮助读者快速入门和进阶Kubernetes,快速积累Kubernetes实战经验,少走弯路、少踩坑。其中,前三章可以帮助读者快速掌握Kubernetes核心知识、上手Kubernetes高频操作;第4、第5章帮助读者快速掌握Kubernetes的进阶使用;第6~8章是Kubernetes及其外围系统的综合应用,帮助读者快速积累实战经验。如果把学习Kubernetes比作穿越丛林,那么本书将给学习者最精简和有用的装备,提供有效的训练,快速积累实战经验;指出一条可行的路径,为学习者在有限的时间内穿越丛林提供保障;进而可以利用这些装备,自行去开发和探索新的路线。
本书既可以作为云原生及相关行业从业者的技术参考书,也可以作为高等院校计算机、云计算和大数据相关专业的教材。
感谢机械工业出版社的策划编辑王斌(IT大公鸡),在长达数月的时间内,我们就本书的整体结构和内容细节进行了多次细致而又高效的交流,他从专业的角度给予了很多中肯的建议,在此特别表示感谢!
感谢一直以来,关心帮助我成长的家人、老师、领导、同学和朋友们!
时间紧、任务急,书中疏漏、错误之处在所难免,如果读者在阅读过程中有任何疑问,可以通过作者邮箱:spark_aishu@126.com联系作者。
艾 叔
2022.08
文艾(艾叔),解放军理工大学-奇虎360云计算联合实验室原技术负责人,系统分析师,51CTO学院严选讲师;具有多年Linux下的开发、运维和教学经验,对Linux下的Docker、Kubernetes、Hadoop和Spark等系统有深入研究和丰富的实践经验;带领团队完成了华为、中兴和奇虎360等公司的多个校企合作Linux相关项目;指导零基础本科生参加科技创新竞赛和编程大赛,共获得全国特等奖1次,一等奖2次,二等奖2次;通过艾叔编程公众号和网易云课堂开设了一系列Linux相关的免费课程,已帮助8万多名学习者入门编程并深受好评。
目录
前言
第1章 认识Kubernetes1
1.1 Kubernetes概述1
1.1.1 Kubernetes的定义和背景1
1.1.2 Kubernetes与Docker3
1.1.3 Kubernetes与云原生4
1.2 Kubernetes 核心概念5
1.2.1 resourceKubernetes的组成
元素5
1.2.2 Kubernetes object定义
Kubernetes运行状态10
1.2.3 Pod实现Kubernetes中容器的
逻辑组合11
1.2.4 RC/RS控制Pod副本个数12
1.2.5 Deployment在Kubernetes中
部署应用13
1.2.6 Service以统一的方式对外
提供服务13
1.2.7 其他核心概念14
1.3 Kubernetes 系统架构15
1.3.1 Control Plane15
1.3.2 Node17
1.3.3 Addons18
1.3.4 kubectl18
1.4 高效学习Kubernetes19
1.4.1 Kubernetes快速学习路线图19
1.4.2 利用本书资源高效学习Kubernetes
(重点必读)19
1.4.3 本书所使用的软件和版本22
第2章 快速构建Kubernetes集群23
2.1 Kubernetes集群规划23
2.2 准备Kubernetes集群节点23
2.2.1 定制VMware虚拟机(实践1)23
2.2.2 小化安装CentOS 8(实践2)24
2.2.3 远程登录与文件传输(实践3)24
2.2.4 ssh远程无密码登录24
2.2.5 Docker安装与使用25
2.3 kubeadm安装与系统配置30
2.4 快速构建Control Plane35
2.5 为Kubernetes增加Node节点38
第3章 Kubernetes核心对象使用44
3.1 使用YAML创建Kubernetes
resource44
3.2 Pod典型使用47
3.3 RC/RS基本操作(实践4)51
3.4 Deployment典型使用(实践5)51
3.5 Service典型使用(实践6)52
第4章 Kubernetes容器编排实践53
4.1 Pod容器调度53
4.2 Pod多容器运行(实践 7)55
4.3 Pod容器数据持久化存储(PersistentVolume)56
4.3.1 安装NFS56
4.3.2 创建pv和pvc58
4.3.3 创建Deployment使用持久化存储60
4.4 Ingress实现统一访问Pod容器
服务62
4.4.1 创建购物网站的Deployment62
4.4.2 创建购物网站的Service64
4.4.3 创建购书网站的Deployment65
4.4.4 创建购书网站的Service66
4.4.5 创建ingress controller66
4.4.6 创建Ingress68
4.4.7 按路径统一访问Pod容器的服务70
4.5 Pod容器自动伸缩(HPA)71
4.5.1 编写HPA YAML文件71
4.5.2 创建监控对象和HPA73
4.5.3 HPA伸缩算法74
4.5.4 HPA自动伸缩测试74
第5章 Kubernetes系统运维与故障
处理78
5.1 Pod容器的高可用实践
(实践8)78
5.2 Kubernetes节点性能数据采集78
5.3 使用k8dash快速监控Kubernetes80
5.4 Kubernetes系统运维常用操作83
5.4.1 增加kubectl节点83
5.4.2 停止Kubernetes组件Pod中的
容器84
5.4.3 重置Kubernetes集群节点85
5.4.4 查看和设置Kubernetes组件的启动
参数85
5.4.5 运行Pod容器命令88
5.4.6 查看Pod容器网卡名89
5.4.7 复制文件到Pod容器89
5.4.8 查看指定进程监听的端口90
5.5 查看Kubernetes日志90
5.5.1 系统日志90
5.5.2 Kubernetes组件日志91
5.5.3 Pod启动信息和容器日志91
5.6 Kubernetes故障处理92
5.6.1 处理故障Pod92
5.6.2 容器故障调试94
第6章 构建Kubernetes高可用集群96
6.1 Kubernetes 高可用集群的架构与
规划96
6.2 构建高可用负载均衡器(Keepalived LVS)98
6.2.1 构建LB节点99
6.2.2 构建RS节点102
6.2.3 构建Client节点105
6.2.4 测试LB HA106
6.3 构建基于Keepalived的Kubernetes
高可用集群110
6.3.1 配置Keepalived110
6.3.2 构建Control Plane111
6.3.3 构建Node节点114
6.3.4 Kubernetes 高可用性测试115
第7章 Kubernetes监控与告警 (Prometheus Grafana)119
7.1 Kubernetes系统组件指标
(Metrics)119
7.2 Prometheus监控Kubernetes125
7.2.1 Prometheus架构和核心概念125
7.2.2 Prometheus 快速部署(kube-prometheus)127
7.2.3 Prometheus 监控机制与配置131
7.2.4 Prometheus 监控 Kubernetes
核心组件140
7.2.5 Prometheus 监控 Kubernetes
指定对象(Exporter)145
7.3 Grafana展示Kubernetes监控
数据152
7.3.1 Grafana 快速访问152
7.3.2 Grafana 展示 Prometheus 数据源
数据(Kubernetes)154
7.3.3 Grafana 展示其他数据源的数据160
7.3.4 Grafana 配置的持久化存储164
7.4 Kubernetes 监控告警171
7.4.1 Prometheus 告警机制171
7.4.2 查看Prometheus 告警171
7.4.3 Prometheus告警规则(Rule)175
7.4.4 配置Prometheus 告警发送邮件182
7.4.5 Grafana 告警配置与邮件通知188
第8章 基于Kubernetes的CI/CD
项目综合实践(GitLab
Harbor Jenkins)198
8.1 CI/CD核心概念与基础198
8.2 太空入侵者游戏CI/CD方案
设计199
8.2.1 系统架构与集群规划199
8.2.2 CI/CD开发流程200
8.3 构建太空入侵者游戏开发与测试
环境201
8.3.1 构建承载和测试节点devt
虚拟机201
8.3.2 构建开发节点spaceinv容器202
8.3.3 构建代码管理仓库GitLab205
8.3.4 构建容器镜像仓库Harbor217
8.3.5 构建持续集成工具J