
Docker的流行激活了一直不温不火的 PaaS,随之而来的是各类 Micro-PaaS的出现,Kubernetes是其中最具代表性的一员,它是 Google多年大规模容器管理技术的开源版本。越来越多的企业被迫面对互联网规模所带来的各类难题,而 Kubernetes以其优秀的理念和设计正在逐步形成新的技术标准,对于任何领域的运营总监、架构师和软件工程师来说,都是一个绝佳的突破机会。本书以理论加实战的模式,结合大量案例由浅入深地讲解了 Kubernetes的各个方面,包括平台架构、基础核心功能、网络、安全和资源管理以及整个生态系统的组成,旨在帮助读者全面深入地掌握 Kubernetes+Docker的底层技术堆栈。
前言 随着互联网技术在各领域的广泛应用,所产生的海量数据催生了大数据的诞生。而对于数据中心的需求激活了云计算井喷式的发展,一时间大数据和云计算成为各个企业争夺的战略高地。 在云计算领域的服务模式中,IaaS和 SaaS模式已经趋于成熟,因此 PaaS就成了全球各大 IT巨头和初创公司的焦点,其中的竞争异常激烈。大量的 PaaS平台出现,又很快被淘汰,整个行业发生着巨大的迭代更替。正所谓物竞天择,在这样一个激荡变化的背景下,以 Docker为代表的容器技术脱颖而出并极速发热,风头无两,大多数主流云厂商已经宣布提供对 Docker及其生态系统的支持。容器技术具备融合 DevOps的敏捷特性,给云计算市场特别是 PaaS市场带来了新的变革力量, Kubernetes就是新一轮变革中产生的一个代表性产品。 Kubernetes是 Google开源的容器集群管理系统,它对于容器运行时、编排、常规服务都抽象设计出了准确完整的 API,并以此建立起一个开放开源的系统,符合企业化需求,每家企业都可以以此搭建出自动化和标准化的底层平台,以优化研发和运营效率。 Kubernetes可以说是 Google借助着容器领域的爆发,对于其巨大规模数据中心管理的丰富经验的一次实践,旨在建立新的技术业界标准。 展望未来,我们认为将有更多的企业被迫面对互联网规模所带来的各类难题, Kubernetes和 Docker技术可以提供应对这些挑战的解决方案。而随着更多企业的加入,会有更多的人以协作方式构建出更强大的技术堆栈和更多的创新成果,整个行业将朝着更好的方向持续迈进,对此我们乐观其成。 本书特点 本书采用的是理论加实战的模式,结合大量案例由浅入深讲解 Kubernetes的各个方面,包括平台架构、基础核心功能、网络、安全和资源管理,以及整个生态系统的组成。技术信息完全来源于 Kubernetes开源社区的文档、代码的提炼和总结。本书涉及的 Kubernetes内容与官方昀新版本同步,包含昀新版本的所有新特性说明,并且因为 Kubernetes同 Docker深度集成,所以本书也会阐述 Docker相关的技术话题。 本书的读者对象 本书适用于希望学习和使用 Kubernetes以及正在寻找管理数据中心解决方案的软件工程师和架构师,同时本书可以作为 Docker的高级延伸书籍,用于搭建基于 Kubernetes+Docker的 PaaS平台,实践 DevOps。 本书的组织结构 本书在组织结构上分成三部分:Kubernetes基础篇、 Kubernetes高级篇和 Kubernetes生态篇。基础篇可帮助读者认识 Kubernetes,并理解其架构和核心概念,同时能够部署和使用 Kubernetes完成基本功能操作。高级篇将深入讲解 Kubernetes的网络、安全和资源管理等话题,帮助读者掌握管理 Kubernetes的能力。生态篇则介绍与 Kubernetes密切相关的开源软件,包括 CoreOS、Etcd和 Mesos,使读者对于 Kubernetes生态系统有全面的了解。
目录 第 1部分 Kubernetes基础篇 第 1章 Kubernetes介绍 ......................................... 2 1.1为什么会有 Kubernetes ................................................. 2 1.1.1云计算大潮 . 2 1.1.2不温不火的 PaaS ............................................... 5 1.1.3 Docker的逆袭 .................................................... 5 1.2 Kubernetes 是什么 . 7 1.3 Kubernetes的发展历史 ................................................. 8 1.4 Kubernetes的核心概念 ................................................. 9 1.4.1 Pod ............... 9 1.4.2 Replication Controller ......................................... 9 1.4.3 Service ......... 9 1.4.4 Label ............ 9 1.4.5 Node ............. 9 第 2章 Kubernetes的架构和部署 ......................... 10 2.1 Kubernetes的架构和组件 ........................................... 10 2.2 部署 Kubernetes .... 13 2.2.1环境准备 ... 14 2.2.2 运行 Etcd ... 15 2.2.3 获取 Kubernetes发布包 .................................. 16 2.2.4 运行 Kubernetes Master组件 .......................... 16 2.2.5 运行 Kubernetes Node组件 ............................. 17 2.2.6 查询 Kubernetes的健康状态 .......................... 18 2.2.7 创建 Kubernetes覆盖网络 .............................. 19 2.3 安装 Kubernetes扩展插件 .......................................... 22 2.3.1 安装 Cluster DNS............................................. 23 2.3.2 安装 Cluster Monitoring ................................... 28 2.3.3 安装 Cluster Logging ....................................... 36 2.3.4 安装 Kube UI ................................................... 43 第 3章 Kubernetes快速入门 ................................ 46 3.1示例应用 Guestbook .................................................... 46 3.2准备工作 ............... 47 3.3 运行 Redis ............. 48 3.3.1 创建 Redis Master Pod ..................................... 48 3.3.2 创建 Redis Master Service ............................... 49 3.3.3 创建 Redis Slave Pod ....................................... 51 3.3.4 创建 Redis Slave Service ................................. 53 3.4 运行 Frontend ........ 54 3.4.1 创建 Frontend Pod ............................................ 54 3.4.2 创建 Frontend Service...................................... 57 3.5 设置 Guestbook外网访问 ........................................... 57 3.6 清理 Guestbook ..... 59 第 4章 Pod .... 60 4.1国际惯例的 Hello World .............................................. 60 4.2 Pod的基本操作 .... 62 4.2.1 创建 Pod .... 62 4.2.2 查询 Pod .... 62 4.2.3 删除 Pod .... 65 4.2.4 更新 Pod .... 65 4.3 Pod与容器 ............ 65 4.3.1 镜像 ........... 66 4.3.2启动命令 ... 69 4.3.3环境变量 ... 70 4.3.4 端口 ........... 72 4.3.5数据持久化和共享 .......................................... 73 4.4 Pod的网络 ............ 74 4.5 Pod的重启策略 .... 75 4.6 Pod的状态和生命周期 ............................................... 77 4.6.1容器状态 ... 77 4.6.2 Pod的生命周期阶段 ....................................... 78 4.6.3生命周期回调函数 .......................................... 79 4.7自定义检查 Pod .... 81 4.7.1 Pod的健康检查 ............................................... 83 4.7.2 Pod的准备状况检查 ....................................... 84 4.8 调度 Pod ................ 85 4.9问题定位指南 ....... 87 4.9.1事件查询 ... 88 4.9.2日志查询 ... 88 4.9.3 Pod的临终遗言 ............................................... 89 4.9.4远程连接容器 .................................................. 90 第 5章 Replication Controller................................ 92 5.1持续运行的 Pod .... 92 5.2 Pod模板 ................ 94 5.3 Replication Controller和 Pod的关联 .......................... 96 5.4弹性伸缩 ............... 99 5.5自动伸缩 ............. 101 5.6滚动升级 ............. 104 5.7 Deployment .......... 107 5.8一次性任务的 Pod ..................................................... 112 第 6章 Service .................................................... 114 6.1 Service代理 Pod . 114 6.2 Service的虚拟 IP 118 6.3服务代理 ............. 119 6.4服务发现 ............. 123 6.4.1环境变量 . 124 6.4.2 DNS ......... 125 6.5 发布 Service ........ 128 6.5.1 NodePort Service ............................................ 128 6.5.2 LoadBalancer Service..................................... 129 6.5.3 Ingress ...... 130 第 7章 数据卷 ..................................................... 134 7.1 Kubernetes数据卷 ..................................................... 134 7.2本地数据卷 ......... 135 7.2.1 EmptyDir . 135 7.2.2 HostPath ... 136 7.3网络数据卷 ......... 137 7.3.1 NFS .......... 137 7.3.2 iSCSI ........ 138 7.3.3 GlusterFS . 140 7.3.4 RBD(Ceph Block Device)......................... 141 7.3.5 Flocker ..... 142 7.3.6 AWS Elastic Block Store................................ 143 7.3.7 GCE Persistent Disk ....................................... 144 7.4 Persistent Volume和 Persistent Volume Claim.......... 145 7.4.1 创建 Persistent Volume ................................... 147 7.4.2 创建 Persistent Volume Claim ........................ 149 7.5信息数据卷 ......... 151 7.5.1 Secret ....... 151 7.5.2 Downward API ............................................... 153 7.5.3 Git Repo ... 155 第 8章 访问 Kubernetes API ............................... 157 8.1 API对象与元数据 ..................................................... 157 8.2如何访问 Kubernetes API.......................................... 159 8.3使用命令行工具 kubectl ............................................ 160 8.3.1 配置 Kubeconfig............................................. 161 8.3.2 Kubernetes操作 ............................................. 163 8.3.3 API对象操作 ................................................. 164 8.3.4 Pod操作 .. 168 8.3.5 Replication Controller操作 ............................ 169 8.3.6 Service操作 ................................................... 170 第 2部分 Kubernetes高级篇 第 9章 Kubernetes网络 ..................................... 172 9.1 Docker网络模型 . 172 9.2 Kubernetes网络模型 ................................................. 173 9.3容器间通信 ......... 174 9.4 Pod间通信 .......... 176 9.4.1 Flannel实现 Kubernetes覆盖网络 ............... 177 9.4.2 使用 Open vSwitch实现 Kubernetes覆盖网络 ................................................... 180 9.5 Service到 Pod通信 ................................................... 183 9.5.1 Userspace模式 ............................................... 184 9.5.2 Iptables模式 ................................................... 186 第 10章 Kubernetes安全 ................................... 189 10.1 Kubernetes安全原则 ............................................... 189 10.2 Kubernetes API的安全访问 .................................... 189 10.2.1 HTTPS . 190 10.2.2认证与授权 ................................................ 191 10.2.3 准入控制 Admission Controller................. 194 10.3 Service Account . 195 10.3.1 使用默认 Service Account ......................... 196 10.3.2创建自定义 Service Account ..................... 199 10.3.3 Service Account添加 Image Pull Secret .... 201 10.4容器安全 ........... 202 10.4.1 Linux Capability ......................................... 202 10.4.2 SELinux ...................................................... 204 10.5 多租户 ............... 204 第 11章 Kubernetes资源管理 ............................ 206 11.1 Kubernetes资源模型 ............................................... 206 11.2资源请求和限制 207 11.3 Limit Range ....... 210 11.4 Resource Quota.. 215 第 12章 管理和运维 Kubernetes ......................... 219 12.1 Daemon Pod ....... 219 12.1.1 Static Pod .................................................... 219 12.1.2 Daemon Set ................................................ 221 12.2 Kubernetes的高可用性 ........................................... 222 12.3平台监控 ........... 224 12.3.1 cAdvisor ..................................................... 224 12.3.2 Heapster ...................................................... 228 12.4平台日志 ........... 230 12.5垃圾清理 ........... 234 12.5.1 镜像清理 .................................................... 235 12.5.2 容器清理 .................................................... 235 12.6 Kubernetes的 Web界面 .......................................... 235 第 3部分 Kubernetes生态篇 第 13章 CoreOS ................................................. 240 13.1 CoreOS介绍 ..... 240 13.2 CoreOS工具链 . 241 13.2.1 Etcd ...... 241 13.2.2 Flannel . 241 13.2.3 Rocket .. 241 13.2.4 Systemd ...................................................... 241 13.2.5 Fleet ..... 241 13.3 CoreOS实践 ..... 242 13.3.1 安装 CoreOS .............................................. 242 13.3.2 使用 CoreOS运行 Kubernetes .................. 245 第 14章 Etcd 247 14.1 Etcd介绍 ........... 247 14.2 Etcd的结构 .............................................................. 248 14.2.1 Client-to-Server .......................................... 249 14.2.2 Peer-to-Peer ................................................ 250 14.3 Etcd实践 ........... 250 14.3.1 运行 Etcd .................................................... 250 14.3.2 Etcd集群化 ................................................ 251 14.3.3 Etcd Proxy模式 ......................................... 258 14.3.4 Etcd的安全模式 ........................................ 259 第 15章 Mesos ................................................... 262 15.1 Mesos介绍 ........ 262 15.2 Mesos的架构 .... 263 15.3 Marathon和 K8SM介绍 ......................................... 264 15.3.1 Marathon..................................................... 264 15.3.2 K8SM .. 265 15.4 Mesos实践 ........ 266 15.4.1 运行 Mesos ................................................. 266 15.4.2 运行 Marathon ............................................ 268 15.4.3 运行 K8SM ................................................ 270
吴龙辉 网宿科技云计算架构师,负责云平台的设计和研发工作。活跃于CloudFoundry、Docker、Kubernetes等开源社区,致力于云计算PaaS的研究,拥有丰富的云计算实践经验。