关于我们
书单推荐
新书推荐
|
Kubernetes即学即用
本书作者一直在Google和其他公司从事Kubernetes方面的工作,为我们解释了该系统如何融入分布式应用程序的生命周期之中的。你将学习如何使用各种工具和API来实现可扩展分布式系统管理的自动化,无论该系统用于在线服务、机器学习应用程序,还是Raspberry Pi计算机群集。本书的主要内容有:探索Kubernetes所面临的分布式系统挑战。使用Docker等容器进行容器化应用开发。使用docker镜像格式和容器运行时在Kubernetes上创建和运行容器。探索在生产中运行应用程序所必需的专门对象。在无需停机或无差错情况下可靠地推出新的软件版本。举例说明如何在Kubernetes中开发和部署真实应用程序。
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 下载。 本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序和文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可。销售或分发OReilly 图书的示例光盘则需要获得许可。引用本书中的示例代码来回答问题无需获得许可。将书中大量示例代码放到你的产品文档中则需要获得许可。 我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。比如:Kubernetes: Up and Runningby Kelsey Hightower, Brendan Burns, and Joe Beda (OReilly). Copyright 2017Kelsey Hightower, Brendan Burns, and Joe Beda, 978-1-491-93567-5。如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过permissions@oreilly.com 与我们联系。
作者主要从事数据中心网络解决方案的研发与部署,技术方向包括云计算、软件定义网络(SDN)、网络安全等,是国内较早从事 SDN 和网络虚拟化相关技术的推广者,同时也是 Docke开源社区的发起人之一。
前言 .........................................................................................................................................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
你还可能感兴趣
我要评论
|