描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787519826192
前言 ………………………………………………………………………………………………………………………..1
第1章 概述 ……………………………………………………………………………………………………………….7
速度 ………………………………………………………………………………………………………………………….8
不变性的价值 ……………………………………………………………………………………………………9
声明式配置 ………………………………………………………………………………………………………10
自我修复系统 …………………………………………………………………………………………………..11
扩展服务和团队 ………………………………………………………………………………………………………12
解耦 ………………………………………………………………………………………………………………….12
更易于扩展的应用程序和集群 ……………………………………………………………………….12
利用微服务扩展开发团队 ……………………………………………………………………………….13
一致性和可扩展性的隔离 ……………………………………………………………………………….14
抽象基础设施 …………………………………………………………………………………………………………..16
效率 …………………………………………………………………………………………………………………………17
小结 …………………………………………………………………………………………………………………………18
第2章 创建和运行容器 ………………………………………………19
容器镜像 ………………………………………………………………………………………………………………….20
Docker镜像格式 ………………………………………………………………………………………………21
使用Docker构建应用程序镜像
……………………………………………………………………………….23
Dockerfile
…………………………………………………………………………………………………………23
镜像的安全性 …………………………………………………………………………………………………..24
优化镜像大小 …………………………………………………………………………………………………..24
将镜像存储到远程仓储 …………………………………………………………………………………………..25
Docker容器运行时 …………………………………………………………………………………………………..26
通过Docker运行容器 ……………………………………………………………………………………….27
探索kuard应用程序 …………………………………………………………………………………………27
限制资源使用 …………………………………………………………………………………………………..27
删除镜像 ………………………………………………………………………………………………………………….28
小结 …………………………………………………………………………………………………………………………29
第3章 部署Kubernetes群集 ………………………………………30
在公共云上安装Kubernetes
…………………………………………………………………………………..31
Google
Container Service ……………………………………………………………………………….31
使用Azure
Container Service安装Kubernetes
………………………………………………31
在Amazon Web
Services上安装Kubernetes
…………………………………………………..32
使用minikube在本地安装Kubernetes
…………………………………………………………………..33
在Raspberry Pi上运行Kubernetes
…………………………………………………………………………34
Kubernetes客户端 …………………………………………………………………………………………………..34
检查群集状态 …………………………………………………………………………………………………..34
查看Kubernetes
Worker节点 …………………………………………………………………………..35
群集组件 ………………………………………………………………………………………………………………….38
Kubernetes代理 ……………………………………………………………………………………………….38
Kubernetes
DNS
……………………………………………………………………………………………….38
Kubernetes
UI …………………………………………………………………………………………………..39
小结 ………………………………………………………………………………………………………………………..40
第4章 常用kubectl命令 …………………………………………….41
命名空间 ………………………………………………………………………………………………………………….41
上下文 ……………………………………………………………………………………………………………………..41
查看Kubernetes
API对象
………………………………………………………………………………………..42
创建、更新和销毁Kubernetes对象………………………………………………………………………..43
标记和注释对象 ……………………………………………………………………………………………………..44
调试命令 ………………………………………………………………………………………………………………….44
小结 …………………………………………………………………………………………………………………………45
第5章 pod ………………………………………………………………46
Kubernetes中的pod
………………………………………………………………………………………………..47
用pod思考 ……………………………………………………………………………………………………………….48
pod
Manifest
……………………………………………………………………………………………………………48
创建pod
……………………………………………………………………………………………………………49
创建pod
Manifest
…………………………………………………………………………………………….50
运行pod
…………………………………………………………………………………………………………………..51
列出pod ……………………………………………………………………………………………………………51
pod的详细信息 ……………………………………………………………………………………………….52
删除pod ……………………………………………………………………………………………………………53
访问pod
………………………………………………………………………………………………………………….54
使用端口转发 …………………………………………………………………………………………………..54
使用日志获取更多信息 …………………………………………………………………………………..55
利用exec执行容器中的命令
……………………………………………………………………………55
在容器间复制文件 …………………………………………………………………………………………..56
健康检查 ………………………………………………………………………………………………………………….56
活性探针 ………………………………………………………………………………………………………….57
就绪探针 …………………………………………………………………………………………………………..58
健康检查的类型 ……………………………………………………………………………………………….59
资源管理 ………………………………………………………………………………………………………………….59
资源请求:所需资源下限 ……………………………………………………………………………….60
通过限额控制资源用量 …………………………………………………………………………………..62
利用卷实现数据持久化 …………………………………………………………………………………………..63
通过pod使用存储卷 ………………………………………………………………………………………..63
pod使用卷的不同方式
…………………………………………………………………………………….64
使用远程磁盘实现数据的持久性 ……………………………………………………………………65
综合讨论 ………………………………………………………………………………………………………………….66
小结 …………………………………………………………………………………………………………………………67
第6章 标签和注释 ……………………………………………………68
标签 …………………………………………………………………………………………………………………………68
应用标签 …………………………………………………………………………………………………………..70
修改标签 ………………………………………………………………………………………………………….71
标签选择器 ………………………………………………………………………………………………………72
API对象中的标签选择器………………………………………………………………………………….74
注释 …………………………………………………………………………………………………………………………75
定义注释 …………………………………………………………………………………………………………..76
清理 …………………………………………………………………………………………………………………………76
小结 …………………………………………………………………………………………………………………………77
第7章 服务发现 ………………………………………………………78
什么是服务发现? …………………………………………………………………………………………………..78
Service对象 ……………………………………………………………………………………………………………..79
提供DNS服务 ……………………………………………………………………………………………………80
就绪检查 …………………………………………………………………………………………………………..82
集群之外 ………………………………………………………………………………………………………………….83
云集成 ……………………………………………………………………………………………………………………..85
高级细节 …………………………………………………………………………………………………………………86
端点 ………………………………………………………………………………………………………………….86
手动服务发现 …………………………………………………………………………………………………..88
kube-proxy与集群IP
………………………………………………………………………………………..89
群集IP环境变量………………………………………………………………………………………………..90
清除对象 ………………………………………………………………………………………………………………….91
小结 …………………………………………………………………………………………………………………………91
第8章 ReplicaSet
…………………………………………………….92
调和循环 ………………………………………………………………………………………………………………….93
将pod和ReplicaSet关联起来 ………………………………………………………………………………….94
采用现有容器 …………………………………………………………………………………………………..94
隔离容器 …………………………………………………………………………………………………………..94
使用ReplicaSet进行设计 …………………………………………………………………………………………95
ReplicaSet的规范 …………………………………………………………………………………………………….95
pod模板 …………………………………………………………………………………………………………..96
标签 ………………………………………………………………………………………………………………….96
创建ReplicaSet
…………………………………………………………………………………………………………97
监查ReplicaSet
…………………………………………………………………………………………………………97
从pod中查找ReplicaSet…………………………………………………………………………………..98
查找ReplicaSet的pod集…………………………………………………………………………………..98
扩展ReplicaSet
…………………………………………………………………………………………………………99
使用kubectl
Scale进行命令式缩放 …………………………………………………………………99
使用kubectl
apply进行声明式缩放 ……………………………………………………………..
100
自动调整ReplicaSet
………………………………………………………………………………………
101
删除ReplicaSet
………………………………………………………………………………………………………
102
小结 ………………………………………………………………………………………………………………………
103
第9章 DaemonSet ………………………………………………….
104
DaemonSet调度器 ……………………………………………………………………………………………….
105
创建DaemonSet
……………………………………………………………………………………………………
105
将DaemonSet限制为特定节点 …………………………………………………………………………….
108
为节点添加标签 …………………………………………………………………………………………….
108
节点选择器 ……………………………………………………………………………………………………
109
更新DaemonSet
……………………………………………………………………………………………………
110
通过删除单个pod来更新DaemonSet
…………………………………………………………. 110
滚动更新DaemonSet
…………………………………………………………………………………….
111
删除DaemonSet
……………………………………………………………………………………………………
112
小结 ………………………………………………………………………………………………………………………
112
第10章 作业 ………………………………………………………….
113
Job对象 …………………………………………………………………………………………………………………
113
作业模式 ……………………………………………………………………………………………………………….
114
一次性作业 ……………………………………………………………………………………………………
114
并行性 ……………………………………………………………………………………………………………
120
工作队列 ………………………………………………………………………………………………………..
122
小结 ………………………………………………………………………………………………………………………
126
第11章 ConfigMap与Secret
……………………………………. 127
ConfigMap
…………………………………………………………………………………………………………….
127
创建ConfigMap
……………………………………………………………………………………………..
128
ConfigMap的用法 …………………………………………………………………………………………
129
Secret
……………………………………………………………………………………………………………………
132
创建Secret
……………………………………………………………………………………………………..
133
消费secret ……………………………………………………………………………………………………..
134
私有Docker仓库 ……………………………………………………………………………………………
136
命名约束 ……………………………………………………………………………………………………………….
137
管理ConfigMap和Secret
………………………………………………………………………………………
137
显示 ……………………………………………………………………………………………………………….
138
创建 ……………………………………………………………………………………………………………….
138
更新 ……………………………………………………………………………………………………………….
139
小结 ………………………………………………………………………………………………………………………
141
第12章 Deployment ……………………………………………….
142
我们的第一个Deployment对象 …………………………………………………………………………..
143
Deployment对象的运行机制 ……………………………………………………………………….
143
创建Deployment对象 …………………………………………………………………………………………..
145
管理Deployment对象 …………………………………………………………………………………………..
146
更新Deployment对象 …………………………………………………………………………………………..
147
Deployment对象的缩放 ……………………………………………………………………………….
148
更新容器镜像 ………………………………………………………………………………………………..
148
更新的历史记录 …………………………………………………………………………………………….
150
部署策略 ……………………………………………………………………………………………………………….
153
Recreate策略 …………………………………………………………………………………………………
153
RollingUpdate策略………………………………………………………………………………………..
153
降低更新速度以确保服务的健康 …………………………………………………………………
157
删除Deployment
…………………………………………………………………………………………………..
159
小结 ………………………………………………………………………………………………………………………
159
第13章 为Kubernetes集成存储解决方案 …………………….
160
导入外部服务 ………………………………………………………………………………………………………..
161
没有选择器的服务 ……………………………………………………………………………………….
163
外部服务的局限性:健康检查 …………………………………………………………………….
165
运行可靠的单例 ……………………………………………………………………………………………………
165
运行MySQL单例 …………………………………………………………………………………………….
165
动态卷配置 ……………………………………………………………………………………………………
169
带有StatefulSet的Kubernetes-Native存储 …………………………………………………………
170
StatefulSet的特性 ………………………………………………………………………………………….
171
使用StatefulSet手动部署备份式MongoDB …………………………………………………
171
自动创建MongoDB群集 ……………………………………………………………………………….
174
持久卷和有状态集 ………………………………………………………………………………………..
177
最后一件事:准备就绪探针 …………………………………………………………………………
178
小结 ………………………………………………………………………………………………………………………
179
第14章 部署实际应用程序
……………………………………….. 180
Parse ……………………………………………………………………………………………………………………..
180
先决条件 ………………………………………………………………………………………………………..
181
构建parse-server
…………………………………………………………………………………………..
181
部署parse-server
…………………………………………………………………………………………..
182
测试Parse
……………………………………………………………………………………………………….
183
Ghost
…………………………………………………………………………………………………………………….
183
配置Ghost………………………………………………………………………………………………………
183
Redis
……………………………………………………………………………………………………………………..
187
配置Redis
……………………………………………………………………………………………………….
188
创建Redis服务 ……………………………………………………………………………………………….
190
部署Redis
……………………………………………………………………………………………………….
190
测试Redis群集 ……………………………………………………………………………………………….
192
小结 ………………………………………………………………………………………………………………………
193
附录A 利用Raspberry Pi搭建Kubernetes群集 …………………………………………………………….
195
Kubernetes 献辞
Kubernetes 要感谢每一个在凌晨三点醒来重启进程的系统管理员;感谢每个将代码推送到生产环境中,结果却发现它并没有像在笔记本计算机上那样运行的开发人员;感谢每个由于主机名更新问题而误将负载测试应用于生产环境中的服务上的系统架构师。当然,这都是些令人痛苦的、令人摸不着头脑的时刻,但正是由于这些奇怪错误才促进了Kubernetes 的发展。用一句话来说就是:Kubernetes 打算从根本上简化构建、部署和维护分布式系统的各种任务。它的灵感来自于几十年来人们在打造可靠系统方面积累的实际经验,并且进行了全新的设计,以便促使人们在从事这方面工作时的体验,即使不是欣喜的,也至少是愉快的。我们希望你喜欢这本书!
本书读者对象
无论你是分布式系统的新手,还是多年来一直在部署云原生系统的老手,容器和Kubernetes 都能帮你将速度、敏捷性、可靠性和效率提升到一个新的高度。本书将为读者详细介绍Kubernetes 群集管理器,以及如何使用其工具和API 来改善分布式应用程序的开发、交付和维护效率。尽管本书不要求读者有Kubernetes 方面的经验,但为了最大程度地利用本书,至少要求读者熟悉基于服务器的应用程序的构建和部署方面的知识。当然,熟悉负载均衡和网络存储等概念将是有用的,但不是必需的。同样,关于Linux、Linux 容器和Docker 的经验虽然不是必需的,却可以帮助你充分利用这本书。
我们为什么要写这本书
从Kubernetes 面世到现在,我们一直都在跟它打交道,从而有机会见证了它翻天覆地的变化:从一个当初主要满足好奇心的实验,转变为目前为从机器学习到在线服务等领域大规模应用提供强大动力的关键生产级基础设施。随着这一转变的发生,我们越来越迫切地感觉到需要写这样一本书:它既能抓住Kubernetes 使用方式的核心概念,同时又能抓住这些概念的发展背后的动机。如果能够编写一本这样的书,那么毫无疑问将会对云原生应用程序开发做出重要的贡献。我们希望在阅读本书时,你不仅可以学习如何在Kubernetes 之上构建可靠的、可伸缩的应用程序,同时还可以洞悉分布式系统所面临的核心挑战,因为正是这些挑战才促进了分布式系统的发展。
目前的云原生应用简介
从第一种编程语言到面向对象编程,再到虚拟化和云基础架构的发展,计算机科学的历史就是一个隐藏复杂性并赋予你构建更复杂应用程序的抽象开发的历史。尽管如此,可靠的、可扩展的应用程序的开发仍然面临着许多重大挑战。近年来,像Kubernetes 这样的容器和容器管理API 已经成为一个重要的抽象,它能从根本上简化可靠的、可扩展的分布式系统的开发。尽管容器和集群管理系统尚未完全成为主流,但它们已经能够让开发人员以快速、灵活和可靠的方式构建和部署应用程序,而这种方式在几年前看来简直就是科幻小说。
本书主要内容
本书的组织结构如下。第1 章概述了Kubernetes 的各种优势,这里不会深入探究其细节。如果你是Kubernetes 新手,最好从这一章开始阅读,从而了解本书其他部分的大致内容。接下来的一章将详细介绍容器和容器化应用程序开发。如果你以前从未真正接触过Docker,本章将是一个不错的入门材料。如果你已经是Docker 专家,那么它可以用于温故知新。第3 章介绍如何部署Kubernetes。虽然本书主要讲解Kubernetes 的使用方式,但是在此之前,需要建立并运行一个集群。当然,运行生产环境中的集群方面的知识已经超出了本书的范围,所以本章只是介绍几种创建集群的简单方法,以便了解Kubernetes 的使用方。从第5 章开始,我们深入了解使用Kubernetes 部署应用程序的具体细节。其中,我们将为读者详细介绍Pods(第5 章)、标签和注释(第6 章)、服务(第7 章)和ReplicaSet(第8 章)。这些就是利用Kubernetes 部署服务所需的核心基础知识。在这些章节之后,我们将讨论Kubernetes 中一些更专门化的对象:DaemonSet(第9 章)、jobs(第10 章),以及ConfigMaps 和secrets(第11 章)。虽然这些章节对于许多生产环境中的应用程序来说是必不可少的,但如果你只是学习Kubernetes,那么完全可以跳过它们,然后在获得更多的经验和专业知识后再回来阅读它们。然后,我们会讨论调度(第12 章),也就是将一个完整应用程序的生命周期绑定在一起,并将存储器集成到Kubernetes(第13 章)中。最后,我们通过一些例子来说明如何利用Kubernetes 来开发和部署实际应用程序。
在线资源
你需要安装Docker,为此,可能还需要熟悉一下相关的Docker 文档。同样,你也需要安装kubectl 命令行工具。你可能还想加入Kubernetes slack频道,这是一个大型用户社区,优点是几乎每天的任意时刻都有人在探讨和回答问题。最后,随着相关知识技能的不断进步,将来可能还需要直接与GitHub 上的开源Kubernetes 存储库进行交互。
排版约定
本书使用了下列排版约定:
斜体(Italic)表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant Width)表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。
等宽粗体(Constant width bold)表示应该由用户输入的命令或其他文本。
等宽斜体(Constant Width Italic)表示应该由用户输入的值或根据上下文确定的值替换的文本。
使用代码示例
补充材料(代码示例、习题等)可从https://github.com/kubernetes-up-andrunning/examples 下载。
本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序和文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可。销售或分发O’Reilly 图书的示例光盘则需要获得许可。引用本书中的示例代码来回答问题无需获得许可。将书中大量示例代码放到你的产品文档中则需要获得许可。
我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。比如:“Kubernetes: Up and Runningby Kelsey
Hightower, Brendan Burns, and Joe Beda (O’Reilly). Copyright 2017Kelsey
Hightower, Brendan Burns, and Joe Beda, 978-1-491-93567-5”。如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过[email protected] 与我们联系。
评论
还没有评论。