作者 |
布兰登·伯恩斯 埃迪·维拉尔巴 戴夫·斯特雷贝尔 拉克兰·埃文森 马永亮 |
丛书名 |
O’Reilly精品图书系列 |
出版社 |
机械工业出版社 |
ISBN |
9782101251454 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------Kubernetes实战--------------------------- 在本书中,四位在分布式系统、企业应用开发和开源领域有着丰富经验的 Kubernetes 专家将会对如何使用 Kubernetes 容器编排系统构建应用进行全程指导。本书内容丰富,涵盖开发人员的工作流程、监控和度量指标、配置管理、持续集成和测试、版本控制与发布、应用程序的全球化部署、资源管理、网络、Pod安全、集群策略与治理、多集群管理、外部服务集成、机器学习、如何在Kubernetes上构建更高层次的平台、状态管理和有状态应用程序、许可控制与授权等,是一本非常全面的实践指南。 ---------------------------Kubernetes进阶实战--------------------------- 全书分为3篇。第一篇详细讲解Kubernetes系统基础架构及核心概述,并提供一个Kubernetes快速部署和应用的入门指南。第二篇剖析分Kubernetes系统的核心组件,对Pod、Controller、Service、Network Policy、Volume、ConfigMap和Secret等都有着深入讲解。第三篇主要关注实际应用,以DevOps为主线讲解Kubernetes在企业落地应用的解决方案示例。 |
目录 |
---------------------------Kubernetes实战--------------------------- 前言1 第1章 搭建一个基本服务7 1.1 应用程序概览7 1.2 配置文件管理7 1.3 使用Deployment创建多副本服务9 1.4 为HTTP流量配置外部Ingress12 1.5 使用ConfigMap配置应用程序13 1.6 使用Secret管理认证15 1.7 部署简单的有状态数据库18 1.8 使用服务创建TCP负载均衡器21 1.9 使用Ingress将流量路由到静态文件服务器22 1.10 使用Helm参数化应用程序24 1.11 部署服务的最佳实践26 1.12 小结27 第2章 开发者工作流29 2.1 目的29 2.2 搭建开发集群30 2.3 为多个开发者搭建共享集群31 2.4 启动开发者工作流38 2.5 环境初始化38 2.6 启动开发39 2.7 启动测试与调试40 2.8 搭建开发环境的最佳实践40 2.9 小结41 第3章 监控与日志43 3.1 指标与日志43 3.2 监控技术43 3.3 监控模式44 3.4 Kubernetes指标概述45 3.5 应该监控什么指标48 3.6 监控工具49 3.7 使用Prometheus监控Kubernetes51 3.8 日志概述55 3.9 日志工具57 3.10 使用EFK记录日志58 3.11 告警60 3.12 监控、日志及告警的最佳实践62 3.13 小结63 第4章 配置、机密以及RBAC65 4.1 通过ConfigMap和Secret配置应用65 4.2 ConfigMap和Secret API的最佳实践67 4.3 RBAC73 4.4 小结78 第5章 持续集成、测试和部署79 5.1 版本控制80 5.2 持续集成80 5.3 测试81 5.4 镜像构建81 5.5 为镜像标记标签82 5.6 持续部署83 5.7 部署策略84 5.8 生产环境中的测试88 5.9 搭建流水线并进行混沌试验89 5.10 CI/CD的最佳实践94 5.11 小结95 第6章 版本控制、发布和部署97 6.1 版本控制97 6.2 发布98 6.3 部署99 6.4 综合示例100 6.5 小结104 第7章 全球化应用的分发和预演105 7.1 镜像的分发106 7.2 参数化部署107 7.3 全球流量负载均衡107 7.4 可靠的全球化部署108 7.5 如何应对出现的问题113 7.6 全球化部署的最佳实践114 7.7 小结115 第8章 资源管理117 8.1 Kubernetes Scheduler117 8.2 高级调度技术119 8.3 Pod资源管理122 8.4 资源管理的最佳实践136 8.5 小结136 第9章 网络、网络安全与服务网格137 9.1 Kubernetes的网络原则137 9.2 网络插件139 9.3 Kubernetes中的服务142 9.4 网络安全策略149 9.5 服务网格153 9.6 小结155 第10章 Pod和容器安全157 10.1 PodSecurityPolicy API157 10.2 工作负载隔离和RuntimeClass170 10.3 其他Pod和容器安全注意事项172 10.4 小结173 第11章 集群的策略和治理175 11.1 为什么策略和治理很重要175 11.2 这里所说的策略有何不同175 11.3 云原生策略引擎176 11.4 Gatekeeper简介176 11.5 审计181 11.6 策略和治理的最佳实践183 11.7 小结184 第12章 多集群管理185 12.1 为什么需要多集群185 12.2 多集群设计的考量187 12.3 多集群部署管理189 12.4 GitOps集群管理方式191 12.5 多集群管理工具194 12.6 Kubernetes Federation194 12.7 多集群管理的最佳实践197 12.8 小结198 第13章 集成外部服务和 Kubernetes199 13.1 将外部服务导入Kubernetes199 13.2 将Kubernetes服务导出到外部203 13.3 在Kubernetes之间共享服务207 13.4 第三方工具207 13.5 连接集群和外部服务的最佳实践208 13.6 小结208 第14章 在Kubernetes上运行机器学习工作负载209 14.1 为什么Kubernetes非常适合机器学习209 14.2 机器学习工作流210 14.3 Kubernetes集群管理员与机器学习211 14.4 数据科学家关心的事218 14.5 在Kubernetes上运行机器学习工作负载的最佳实践219 14.6 小结220 第15章 在Kubernetes上构建高层应用的模式221 15.1 开发高层抽象的方法221 15.2 扩展Kubernetes222 15.3 构建平台时的设计考量224 15.4 构建应用平台的最佳实践226 15.5 小结227 第16章 管理状态和有状态应用229 16.1 卷和卷挂载230 16.2 Kubernetes存储231 16.3 有状态应用235 16.4 小结240 第17章 准入控制和授权241 17.1 准入控制241 17.2 授权248 17.3 小结251 第18章 总结253 ---------------------------Kubernetes进阶实战--------------------------- 前言 第1章 Kubernetes系统基础 1 1.1 容器技术概述 1 1.1.1 容器技术的功用 2 1.1.2 容器简史 3 1.1.3 Docker的功能限制 4 1.2 Kubernetes概述 4 1.2.1 Kubernetes简史 4 1.2.2 Kubernetes特性 5 1.2.3 Kubernetes概念和术语 6 1.3 Kubernetes集群组件 10 1.3.1 Master组件 10 1.3.2 Node组件 12 1.3.3 核心附件 13 1.4 Kubernetes网络模型基础 13 1.4.1 网络模型概述 13 1.4.2 集群上的网络通信 15 1.5 本章小结 16 第2章 Kubernetes快速入门 17 2.1 Kubernetes的核心对象 17 2.1.1 Pod资源对象 18 2.1.2 Controller 19 2.1.3 Service 20 2.1.4 部署应用程序的主体过程 21 2.2 部署Kubernetes集群 22 2.2.1 kubeadm部署工具 22 2.2.2 集群运行模式 24 2.2.3 准备用于实践操作的集群环境 25 2.2.4 获取集群环境相关的信息 26 2.3 kubectl使用基础与示例 26 2.4 命令式容器应用编排 29 2.4.1 部署应用(Pod) 30 2.4.2 探查Pod及应用详情 33 2.4.3 部署Service对象 36 2.4.4 扩容和缩容 38 2.4.5 修改及删除对象 40 2.5 本章小结 41 第3章 资源管理基础 42 3.1 资源对象及API群组 42 3.1.1 Kubernetes的资源对象 43 3.1.2 资源及其在API中的组织形式 46 3.1.3 访问Kubernetes REST API 48 3.2 对象类资源格式 49 3.2.1 资源配置清单 50 3.2.2 metadata嵌套字段 51 3.2.3 spec和status字段 52 3.2.4 资源配置清单格式文档 53 3.2.5 资源对象管理方式 54 3.3 kubectl命令与资源管理 56 3.3.1 资源管理操作概述 56 3.3.2 kubectl的基本用法 57 3.4 管理名称空间资源 59 3.4.1 查看名称空间及其资源对象 60 3.4.2 管理Namespace资源 61 3.5 Pod资源的基础管理操作 61 3.5.1 陈述式对象配置管理方式 62 3.5.2 声明式对象配置管理方式 64 3.6 本章小结 65 第4章 管理Pod资源对象 66 4.1 容器与Pod资源对象 66 4.2 管理Pod对象的容器 68 4.2.1 镜像及其获取策略 69 4.2.2 暴露端口 70 4.2.3 自定义运行的容器化应用 71 4.2.4 环境变量 72 4.2.5 共享节点的网络名称空间 73 4.2.6 设置Pod对象的安全上下文 74 4.3 标签与标签选择器 75 4.3.1 标签概述 75 4.3.2 管理资源标签 77 4.3.3 标签选择器 78 4.3.4 Pod节点选择器nodeSelector 79 4.4 资源注解 80 4.4.1 查看资源注解 81 4.4.2 管理资源注解 82 4.5 Pod对象的生命周期 82 4.5.1 Pod的相位 82 4.5.2 Pod的创建过程 83 4.5.3 Pod生命周期中的重要行为 84 4.5.4 容器的重启策略 87 4.5.5 Pod的终止过程 87 4.6 Pod存活性探测 88 4.6.1 设置exec探针 89 4.6.2 设置HTTP探针 90 4.6.3 设置TCP探针 92 4.6.4 存活性探测行为属性 93 4.7 Pod就绪性探测 94 4.8 资源需求及资源限制 96 4.8.1 资源需求 96 4.8.2 资源限制 98 4.8.3 容器的可见资源 99 4.8.4 Pod的服务质量类别 100 4.9 本章小结 101 第5章 Pod控制器 103 5.1 关于Pod控制器 103 5.1.1 Pod控制器概述 104 5.1.2 控制器与Pod对象 105 5.1.3 Pod模板资源 106 5.2 ReplicaSet控制器 106 5.2.1 ReplicaSet概述 107 5.2.2 创建ReplicaSet 108 5.2.3 ReplicaSet管控下的Pod对象 109 5.2.4 更新ReplicaSet控制器 111 5.2.5 删除ReplicaSet控制器资源 114 5.3 Deployment控制器 114 5.3.1 创建Deployment 115 5.3.2 更新策略 116 5.3.3 升级Deployment 119 5.3.4 金丝雀发布 121 5.3.5 回滚Deployment控制器下的应用发布 123 5.3.6 扩容和缩容 123 5.4 DaemonSet控制器 124 5.4.1 创建DaemonSet资源对象 124 5.4.2 更新DaemonSet对象 126 5.5 Job控制器 127 5.5.1 创建Job对象 128 5.5.2 并行式Job 129 5.5.3 Job扩容 130 5.5.4 删除Job 130 5.6 CronJob控制器 131 5.6.1 创建CronJob对象 131 5.6.2 CronJob的控制机制 132 5.7 ReplicationController 133 5.8 Pod中断预算 133 5.9 本章小结 134 第6章 Service和Ingress 136 6.1 Service资源及其实现模型 136 6.1.1 Service资源概述 136 6.1.2 虚拟IP和服务代理 138 6.2 Service资源的基础应用 140 6.2.1 创建Service资源 140 6.2.2 向Service对象请求服务 141 6.2.3 Service会话粘性 142 6.3 服务发现 143 6.3.1 服务发现概述 143 6.3.2 服务发现方式:环境变量 145 6.3.3 ClusterDNS和服务发现 146 6.3.4 服务发现方式:DNS 146 6.4 服务暴露 147 6.4.1 Service类型 147 6.4.2 NodePort类型的Service资源 149 6.4.3 LoadBalancer类型的Service资源 150 6.4.4 ExternalName Service 151 6.5 Headless类型的Service资源 152 6.5.1 创建Headless Service资源 153 6.5.2 Pod资源发现 153 6.6 Ingress资源 154 6.6.1 Ingress和Ingress Controller 154 6.6.2 创建Ingress资源 155 6.6.3 Ingress资源类型 157 6.6.4 部署Ingress控制器(Nginx) 159 6.7 案例:使用Ingress发布tomcat 161 6.7.1 准备名称空间 161 6.7.2 部署tomcat实例 162 6.7.3 创建Service资源 163 6.7.4 创建Ingress资源 164 6.7.5 配置TLS Ingress资源 165 6.8 本章小结 168 第7章 存储卷与数据持久化 169 7.1 存储卷概述 169 7.1.1 Kubernetes支持的存储卷类型 170 7.1.2 存储卷的使用方式 171 7.2 临时存储卷 172 7.2.1 emptyDir存储卷 172 7.2.2 gitRepo存储卷 175 7.3 节点存储卷hostPath 176 7.4 网络存储卷 178 7.4.1 NFS存储卷 178 7.4.2 RBD存储卷 180 7.4.3 GlusterFS存储卷 182 7.4.4 Cinder存储卷 183 7.5 持久存储卷 184 7.5.1 创建PV 186 7.5.2 创建PVC 188 7.5.3 在Pod中使用PVC 190 7.5.4 存储类 191 7.5.5 PV和PVC的生命周期 194 7.6 downwardAPI存储卷 196 7.6.1 环境变量式元数据注入 197 7.6.2 存储卷式元数据注入 199 7.7 本章小结 201 第8章 配置容器应用:ConfigMap和Secret 202 8.1 容器化应用配置方式 202 8.2 通过命令行参数配置容器应用 204 8.3 利用环境变量配置容器应用 206 8.4 应用程序配置管理及ConfigMap资源 208 8.4.1 创建ConfigMap对象 209 8.4.2 向Pod环境变量传递ConfigMap对象键值数据 212 8.4.3 ConfigMap存储卷 215 8.4.4 容器应用重载新配置 219 8.4.5 使用ConfigMap资源的注意事项 220 8.5 Secret资源 221 8.5.1 Secret概述 221 8.5.2 创建Secret资源 222 8.5.3 Secret存储卷 224 8.5.4 imagePullSecret资源对象 225 8.6 本章小结 226 第9章 StatefulSet控制器 227 9.1 StatefulSet概述 227 9.1.1 Stateful应用和Stateless应用 227 9.1.2 StatefulSet控制器概述 228 9.1.3 StatefulSet的特性 230 9.2 StatefulSet基础应用 231 9.2.1 创建StatefulSet对象 232 9.2.2 Pod资源标识符及存储卷 234 9.3 StatefulSet资源扩缩容 237 9.4 StatefulSet资源升级 238 9.4.1 滚动更新 238 9.4.2 暂存更新操作 239 9.4.3 金丝雀部署 240 9.4.4 分段更新 241 9.4.5 其他话题 241 9.5 案例:etcd集群 242 9.5.1 创建Service资源 242 9.5.2 etcd StatefulSet 243 9.6 本章小结 247 第10章 认证、授权与准入控制 248 10.1 访问控制概述 248 10.1.1 用户账户与用户组 249 10.1.2 认证、授权与准入控制基础 250 10.2 服务账户管理与应用 253 10.2.1 Service Account自动化 253 10.2.2 创建服务账户 255 10.2.3 调用imagePullSecret资源对象 256 10.3 X.509数字证书认证 256 10.3.1 Kubernetes中的SSL/TLS认证 257 10.3.2 客户端配置文件kubeconfig 259 10.3.3 TLS bootstrapping机制 262 10.4 基于角色的访问控制:RBAC 263 10.4.1 RBAC授权插件 264 10.4.2 Role和RoleBinding 266 10.4.3 ClusterRole和ClusterRoleBin-ding 269 10.4.4 聚合型ClusterRole 271 10.4.5 面向用户的内建ClusterRole 273 10.4.6 其他的内建ClusterRole和ClusterRoleBinding 274 10.5 Kubernetes Dashboard 275 10.5.1 部署HTTPS通信的Dashboard 275 10.5.2 配置token认证 277 10.5.3 配置kubeconfig认证 277 10.6 准入控制器与应用示例 279 10.6.1 LimitRange资源与LimitRanger准入控制器 279 10.6.2 ResourceQuota资源与准入控制器 281 10.6.3 PodSecurityPolicy 283 10.7 本章小结 288 第11章 网络模型与网络策略 289 11.1 Kubernetes网络模型及CNI插件 289 11.1.1 Docker容器的网络模型 289 11.1.2 Kubernetes网络模型 291 11.1.3 Pod网络的实现方式 293 11.1.4 CNI插件及其常见的实现 295 11.2 flannel网络插件 297 11.2.1 flannel的配置参数 297 11.2.2 VxLAN后端和direct routing 298 11.2.3 host-gw后端 301 11.3 网络策略 302 11.3.1 网络策略概述 302 11.3.2 部署Canal提供网络策略功能 303 11.3.3 配置网络策略 305 11.3.4 管控入站流量 306 11.3.5 管控出站流量 308 11.3.6 隔离名称空间 310 11.3.7 网络策略应用案例 311 11.4 Calico网络插件 315 11.4.1 Calico工作特性 316 11.4.2 Calico系统架构 318 11.4.3 Calico部署要点 320 11.4.4 部署Calico提供网络服务和网络策略 321 11.4.5 客户端工具calicoctl 324 11.5 本章小结 325 第12章 Pod资源调度 326 12.1 Kubernetes调度器概述 326 12.1.1 常用的预选策略 327 12.1.2 常用的优选函数 330 12.2 节点亲和调度 332 12.2.1 节点硬亲和性 332 12.2.2 节点软亲和性 335 12.3 Pod资源亲和调度 337 12.3.1 位置拓扑 338 12.3.2 Pod硬亲和调度 338 12.3.3 Pod软亲和调度 341 12.3.4 Pod反亲和调度 342 12.4 污点和容忍度 343 12.4.1 定义污点和容忍度 344 12.4.2 管理节点的污点 345 12.4.3 Pod对象的容忍度 346 12.4.4 问题节点标识 347 12.5 Pod优选级和抢占式调度 347 12.6 本章小结 348 第13章 Kubernetes系统扩展 349 13.1 自定义资源类型(CRD) 349 13.1.1 创建CRD对象 350 13.1.2 自定义资源格式验证 351 13.1.3 子资源 353 13.1.4 使用资源类别 355 13.1.5 多版本支持 355 13.1.6 自定义控制器基础 356 13.2 自定义API Server 359 13.2.1 自定义API Server概述 359 13.2.2 APIService对象 360 13.3 Kubernetes集群高可用 361 13.3.1 etcd高可用 362 13.3.2 Controller Manager和Scheduler高可用 363 13.4 Kubernetes的部署模式 364 13.4.1 关键组件 365 13.4.2 常见的部署模式 366 13.5 容器时代的DevOps概述 369 13.5.1 容器:DevOps协作的基础 369 13.5.2 泛型端到端容器应用程序生命周期工作流 370 13.5.3 基于Kubernetes的DevOps 371 13.6 本章小结 372 第14章 资源指标及HPA控制器 373 14.1 资源监控及资源指标 373 14.1.1 资源监控及Heapster 374 14.1.2 新一代监控架构 376 14.2 资源指标及其应用 378 14.2.1 部署metrics-server 378 14.2.2 kubectl top命令 380 14.3 自定义指标与Prometheus 381 14.3.1 Prometheus概述 382 14.3.2 部署Prometheus监控系统 384 14.3.3 自定义指标适配器k8s-prometheus-adapter 388 14.4 自动弹性缩放 390 14.4.1 HPA概述 390 14.4.2 HPA(v1)控制器 391 14.4.3 HPA(v2)控制器 393 14.5 本章小结 397 第15章 Helm程序包管理器 398 15.1 Helm基础 398 15.1.1 Helm的核心术语 399 15.1.2 Helm架构 400 15.1.3 安装Helm Client 400 15.1.4 安装Tiller server 401 15.1.5 Helm快速入门 402 15.2 Helm Charts 405 15.2.1 Charts文件组织结构 405 15.2.2 Chart.yaml文件组织格式 406 15.2.3 Charts中的依赖关系 407 15.2.4 模板和值 408 15.2.5 其他需要说明的话题 409 15.2.6 自定义Charts 410 15.3 Helm实践:部署EFK日志管理系统 415 15.3.1 ElasticSearch集群 416 15.3.2 日志采集代理fluentd 421 15.3.3 可视化组件Kibana 422 15.4 本章小结 424 附录A 部署Kubernetes集群 425 附录B 部署GlusterFS及Heketi 437 |