当前位置:首页 > 工业技术
Kubernetes in Action  中文版
Kubernetes in Action  中文版

Kubernetes in Action 中文版PDF电子书下载

工业技术

  • 电子书积分:17 积分如何计算积分?
  • 作 者:(美)Marko Luksa著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2019
  • ISBN:7121349959
  • 页数:570 页
图书介绍:
《Kubernetes in Action 中文版》目录
标签:中文版

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.j s应用 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.j s应用 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注解pod 73

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创建和检查ReplicaSet 106

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.2.1使用指定用户运行容器 387

13.2.2阻止容器以root用户运行 388

13.2.3使用特权模式运行pod 389

13.2.4为容器单独添加内核功能 390

13.2.5在容器中禁用内核功能 391

13.2.6阻止对容器根文件系统的写入 392

13.2.7容器使用不同用户运行时共享存储卷 394

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

13.3.1 PodSecurityPolicy资源介绍 396

13.3.2了解runAsUser、 fsGroup和supplemental Group策略 398

13.3.3配置允许、默认添加、禁止使用的内核功能 400

13.3.4限制pod可以使用的存储卷类型 402

13.3.5对不同的用户与组分配不同的PodSecurityPolicy 402

13.4隔离pod的网络 406

13.4.1在一个命名空间中启用网络隔离 406

13.4.2允许同一命名空间中的部分pod访问一个服务端pod 407

13.4.3在不同Kubernetes命名空间之间进行网络隔离 408

13.4.4使用CIDR隔离网络 409

13.4.5限制pod的对外访问流量 409

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.2.1设置容器可使用资源量的硬限制 419

14.2.2超过limits 421

14.2.3容器中的应用如何看待limits 422

14.3了解pod QoS等级 423

14.3.1定义pod的QoS等级 424

14.3.2内存不足时哪个进程会被杀死 426

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

14.4.1 LimitRange资源简介 428

14.4.2 LimitRange对象的创建 428

14.4.3强制进行限制 430

14.4.4应用资源requests和limits的默认值 430

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

14.5.1 ResourceQuota资源介绍 431

14.5.2为持久化存储指定配额 434

14.5.3限制可创建对象的个数 434

14.5.4为特定的pod状态或者QoS等级指定配额 435

14.6监控pod的资源使用量 436

14.6.1收集、获取实际资源使用情况 437

14.6.2保存并分析历史资源的使用统计信息 439

14.7本章小结 442

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

15.1 pod的横向自动伸缩 444

15.1.1了解自动伸缩过程 444

15.1.2基于CPU使用率进行自动伸缩 447

15.1.3基于内存使用进行自动伸缩 453

15.1.4基于其他自定义度量进行自动伸缩 453

15.1.5确定哪些度量适合用于自动伸缩 456

15.1.6缩容到0个副本 456

15.2 pod的纵向自动伸缩 456

15.2.1自动配置资源请求 457

15.2.2修改运行中pod的资源请求 457

15.3集群节点的横向伸缩 457

15.3.1 Cluster Autoscaler介绍 457

15.3.2启用Cluster Autoscaler 459

15.3.3限制集群缩容时的服务干扰 460

15.4本章小结 461

16高级调度 463

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

16.1.1介绍污点和容忍度 464

16.1.2在节点上添加自定义污点 466

16.1.3在pod上添加污点容忍度 467

16.1.4了解污点和污点容忍度的使用场景 467

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

16.2.1指定强制性节点亲缘性规则 470

16.2.2调度pod时优先考虑某些节点 472

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

16.3.1使用pod间亲缘性将多个pod部署在同一个节点上 475

16.3.2将pod部署在同一机柜、可用性区域或者地理地域 478

16.3.3表达pod亲缘性优先级取代强制性要求 479

16.3.4利用pod的非亲缘性分开调度pod 481

16.4本章小结 483

17开发应用的最佳实践 485

17.1集中一切资源 486

17.2了解pod的生命周期 487

17.2.1应用必须预料到会被杀死或者重新调度 487

17.2.2重新调度死亡的或者部分死亡的pod 490

17.2.3以固定顺序启动pod 491

17.2.4增加生命周期钩子 493

17.2.5了解pod的关闭 497

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

17.3.1在pod启动时避免客户端连接断开 500

17.3.2在pod关闭时避免客户端连接断开 501

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

17.4.1构建可管理的容器镜像 505

17.4.2合理地给镜像打标签,正确地使用ImagePullPolicy 506

17.4.3使用多维度而不是单维度的标签 506

17.4.4通过注解描述每个资源 506

17.4.5给进程终止提供更多的信息 507

17.4.6处理应用日志 508

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

17.5.1开发过程中在Kubernetes之外运行应用 510

17.5.2在开发过程中使用Minikube 512

17.5.3发布版本和自动部署资源清单 513

17.5.4使用Ksonnet作为编写YAML/JSON manifest文件的额外选择 513

17.5.5利用持续集成和持续交付 514

17.6本章小结 515

18 Kubernetes应用扩展 517

18.1定义自定义API对象 517

18.1.1 CustomResourceDefinitions介绍 518

18.1.2使用自定义控制器自动定制资源 522

18.1.3验证自定义对象 526

18.1.4为自定义对象提供自定义API服务器 527

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

18.2.1服务目录介绍 529

18.2.2服务目录API服务器与控制器管理器介绍 530

18.2.3 Service代理和OpenServiceBroker API 530

18.2.4提供服务与使用服务 533

18.2.5解除绑定与取消配置 535

18.2.6服务目录给我们带来了什么 535

18.3基于Kubernetes搭建的平台 536

18.3.1红帽OpenShift容器平台 536

18.3.2 Deis Workflow与Helm 539

18.4本章小结 541

A在多个集群中使用kubectl 543

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

C使用其他容器运行时 563

D Cluster Federation 567

返回顶部