Kubernetes in Action中文版

Kubernetes in Action中文版
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] (马尔科·卢克沙)
2018-12
版次: 1
ISBN: 9787121349959
定价: 148.00
装帧: 其他
开本: 128开
纸张: 胶版纸
页数: 592页
224人买过
  • 本书主要讲解如何在 Kubernetes 中部署分布式容器应用。本书开始部分概要介绍了 Docker 和Kubernetes 的由来和发展,然后通过在 Kubernetes 中部署一个应用程序,一点点增加功能,逐步加深我们对于Kubernetes架构的理解和操作的实践。在本书的后面部分,也可以学习一些高阶的主题,比如监控、调试及伸缩。Kubernetes是希腊文,意思是“舵手”,带领我们安全地到达未知水域。Kubernetes这样的容器编排系统,会帮助我们妥善地管理分布式应用的部署结构和线上流量,高效地组织容器和服务。Kubernetes 作为数据中心操作系统,在设计软件系统时,能够尽量降低在底层网络和硬件设施上的负担。 原著作者简介

    Marko Luksa是一位拥有20年以上专业开发经验的软件工程师,经手项目小到简单的Web应用,大到ERP系统、框架和中间件软件,应有尽有。在为Red Hat工作期间,他从Google App Engine API实现的开发起步, 这些API将基于Red Hat的JBoss中间件产品,之后他一直在为CDI/Weld、Infinispan/JBoss DataGrid等项目贡献力量。2014后, 他加入Red Hat的Cloud Enablement团队,负责 Kubernetes和相关技术开发的更新,保障公司的中间件软件能将Kubernetes与OpenShift特性的潜能完全发挥出来。

     

    译者简介

    七牛容器云 (KIRK)团队,是负责七牛云基于自身公有云业务在容器方面的多年实践经验,针对企业应用快速部署、便捷运维打造的容器云计算平台。提供持续集成、弹性伸缩、应用市场等功能特性,使企业专注于业务逻辑开发,缩短业务上线周期,优化资源利用率,提高服务响应效率的一支技术团队。 1  Kubernetes 介绍1

    1.1 Kubernetes 系统的需求 2

    1.1.1 从单体应用到微服务 2

    1.1.2 为应用程序提供一个一致的环境 5

    1.1.3 迈向持续交付 :DevOps 和无运维 6

    1.2 介绍容器技术 7

    1.2.1 什么是容器 7

    1.2.2 Docker 容器平台介绍 11

    1.2.3 rkt——一个 Docker 的替代方案 14

    1.3 Kubernetes 介绍 15

    1.3.1 初衷 15

    1.3.2 深入浅出地了解 Kubernetes 15

    1.3.3 Kubernetes 集群架构 17

    1.3.4 在 Kubernetes 中运行应用 18

    1.3.5 使用 Kubernetes 的好处 20

    1.4 本章小结 22

    2  开始使用 Kubernetes 和 Docker 23

    2.1 创建、运行及共享容器镜像 23

    2.1.1 安装 Docker 并运行 Hello World 容器 24

    2.1.2 创建一个简单的 Node.js 应用 26

    2.1.3 为镜像创建 Dockerfile 27

    2.1.4 构建容器镜像 27

    2.1.5 运行容器镜像 30

    2.1.6 探索运行容器的内部 31

    2.1.7 停止和删除容器 32

    2.1.8 向镜像仓库推送镜像 33

    2.2 配置 Kubernetes 集群 34

    2.2.1 用 Minikube 运行一个本地单节点 Kubernetes 集群 34

    2.2.2 使用 Google Kubernetes Engine 托管 Kubernetes 集群 36

    2.2.3 为 kubectl 配置别名和命令行补齐 39

    2.3 在 Kubernetes 上运行第一个应用 40

    2.3.1 部署 Node.js 应用 40

    2.3.2 访问 Web 应用 43

    2.3.3 系统的逻辑部分 45

    2.3.4 水平伸缩应用 46

    2.3.5 查看应用运行在哪个节点上 49

    2.3.6 介绍 Kubernetes dashboard 50

    2.4 本章小结 51

    3  pod :运行于 Kubernetes 中的容器 53

    3.1 介绍 pod 53

    3.1.1 为何需要 pod 54

    3.1.2 了解 pod 55

    3.1.3 通过 pod 合理管理容器 56

    3.2 以 YAML 或 JSON 描述文件创建 pod 58

    3.2.1 检查现有 pod 的 YAML 描述文件 59

    3.2.2 为 pod 创建一个简单的 YAML 描述文件 61

    3.2.3 使用 kubectl create 来创建 pod 63

    3.2.4 查看应用程序日志 64

    3.2.5 向 pod 发送请求 65

    3.3 使用标签组织 pod 66

    3.3.1 介绍标签 66

    3.3.2 创建 pod 时指定标签 67

    3.3.3 修改现有 pod 的标签 68

    3.4 通过标签选择器列出 pod 子集 69

    3.4.1 使用标签选择器列出 pod 69

    3.4.2 在标签选择器中使用多个条件 71

    3.5 使用标签和选择器来约束 pod 调度 71

    3.5.1 使用标签分类工作节点 72

    3.5.2 将 pod 调度到特定节点 72

    3.5.3 调度到一个特定节点 73

    3.6 注解 pod73

    3.6.1 查找对象的注解 74

    3.6.2 添加和修改注解 74

    3.7 使用命名空间对资源进行分组 75

    3.7.1 了解对命名空间的需求 75

    3.7.2 发现其他命名空间及其 pod 75

    3.7.3 创建一个命名空间 76

    3.7.4 管理其他命名空间中的对象 77

    3.7.5 命名空间提供的隔离 78

    3.8 停止和移除 pod 78

    3.8.1 按名称删除 pod 78

    3.8.2 使用标签选择器删除 pod 79

    3.8.3 通过删除整个命名空间来删除 pod 80

    3.8.4 删除命名空间中的所有 pod,但保留命名空间 80

    3.8.5 删除命名空间中的(几乎)所有资源 80

    3.9 本章小结 81

    4  副本机制和其他控制器 :部署托管的 pod 83

    4.1 保持 pod 健康 84

    4.1.1 介绍存活探针 84

    4.1.2 创建基于 HTTP 的存活探针 85

    4.1.3 使用存活探针 86

    4.1.4 配置存活探针的附加属性 87

    4.1.5 创建有效的存活探针 88

    4.2 了解 ReplicationController 89

    4.2.1 ReplicationController 的操作 90

    4.2.2 创建一个 ReplicationController 92

    4.2.3 使用 ReplicationController 94

    4.2.4 将 pod 移入或移出 ReplicationController 的作用域 97

    4.2.5 修改 pod 模板 100

    4.2.6 水平缩放 pod 101

    4.2.7 删除一个 ReplicationController 103

    4.3 使用 ReplicaSet 而不是 ReplicationController 104

    4.3.1 比较 ReplicaSet 和 ReplicationController 104

    4.3.2 定义 ReplicaSet 105

    4.3.3 创建和检查 ReplicaSet106

    4.3.4 使用 ReplicaSet 的更富表达力的标签选择器106

    4.3.5 ReplicaSet 小结 107

    4.4 使用 DaemonSet 在每个节点上运行一个 pod 107

    4.4.1 使用 DaemonSet 在每个节点上运行一个 pod 108

    4.4.2 使用 DaemonSet 只在特定的节点上运行 pod 109

    4.5 运行执行单个任务的 pod 112

    4.5.1 介绍 Job 资源 112

    4.5.2 定义 Job 资源 113

    4.5.3 看 Job 运行一个 pod 114

    4.5.4 在 Job 中运行多个 pod 实例 114

    4.5.5 限制 Job pod 完成任务的时间 116

    4.6 安排 Job 定期运行或在将来运行一次 116

    4.6.1 创建一个 CronJob 116

    4.6.2 了解计划任务的运行方式 118

    4.7 本章小结 118

    5  服务 :让客户端发现 pod 并与之通信121

    5.1 介绍服务 122

    5.1.1 创建服务 123

    5.1.2 服务发现 129

    5.2 连接集群外部的服务 132

    5.2.1 介绍服务 endpoint 133

    5.2.2 手动配置服务的 endpoint 133

    5.2.3 为外部服务创建别名 135

    5.3 将服务暴露给外部客户端 136

    5.3.1 使用 NodePort 类型的服务 137

    5.3.2 通过负载均衡器将服务暴露出来 140

    5.3.3 了解外部连接的特性 142

    5.4 通过 Ingress 暴露服务 143

    5.4.1 创建 Ingress 资源 145

    5.4.2 通过 Ingress 访问服务 146

    5.4.3 通过相同的 Ingress 暴露多个服务 147

    5.4.4 配置 Ingress 处理 TLS 传输 149

    5.5 pod 就绪后发出信号 150

    5.5.1 介绍就绪探针 151

    5.5.2 向 pod 添加就绪探针 152

    5.5.3 了解就绪探针的实际作用 154

    5.6 使用 headless 服务来发现独立的 pod 155

    5.6.1 创建 headless 服务156

    5.6.2 通过 DNS 发现 pod 156

    5.6.3 发现所有的 pod——包括未就绪的 pod 157

    5.7 排除服务故障 158

    5.8 本章小结 159

    6  卷 :将磁盘挂载到容器 161

    6.1 介绍卷 162

    6.1.1 卷的应用示例162

    6.1.2 介绍可用的卷类型 164

    6.2 通过卷在容器之间共享数据 165

    6.2.1 使用 emptyDir 卷 165

    6.2.2 使用 Git 仓库作为存储卷 168

    6.3 访问工作节点文件系统上的文件 171

    6.3.1 介绍 hostPath 卷 171

    6.3.2 检查使用 hostPath 卷的系统 pod 172

    6.4 使用持久化存储 173

    6.4.1 使用 GCE 持久磁盘作为 pod 存储卷 174

    6.4.2 通过底层持久化存储使用其他类型的卷 177

    6.5 从底层存储技术解耦 pod 179

    6.5.1 介绍持久卷和持久卷声明 179

    6.5.2 创建持久卷 180

    6.5.3 通过创建持久卷声明来获取持久卷 182

    6.5.4 在 pod 中使用持久卷声明 184

    6.5.5 了解使用持久卷和持久卷声明的好处 185

    6.5.6 回收持久卷 186

    6.6 持久卷的动态卷配置 187

    6.6.1 通过 StorageClass 资源定义可用存储类型 188

    6.6.2 请求持久卷声明中的存储类 188

    6.6.3 不指定存储类的动态配置 190

    6.7 本章小结 193

    7  ConfigMap 和 Secret :配置应用程序 195

    7.1 配置容器化应用程序 195

    7.2 向容器传递命令行参数 196

    7.2.1 在 Docker 中定义命令与参数 196

    7.2.2 在 Kubernetes 中覆盖命令和参数 199

    7.3 为容器设置环境变量 200

    7.3.1 在容器定义中指定环境变量 201

    7.3.2 在环境变量值中引用其他环境变量 201

    7.3.3 了解硬编码环境变量的不足之处 202

    7.4 利用 ConfigMap 解耦配置 202

    7.4.1 ConfigMap 介绍 202

    7.4.2 创建 ConfigMap 203

    7.4.3 给容器传递 ConfigMap 条目作为环境变量 206

    7.4.4 一次性传递 ConfigMap 的所有条目作为环境变量 208

    7.4.5 传递 ConfigMap 条目作为命令行参数 209

    7.4.6 使用 configMap 卷将条目暴露为文件 210

    7.4.7 更新应用配置且不重启应用程序 216

    7.5 使用 Secret 给容器传递敏感数据 218

    7.5.1 介绍 Secret 218

    7.5.2 默认令牌 Secret 介绍 218

    7.5.3 创建 Secret 220

    7.5.4 对比 ConfigMap 与 Secret 221

    7.5.5 在 pod 中使用 Secret 222

    7.6 本章小结 228

    8  从应用访问 pod 元数据以及其他资源 229

    8.1 通过 Downward API 传递元数据 229

    8.1.1 了解可用的元数据 230

    8.1.2 通过环境变量暴露元数据 231

    8.1.3 通过 downwardAPI 卷来传递元数据 234

    8.2 与 Kubernetes API 服务器交互 237

    8.2.1 探究 Kubernetes REST API 238

    8.2.2 从 pod 内部与 API 服务器进行交互 242

    8.2.3 通过 ambassador 容器简化与 API 服务器的交互 248

    8.2.4 使用客户端库与 API 服务器交互 251

    8.3 本章小结 253

    9  Deployment: 声明式地升级应用 255

    9.1 更新运行在 pod 内的应用程序 256

    9.1.1 删除旧版本 pod,使用新版本 pod 替换257

    9.1.2 先创建新 pod 再删除旧版本 pod 257

    9.2 使用 ReplicationController 实现自动的滚动升级259

    9.2.1 运行第一个版本的应用 259

    9.2.2 使用 kubectl 来执行滚动式升级 261

    9.2.3 为什么 kubectl rolling-update已经过时 265

    9.3 使用 Deployment 声明式地升级应用 266

    9.3.1 创建一个 Deployment 267

    9.3.2 升级 Deployment 269

    9.3.3 回滚 Deployment 273

    9.3.4 控制滚动升级速率 276

    9.3.5 暂停滚动升级 278

    9.3.6 阻止出错版本的滚动升级 279

    9.4 本章小结 284

    10  StatefulSet :部署有状态的多副本应用 285

    10.1 复制有状态 pod 285

    10.1.1 运行每个实例都有单独存储的多副本 286

    10.1.2 每个 pod 都提供稳定的标识 287

    10.2 了解 Statefulset 289

    10.2.1 对比 Statefulset 和 ReplicaSet 289

    10.2.2 提供稳定的网络标识 290

    10.2.3 为每个有状态实例提供稳定的专属存储 292

    10.2.4 Statefulset 的保障 294

    10.3 使用 Statefulset 295

    10.3.1 创建应用和容器镜像 295

    10.3.2 通过 Statefulset 部署应用 296

    10.3.3 使用你的 pod 301

    10.4 在 Statefulset 中发现伙伴节点 305

    10.4.1 通过 DNS 实现伙伴间彼此发现 306

    10.4.2 更新 Statefulset 308

    10.4.3 尝试集群数据存储 309

    10.5 了解 Statefulset 如何处理节点失效 310

    10.5.1 模拟一个节点的网络断开 310

    10.5.2 手动删除 pod 312

    10.6 本章小结 313

    11  了解 Kubernetes 机理 315

    11.1 了解架构 315

    11.1.1 Kubernetes 组件的分布式特性 316

    11.1.2 Kubernetes 如何使用 etcd 318

    11.1.3 API 服务器做了什么 322

    11.1.4 API 服务器如何通知客户端资源变更 324

    11.1.5 了解调度器 325

    11.1.6 介绍控制器管理器中运行的控制器 327

    11.1.7 Kubelet 做了什么 331

    11.1.8 Kubernetes Service Proxy 的作用 332

    11.1.9 介绍 Kubernetes 插件 333

    11.1.10 总结概览 335

    11.2 控制器如何协作 335

    11.2.1 了解涉及哪些组件335

    11.2.2 事件链 336

    11.2.3 观察集群事件 337

    11.3 了解运行中的 pod 是什么 339

    11.4 跨 pod 网络 340

    11.4.1 网络应该是什么样的 340

    11.4.2 深入了解网络工作原理 341

    11.4.3 引入容器网络接口 343

    11.5 服务是如何实现的 344

    11.5.1 引入 kube-proxy 344

    11.5.2 kube-proxy 如何使用 iptables 344

    11.6 运行高可用集群 346

    11.6.1 让你的应用变得高可用 346

    11.6.2 让 Kubernetes 控制平面变得高可用 347

    11.7 本章小结 350

    12  Kubernetes API 服务器的安全防护 351

    12.1 了解认证机制 351

    12.1.1 用户和组 352

    12.1.2 ServiceAccount 介绍 353

    12.1.3 创建 ServiceAccount 354

    12.1.4 将 ServiceAccount 分配给 pod 356

    12.2 通过基于角色的权限控制加强集群安全 358

    12.2.1 介绍 RBAC 授权插件 359

    12.2.2 介绍 RBAC 资源 360

    12.2.3 使用 Role 和 RoleBinding 363

    12.2.4 使用 ClusterRole 和 ClusterRoleBinding 367

    12.2.5 了解默认的 ClusterRole 和 ClusterRoleBinding 376

    12.2.6 理性地授予授权权限 379

    12.3 本章小结 379

    13  保障集群内节点和网络安全 381

    13.1 在 pod 中使用宿主节点的 Linux 命名空间 381

    13.1.1 在 pod 中使用宿主节点的网络命名空间382

    13.1.2 绑定宿主节点上的端口而不使用宿主节点的网络命名空间 383

    13.1.3 使用宿主节点的 PID 与 IPC 命名空间 385

    13.2 配置节点的安全上下文 386

    13.3 限制 pod 使用安全相关的特性 396

    13.4 隔离 pod 的网络 406

    13.5 本章小结 410

    14  计算资源管理 411

    14.1 为 pod 中的容器申请资源 411

    14.1.1 创建包含资源 requests 的 pod 412

    14.1.2 资源 requests 如何影响调度 413

    14.1.3 CPU requests 如何影响 CPU 时间分配 418

    14.1.4 定义和申请自定义资源 418

    14.2 限制容器的可用资源 419

    14.3 了解 pod QoS 等级 423

    14.4 为命名空间中的 pod 设置默认的 requests 和 limits 427

    14.5 限制命名空间中的可用资源总量 431

    14.6 监控 pod 的资源使用量 436

    14.7 本章小结 442

    15  自动横向伸缩 pod 与集群节点 443

    15.1 pod 的横向自动伸缩 444

    15.2 pod 的纵向自动伸缩 456

    15.3 集群节点的横向伸缩 457

    15.4 本章小结 461

    16  高级调度463

    16.1 使用污点和容忍度阻止节点调度到特定节点 463

    16.2 使用节点亲缘性将 pod 调度到特定节点上 469

    16.3 使用 pod 亲缘性与非亲缘性对 pod 进行协同部署 475

    16.4 本章小结 483

    17  开发应用的最佳实践 485

    17.1 集中一切资源 486

    17.2 了解 pod 的生命周期 487

    17.3 确保所有的客户端请求都得到了妥善处理 500

    17.4 让应用在 Kubernetes 中方便运行和管理 505

    17.5 开发和测试的最佳实践 510

    17.6 本章小结 515

    18  Kubernetes 应用扩展 517

    18.1 定义自定义 API 对象 517

    18.2 使用 Kubernetes 服务目录扩展 Kubernetes 528

    18.3 基于 Kubernetes 搭建的平台 536

    18.4 本章小结 541

    A  在多个集群中使用 kubectl 543

    B  使用 kubeadm 配置多节点集群 549

    C  使用其他容器运行时 563

    D  Cluster Federation 567
  • 内容简介:
    本书主要讲解如何在 Kubernetes 中部署分布式容器应用。本书开始部分概要介绍了 Docker 和Kubernetes 的由来和发展,然后通过在 Kubernetes 中部署一个应用程序,一点点增加功能,逐步加深我们对于Kubernetes架构的理解和操作的实践。在本书的后面部分,也可以学习一些高阶的主题,比如监控、调试及伸缩。Kubernetes是希腊文,意思是“舵手”,带领我们安全地到达未知水域。Kubernetes这样的容器编排系统,会帮助我们妥善地管理分布式应用的部署结构和线上流量,高效地组织容器和服务。Kubernetes 作为数据中心操作系统,在设计软件系统时,能够尽量降低在底层网络和硬件设施上的负担。
  • 作者简介:
    原著作者简介

    Marko Luksa是一位拥有20年以上专业开发经验的软件工程师,经手项目小到简单的Web应用,大到ERP系统、框架和中间件软件,应有尽有。在为Red Hat工作期间,他从Google App Engine API实现的开发起步, 这些API将基于Red Hat的JBoss中间件产品,之后他一直在为CDI/Weld、Infinispan/JBoss DataGrid等项目贡献力量。2014后, 他加入Red Hat的Cloud Enablement团队,负责 Kubernetes和相关技术开发的更新,保障公司的中间件软件能将Kubernetes与OpenShift特性的潜能完全发挥出来。

     

    译者简介

    七牛容器云 (KIRK)团队,是负责七牛云基于自身公有云业务在容器方面的多年实践经验,针对企业应用快速部署、便捷运维打造的容器云计算平台。提供持续集成、弹性伸缩、应用市场等功能特性,使企业专注于业务逻辑开发,缩短业务上线周期,优化资源利用率,提高服务响应效率的一支技术团队。
  • 目录:
    1  Kubernetes 介绍1

    1.1 Kubernetes 系统的需求 2

    1.1.1 从单体应用到微服务 2

    1.1.2 为应用程序提供一个一致的环境 5

    1.1.3 迈向持续交付 :DevOps 和无运维 6

    1.2 介绍容器技术 7

    1.2.1 什么是容器 7

    1.2.2 Docker 容器平台介绍 11

    1.2.3 rkt——一个 Docker 的替代方案 14

    1.3 Kubernetes 介绍 15

    1.3.1 初衷 15

    1.3.2 深入浅出地了解 Kubernetes 15

    1.3.3 Kubernetes 集群架构 17

    1.3.4 在 Kubernetes 中运行应用 18

    1.3.5 使用 Kubernetes 的好处 20

    1.4 本章小结 22

    2  开始使用 Kubernetes 和 Docker 23

    2.1 创建、运行及共享容器镜像 23

    2.1.1 安装 Docker 并运行 Hello World 容器 24

    2.1.2 创建一个简单的 Node.js 应用 26

    2.1.3 为镜像创建 Dockerfile 27

    2.1.4 构建容器镜像 27

    2.1.5 运行容器镜像 30

    2.1.6 探索运行容器的内部 31

    2.1.7 停止和删除容器 32

    2.1.8 向镜像仓库推送镜像 33

    2.2 配置 Kubernetes 集群 34

    2.2.1 用 Minikube 运行一个本地单节点 Kubernetes 集群 34

    2.2.2 使用 Google Kubernetes Engine 托管 Kubernetes 集群 36

    2.2.3 为 kubectl 配置别名和命令行补齐 39

    2.3 在 Kubernetes 上运行第一个应用 40

    2.3.1 部署 Node.js 应用 40

    2.3.2 访问 Web 应用 43

    2.3.3 系统的逻辑部分 45

    2.3.4 水平伸缩应用 46

    2.3.5 查看应用运行在哪个节点上 49

    2.3.6 介绍 Kubernetes dashboard 50

    2.4 本章小结 51

    3  pod :运行于 Kubernetes 中的容器 53

    3.1 介绍 pod 53

    3.1.1 为何需要 pod 54

    3.1.2 了解 pod 55

    3.1.3 通过 pod 合理管理容器 56

    3.2 以 YAML 或 JSON 描述文件创建 pod 58

    3.2.1 检查现有 pod 的 YAML 描述文件 59

    3.2.2 为 pod 创建一个简单的 YAML 描述文件 61

    3.2.3 使用 kubectl create 来创建 pod 63

    3.2.4 查看应用程序日志 64

    3.2.5 向 pod 发送请求 65

    3.3 使用标签组织 pod 66

    3.3.1 介绍标签 66

    3.3.2 创建 pod 时指定标签 67

    3.3.3 修改现有 pod 的标签 68

    3.4 通过标签选择器列出 pod 子集 69

    3.4.1 使用标签选择器列出 pod 69

    3.4.2 在标签选择器中使用多个条件 71

    3.5 使用标签和选择器来约束 pod 调度 71

    3.5.1 使用标签分类工作节点 72

    3.5.2 将 pod 调度到特定节点 72

    3.5.3 调度到一个特定节点 73

    3.6 注解 pod73

    3.6.1 查找对象的注解 74

    3.6.2 添加和修改注解 74

    3.7 使用命名空间对资源进行分组 75

    3.7.1 了解对命名空间的需求 75

    3.7.2 发现其他命名空间及其 pod 75

    3.7.3 创建一个命名空间 76

    3.7.4 管理其他命名空间中的对象 77

    3.7.5 命名空间提供的隔离 78

    3.8 停止和移除 pod 78

    3.8.1 按名称删除 pod 78

    3.8.2 使用标签选择器删除 pod 79

    3.8.3 通过删除整个命名空间来删除 pod 80

    3.8.4 删除命名空间中的所有 pod,但保留命名空间 80

    3.8.5 删除命名空间中的(几乎)所有资源 80

    3.9 本章小结 81

    4  副本机制和其他控制器 :部署托管的 pod 83

    4.1 保持 pod 健康 84

    4.1.1 介绍存活探针 84

    4.1.2 创建基于 HTTP 的存活探针 85

    4.1.3 使用存活探针 86

    4.1.4 配置存活探针的附加属性 87

    4.1.5 创建有效的存活探针 88

    4.2 了解 ReplicationController 89

    4.2.1 ReplicationController 的操作 90

    4.2.2 创建一个 ReplicationController 92

    4.2.3 使用 ReplicationController 94

    4.2.4 将 pod 移入或移出 ReplicationController 的作用域 97

    4.2.5 修改 pod 模板 100

    4.2.6 水平缩放 pod 101

    4.2.7 删除一个 ReplicationController 103

    4.3 使用 ReplicaSet 而不是 ReplicationController 104

    4.3.1 比较 ReplicaSet 和 ReplicationController 104

    4.3.2 定义 ReplicaSet 105

    4.3.3 创建和检查 ReplicaSet106

    4.3.4 使用 ReplicaSet 的更富表达力的标签选择器106

    4.3.5 ReplicaSet 小结 107

    4.4 使用 DaemonSet 在每个节点上运行一个 pod 107

    4.4.1 使用 DaemonSet 在每个节点上运行一个 pod 108

    4.4.2 使用 DaemonSet 只在特定的节点上运行 pod 109

    4.5 运行执行单个任务的 pod 112

    4.5.1 介绍 Job 资源 112

    4.5.2 定义 Job 资源 113

    4.5.3 看 Job 运行一个 pod 114

    4.5.4 在 Job 中运行多个 pod 实例 114

    4.5.5 限制 Job pod 完成任务的时间 116

    4.6 安排 Job 定期运行或在将来运行一次 116

    4.6.1 创建一个 CronJob 116

    4.6.2 了解计划任务的运行方式 118

    4.7 本章小结 118

    5  服务 :让客户端发现 pod 并与之通信121

    5.1 介绍服务 122

    5.1.1 创建服务 123

    5.1.2 服务发现 129

    5.2 连接集群外部的服务 132

    5.2.1 介绍服务 endpoint 133

    5.2.2 手动配置服务的 endpoint 133

    5.2.3 为外部服务创建别名 135

    5.3 将服务暴露给外部客户端 136

    5.3.1 使用 NodePort 类型的服务 137

    5.3.2 通过负载均衡器将服务暴露出来 140

    5.3.3 了解外部连接的特性 142

    5.4 通过 Ingress 暴露服务 143

    5.4.1 创建 Ingress 资源 145

    5.4.2 通过 Ingress 访问服务 146

    5.4.3 通过相同的 Ingress 暴露多个服务 147

    5.4.4 配置 Ingress 处理 TLS 传输 149

    5.5 pod 就绪后发出信号 150

    5.5.1 介绍就绪探针 151

    5.5.2 向 pod 添加就绪探针 152

    5.5.3 了解就绪探针的实际作用 154

    5.6 使用 headless 服务来发现独立的 pod 155

    5.6.1 创建 headless 服务156

    5.6.2 通过 DNS 发现 pod 156

    5.6.3 发现所有的 pod——包括未就绪的 pod 157

    5.7 排除服务故障 158

    5.8 本章小结 159

    6  卷 :将磁盘挂载到容器 161

    6.1 介绍卷 162

    6.1.1 卷的应用示例162

    6.1.2 介绍可用的卷类型 164

    6.2 通过卷在容器之间共享数据 165

    6.2.1 使用 emptyDir 卷 165

    6.2.2 使用 Git 仓库作为存储卷 168

    6.3 访问工作节点文件系统上的文件 171

    6.3.1 介绍 hostPath 卷 171

    6.3.2 检查使用 hostPath 卷的系统 pod 172

    6.4 使用持久化存储 173

    6.4.1 使用 GCE 持久磁盘作为 pod 存储卷 174

    6.4.2 通过底层持久化存储使用其他类型的卷 177

    6.5 从底层存储技术解耦 pod 179

    6.5.1 介绍持久卷和持久卷声明 179

    6.5.2 创建持久卷 180

    6.5.3 通过创建持久卷声明来获取持久卷 182

    6.5.4 在 pod 中使用持久卷声明 184

    6.5.5 了解使用持久卷和持久卷声明的好处 185

    6.5.6 回收持久卷 186

    6.6 持久卷的动态卷配置 187

    6.6.1 通过 StorageClass 资源定义可用存储类型 188

    6.6.2 请求持久卷声明中的存储类 188

    6.6.3 不指定存储类的动态配置 190

    6.7 本章小结 193

    7  ConfigMap 和 Secret :配置应用程序 195

    7.1 配置容器化应用程序 195

    7.2 向容器传递命令行参数 196

    7.2.1 在 Docker 中定义命令与参数 196

    7.2.2 在 Kubernetes 中覆盖命令和参数 199

    7.3 为容器设置环境变量 200

    7.3.1 在容器定义中指定环境变量 201

    7.3.2 在环境变量值中引用其他环境变量 201

    7.3.3 了解硬编码环境变量的不足之处 202

    7.4 利用 ConfigMap 解耦配置 202

    7.4.1 ConfigMap 介绍 202

    7.4.2 创建 ConfigMap 203

    7.4.3 给容器传递 ConfigMap 条目作为环境变量 206

    7.4.4 一次性传递 ConfigMap 的所有条目作为环境变量 208

    7.4.5 传递 ConfigMap 条目作为命令行参数 209

    7.4.6 使用 configMap 卷将条目暴露为文件 210

    7.4.7 更新应用配置且不重启应用程序 216

    7.5 使用 Secret 给容器传递敏感数据 218

    7.5.1 介绍 Secret 218

    7.5.2 默认令牌 Secret 介绍 218

    7.5.3 创建 Secret 220

    7.5.4 对比 ConfigMap 与 Secret 221

    7.5.5 在 pod 中使用 Secret 222

    7.6 本章小结 228

    8  从应用访问 pod 元数据以及其他资源 229

    8.1 通过 Downward API 传递元数据 229

    8.1.1 了解可用的元数据 230

    8.1.2 通过环境变量暴露元数据 231

    8.1.3 通过 downwardAPI 卷来传递元数据 234

    8.2 与 Kubernetes API 服务器交互 237

    8.2.1 探究 Kubernetes REST API 238

    8.2.2 从 pod 内部与 API 服务器进行交互 242

    8.2.3 通过 ambassador 容器简化与 API 服务器的交互 248

    8.2.4 使用客户端库与 API 服务器交互 251

    8.3 本章小结 253

    9  Deployment: 声明式地升级应用 255

    9.1 更新运行在 pod 内的应用程序 256

    9.1.1 删除旧版本 pod,使用新版本 pod 替换257

    9.1.2 先创建新 pod 再删除旧版本 pod 257

    9.2 使用 ReplicationController 实现自动的滚动升级259

    9.2.1 运行第一个版本的应用 259

    9.2.2 使用 kubectl 来执行滚动式升级 261

    9.2.3 为什么 kubectl rolling-update已经过时 265

    9.3 使用 Deployment 声明式地升级应用 266

    9.3.1 创建一个 Deployment 267

    9.3.2 升级 Deployment 269

    9.3.3 回滚 Deployment 273

    9.3.4 控制滚动升级速率 276

    9.3.5 暂停滚动升级 278

    9.3.6 阻止出错版本的滚动升级 279

    9.4 本章小结 284

    10  StatefulSet :部署有状态的多副本应用 285

    10.1 复制有状态 pod 285

    10.1.1 运行每个实例都有单独存储的多副本 286

    10.1.2 每个 pod 都提供稳定的标识 287

    10.2 了解 Statefulset 289

    10.2.1 对比 Statefulset 和 ReplicaSet 289

    10.2.2 提供稳定的网络标识 290

    10.2.3 为每个有状态实例提供稳定的专属存储 292

    10.2.4 Statefulset 的保障 294

    10.3 使用 Statefulset 295

    10.3.1 创建应用和容器镜像 295

    10.3.2 通过 Statefulset 部署应用 296

    10.3.3 使用你的 pod 301

    10.4 在 Statefulset 中发现伙伴节点 305

    10.4.1 通过 DNS 实现伙伴间彼此发现 306

    10.4.2 更新 Statefulset 308

    10.4.3 尝试集群数据存储 309

    10.5 了解 Statefulset 如何处理节点失效 310

    10.5.1 模拟一个节点的网络断开 310

    10.5.2 手动删除 pod 312

    10.6 本章小结 313

    11  了解 Kubernetes 机理 315

    11.1 了解架构 315

    11.1.1 Kubernetes 组件的分布式特性 316

    11.1.2 Kubernetes 如何使用 etcd 318

    11.1.3 API 服务器做了什么 322

    11.1.4 API 服务器如何通知客户端资源变更 324

    11.1.5 了解调度器 325

    11.1.6 介绍控制器管理器中运行的控制器 327

    11.1.7 Kubelet 做了什么 331

    11.1.8 Kubernetes Service Proxy 的作用 332

    11.1.9 介绍 Kubernetes 插件 333

    11.1.10 总结概览 335

    11.2 控制器如何协作 335

    11.2.1 了解涉及哪些组件335

    11.2.2 事件链 336

    11.2.3 观察集群事件 337

    11.3 了解运行中的 pod 是什么 339

    11.4 跨 pod 网络 340

    11.4.1 网络应该是什么样的 340

    11.4.2 深入了解网络工作原理 341

    11.4.3 引入容器网络接口 343

    11.5 服务是如何实现的 344

    11.5.1 引入 kube-proxy 344

    11.5.2 kube-proxy 如何使用 iptables 344

    11.6 运行高可用集群 346

    11.6.1 让你的应用变得高可用 346

    11.6.2 让 Kubernetes 控制平面变得高可用 347

    11.7 本章小结 350

    12  Kubernetes API 服务器的安全防护 351

    12.1 了解认证机制 351

    12.1.1 用户和组 352

    12.1.2 ServiceAccount 介绍 353

    12.1.3 创建 ServiceAccount 354

    12.1.4 将 ServiceAccount 分配给 pod 356

    12.2 通过基于角色的权限控制加强集群安全 358

    12.2.1 介绍 RBAC 授权插件 359

    12.2.2 介绍 RBAC 资源 360

    12.2.3 使用 Role 和 RoleBinding 363

    12.2.4 使用 ClusterRole 和 ClusterRoleBinding 367

    12.2.5 了解默认的 ClusterRole 和 ClusterRoleBinding 376

    12.2.6 理性地授予授权权限 379

    12.3 本章小结 379

    13  保障集群内节点和网络安全 381

    13.1 在 pod 中使用宿主节点的 Linux 命名空间 381

    13.1.1 在 pod 中使用宿主节点的网络命名空间382

    13.1.2 绑定宿主节点上的端口而不使用宿主节点的网络命名空间 383

    13.1.3 使用宿主节点的 PID 与 IPC 命名空间 385

    13.2 配置节点的安全上下文 386

    13.3 限制 pod 使用安全相关的特性 396

    13.4 隔离 pod 的网络 406

    13.5 本章小结 410

    14  计算资源管理 411

    14.1 为 pod 中的容器申请资源 411

    14.1.1 创建包含资源 requests 的 pod 412

    14.1.2 资源 requests 如何影响调度 413

    14.1.3 CPU requests 如何影响 CPU 时间分配 418

    14.1.4 定义和申请自定义资源 418

    14.2 限制容器的可用资源 419

    14.3 了解 pod QoS 等级 423

    14.4 为命名空间中的 pod 设置默认的 requests 和 limits 427

    14.5 限制命名空间中的可用资源总量 431

    14.6 监控 pod 的资源使用量 436

    14.7 本章小结 442

    15  自动横向伸缩 pod 与集群节点 443

    15.1 pod 的横向自动伸缩 444

    15.2 pod 的纵向自动伸缩 456

    15.3 集群节点的横向伸缩 457

    15.4 本章小结 461

    16  高级调度463

    16.1 使用污点和容忍度阻止节点调度到特定节点 463

    16.2 使用节点亲缘性将 pod 调度到特定节点上 469

    16.3 使用 pod 亲缘性与非亲缘性对 pod 进行协同部署 475

    16.4 本章小结 483

    17  开发应用的最佳实践 485

    17.1 集中一切资源 486

    17.2 了解 pod 的生命周期 487

    17.3 确保所有的客户端请求都得到了妥善处理 500

    17.4 让应用在 Kubernetes 中方便运行和管理 505

    17.5 开发和测试的最佳实践 510

    17.6 本章小结 515

    18  Kubernetes 应用扩展 517

    18.1 定义自定义 API 对象 517

    18.2 使用 Kubernetes 服务目录扩展 Kubernetes 528

    18.3 基于 Kubernetes 搭建的平台 536

    18.4 本章小结 541

    A  在多个集群中使用 kubectl 543

    B  使用 kubeadm 配置多节点集群 549

    C  使用其他容器运行时 563

    D  Cluster Federation 567
查看详情
相关图书 / 更多
Kubernetes in Action中文版
Kubernetes实战:构建生产级应用平台
[美]约翰·哈里斯 著;[美]乔希·罗索;[美]里奇·兰德;[美]亚历山大·布兰德
Kubernetes in Action中文版
Kubernetes修炼手册
[英]奈吉尔·波尔顿(Nigel Poulton)
Kubernetes in Action中文版
Kubernetes操作器
[美]詹森·多比斯(Jason Dobies);[美]约书亚·伍德(Joshua Wood);马晶慧
Kubernetes in Action中文版
Kubernetes编程
[美]迈克尔·豪森布拉斯(Michael Hausenblas) 著;李凡希、任震宇 译
Kubernetes in Action中文版
Kubernetes原生微服务开发
肯·芬尼根(Ken Finnigan)著 陈计节 张圣奇 译;[美]约翰·克林甘(John Clingan)
Kubernetes in Action中文版
Kubernetes快速进阶与实战
艾叔
Kubernetes in Action中文版
Kubernetes从入门到DevOps企业应用实战
韩先超
Kubernetes in Action中文版
Kubernetes Operator开发进阶
胡涛(Daniel Hu) 编著
Kubernetes in Action中文版
Kubernetes快速入门
[英]奈吉尔·波尔顿(Nigel Poulton)
Kubernetes in Action中文版
Kubeflow学习指南:生产级机器学习系统实现
[美]特雷弗·格兰特 (加)霍尔顿·卡劳 (俄)鲍里斯·卢布林斯基 (美)理查德·刘 (美)伊兰·菲洛年科
Kubernetes in Action中文版
Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)
龚正
Kubernetes in Action中文版
Kubernetes即学即用(第二版)
布兰登·柏恩思;乔·贝达;凯尔西·海托华;马晶慧
您可能感兴趣 / 更多
Kubernetes in Action中文版
孩子,把你的手给我1:怎么说孩子才爱听,怎么教孩子才肯学?帮助每一位3-12岁孩子的父母结束与孩子的所有冲突!
[美]海姆·G.吉诺特
Kubernetes in Action中文版
怎样做成大事
[美]丹·加德纳(Dan Gardner) 著;贾拥民 译;湛庐文化 出品;[丹麦]傅以斌(Bent Flyvbjerg)
Kubernetes in Action中文版
1200年希腊罗马神话
[美]伊迪丝·汉密尔顿
Kubernetes in Action中文版
爱情心理学(新编本)
[美]罗伯特·J. 斯腾伯格 (美)凯琳·斯腾伯格 倪爱萍 译
Kubernetes in Action中文版
黄金圈法则
[美]西蒙·斯涅克 著;磨铁文化 出品
Kubernetes in Action中文版
汤姆·索亚历险记 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]马克 吐温
Kubernetes in Action中文版
富兰克林自传 名家全译本 改变无数人命运的励志传奇 埃隆马斯克反复推荐 赠富兰克林签名照及精美插图
[美]本杰明·富兰克林 著;李自修 译
Kubernetes in Action中文版
意大利文艺复兴新艺术史
[美]迈克尔·韦恩·科尔 著;[美]斯蒂芬·J·坎贝尔;邵亦杨
Kubernetes in Action中文版
汤姆素亚历险记:中小学生课外阅读快乐读书吧 儿童文学无障碍有声伴读世界名著童话故事
[美]马克·吐温
Kubernetes in Action中文版
老人与海 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]海明威
Kubernetes in Action中文版
养育的觉醒:全面激发孩子自驱力,教你如何心平气和做妈妈
[美]凯文·莱曼 著;唐晓璐 译;斯坦威 出品
Kubernetes in Action中文版
国际大奖图画书系列 共11册(小老鼠的恐惧的大书,大灰狼,红豆与菲比,别烦我,下雪了 ,穿靴子的猫 ,先有蛋,绿 ,特别快递,如果你想看鲸鱼 ,一个部落的孩子 ) 麦克米伦世纪
[美]莱恩·史密斯 (英)埃米莉·格雷维特 (美)劳拉·瓦卡罗·等/文 (英)埃米莉·格雷维特 等/图 彭懿 杨玲玲 阿甲 孙慧阳 白薇 译