新書推薦:
《
津轻:日本无赖派文学代表太宰治自传性随笔集
》
售價:NT$
302.0
《
河流之齿
》
售價:NT$
270.0
《
新经济史革命:计量学派与新制度学派
》
售價:NT$
406.0
《
盗墓笔记之秦岭神树4
》
售價:NT$
259.0
《
战胜人格障碍
》
售價:NT$
302.0
《
逃不开的科技创新战争
》
售價:NT$
467.0
《
漫画三国一百年
》
售價:NT$
250.0
《
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
》
售價:NT$
374.0
|
編輯推薦: |
本书详细介绍如何进行微服务的开发并将其部署在Kubernetes平台上,是一本微服务真正落地实施的实用指南。书中从微服务的架构设计、构建、配置、测试、监控、安全,到持续集成持续交付流水线,全面且深入地阐释微服务系统开发的核心技术及*佳实践,并提供详细的示例代码。
首先,本书解释微服务和Kubernetes背后的基本概念,讨论一些现实世界中的关注点和权衡取舍,引导你完成基于微服务的系统开发,向你展示*佳实践并给出大量建议。然后,本书深入地探索其中的核心技术,并提供了可操作的代码进行说明。你将学习如何进行基于微服务的架构设计、构建微服务、测试已构建的微服务,以及将它们打包为Docker镜像。*后,你将学习如何通过这些Docker镜像部署应用系统到Kubernetes并进行管理。在此过程中,你将会看到当今流行的发展趋势,例如自动持续集成持续交付(CICD)、基于gRPC的微服务、无服务器计算和服务网格等。
通过阅读本书,你将获得大量基于Kubernetes和微服务的大型云原生系统的设计、开发和管理的知识和动手经验。
|
內容簡介: |
本书深入介绍Kubernetes和微服务之间的协同关系。首先介绍如何使用示例应用程序Delinkcious,它将作为贯穿全书的动手实验,帮助读者在实际应用程序的上下文中理解微服务和Kubernetes的概念。接下来,介绍了如何设置CICD流水线以及使用Kubernetes ConfigMap配置微服务。然后介绍微服务安全和实现REST、gRPC API和Delinkcious数据存储的实践。除此之外,本书还探索了Nuclio项目,介绍如何在Kubernetes上运行一个无服务器任务,并管理和实现数据密集型测试。在*后几章中,你将在Kubernetes上部署微服务,并学习如何做好系统的监控。*后,你将逐渐发现服务网格的重要性,以及如何将Istio集成到Delinkcious集群中。
|
關於作者: |
吉吉·赛凡(Gigi Sayfan)是Helix(一家生物信息学和基因组学初创公司)的首席软件架构师,也是Packt出版的Mastering Kubernetes一书的作者。他从事专业软件开发工作已超过20年,涉及领域包括即时消息、变形、芯片制造过程控制、游戏机嵌入式多媒体应用程序以及脑启发机器学习。他曾用多种编程语言(包括Go、Python、C#、Java、Delphi、JavaScript,甚至Cobol和PowerBuilder)为Windows、Linux、macOS、Lynx和Sony PlayStation等操作系统编写生产代码。他的技术专长涵盖数据库、低级网络、非传统用户界面和通用SDLC。
|
目錄:
|
译者序
前言
关于评审者
第1章 面向开发人员的Kubernetes简介1
1.1 技术需求1
1.1.1 安装Docker1
1.1.2 安装kubectl2
1.1.3 安装Minikube2
1.1.4 本章代码2
1.2 Kubernetes简介2
1.2.1 容器编排平台2
1.2.2 Kubernetes发展历史2
1.2.3 Kubernetes现状3
1.3 Kubernetes架构3
1.3.1 控制平面4
1.3.2 数据平面5
1.4 微服务的完美搭档6
1.4.1 微服务打包和部署6
1.4.2 微服务公开和发现8
1.4.3 微服务安全9
1.4.4 微服务验证和授权11
1.4.5 微服务升级12
1.5 创建本地集群14
1.5.1 安装Minikube14
1.5.2 探索集群16
1.5.3 安装Helm17
1.6 小结19
1.7 扩展阅读19
第2章 微服务入门20
2.1 技术需求21
2.1.1 在macOS上通过Homebrew安装Go21
2.1.2 在其他平台上安装Go21
2.1.3 本章代码21
2.2 微服务编程—少即是多21
2.3 微服务自治23
2.4 使用接口和契约23
2.5 通过API公开服务24
2.6 使用客户端库24
2.7 管理依赖25
2.8 协调微服务25
2.9 利用所有权26
2.10 理解康威定律27
2.10.1 垂直组织27
2.10.2 水平组织28
2.10.3 矩阵组织28
2.11 跨服务故障排除28
2.12 利用共享服务库29
2.13 选择源代码控制策略29
2.13.1 单体仓库29
2.13.2 多仓库30
2.13.3 混合模式30
2.14 选择数据策略30
2.14.1 每个微服务对应一个数据存储31
2.14.2 运行分布式查询31
2.14.3 使用Saga模式管理跨服务事务33
2.15 小结35
2.16 扩展阅读36
第3章 示例应用程序—Delinkcious37
3.1 技术需求37
3.1.1 Visual Studio Code38
3.1.2 GoLand38
3.1.3 LiteIDE38
3.1.4 其他选项38
3.1.5 本章代码38
3.2 为什么选择Go39
3.3 认识Go kit39
3.3.1 使用Go kit构建微服务40
3.3.2 理解传输41
3.3.3 理解端点41
3.3.4 理解服务42
3.3.5 理解中间件42
3.3.6 理解客户端43
3.3.7 生成样板43
3.4 Delinkcious目录结构43
3.4.1 cmd子目录44
3.4.2 pkg子目录44
3.4.3 svc子目录45
3.5 Delinkcious微服务45
3.5.1 对象模型46
3.5.2 服务实现47
3.5.3 支持函数实现50
3.5.4 通过客户端库调用API53
3.6 数据存储56
3.7 小结58
3.8 扩展阅读58
第4章 构建CICD流水线59
4.1 技术需求59
4.2 理解CICD流水线60
4.3 选择CICD流水线工具61
4.4.1 Jenkins X61
4.4.2 Spinnaker62
4.4.3 Travis CI和CircleCI62
4.4.4 Tekton62
4.4.5 Argo CD63
4.4.6 自研工具63
4.4 GitOps63
4.5 使用CircleCI构建镜像64
4.5.1 查看源代码树64
4.5.2 配置CI流水线65
4.5.3 理解构建脚本66
4.5.4 使用多阶段Dockerfile对Go服务容器化68
4.5.5 探索CircleCI界面68
4.5.6 未来的改进71
4.6 为Delinkcious设置持续交付71
4.6.1 部署Delinkcious微服务71
4.6.2 理解Argo CD72
4.6.3 Argo CD入门73
4.6.4 配置Argo CD75
4.6.5 探索Argo CD77
4.7 小结80
4.8 扩展阅读81
第5章 使用Kubernetes配置微服务82
5.1 技术需求82
5.2 配置包含的内容83
5.3 通过传统方式管理配置83
5.3.1 约定84
5.3.2 命令行标志85
5.3.3 环境变量85
5.3.4 配置文件86
5.3.5 混合配置和默认90
5.3.6 12-Factor应用程序配置91
5.4 动态管理配置92
5.4.1 理解动态配置92
5.4.2 远程配置存储93
5.4.3 远程配置服务93
5.5 使用Kubernetes配置微服务93
5.5.1 使用Kubernetes ConfigMaps94
5.5.2 Kubernetes自定义资源102
5.5.3 服务发现105
5.6 小结105
5.7 扩展阅读106
第6章 Kubernetes与微服务安全107
6.1 技术需求107
6.2 应用完善的安全原则108
6.3 区分用户账户和服务账户110
6.3.1 用户账户110
6.3.2 服务账户111
6.4 使用Kubernetes管理密钥114
6.4.1 Kubernetes密钥的三种类型114
6.4.2 创造自己的密钥115
6.4.3 将密钥传递到容器116
6.4.4 构建一个安全的Pod117
6.5 使用RBAC管理权限118
6.6 通过认证、授权和准入控制访问权限121
6.6.1 认证121
6.6.2 授权125
6.6.3 准入125
6.7 通过安全最佳实践增强Kubernetes126
6.7.1 镜像安全126
6.7.2 网络安全—分而治之127
6.7.3 镜像仓库安全129
6.7.4 按需授予访问权限129
6.7.5 使用配额最小化爆炸半径130
6.7.6 实施安全上下文132
6.7.7 使用安全策略强化Pod133
6.7.8 强化工具链134
6.8 小结135
6.9 扩展阅读136
第7章 API与负载均衡器137
7.1 技术需求137
7.2 熟悉Kubernetes服务138
7.3 东西流量与南北流量140
7.4 理解ingress和负载均衡器141
7.5 提供和使用公有REST API141
7.5.1 构建基于Python的API网关服务141
7.5.2 添加ingress146
7.5.3 验证API网关147
7.6 提供和使用内部gRPC API150
7.6.1 定义NewsManager接口150
7.6.2 实现消息管理器151
7.6.3 将NewsManager公开为gRPC服务153
7.7 通过消息队列发送和接收事件158
7.7.1 NATS159
7.7.2 在Kubernetes集群中部署NATS159
7.7.3 使用NATS发送链接事件160
7.7.4 订阅NATS链接事件162
7.7.5 处理链接事件164
7.8 服务网格166
7.9 小结166
7.10 扩展阅读166
第8章 有状态服务167
8.1 技术需求167
8.2 抽象存储168
8.2.1 Kubernetes存储模型168
8.2.2 内置和外部存储插件172
8.2.3 理解CSI173
8.3 在Kubernetes集群外存储数据174
8.4 使用StatefulSet在Kubernetes集群内存储数据175
8.4.1 理解StatefulSet175
8.4.2 什么时候应该使用StatefulSet178
8.4.3 一个大型StatefulSet示例179
8.5 通过本地存储实现高性能183
8.5.1 将数据存储在内存中183
8.5.2 将数据存储在本地SSD硬盘上183
8.6 在Kubernetes中使用关系型数据库183
8.6.1 了解数据的存储位置184
8.6.2 使用部署和服务184
8.6.3 使用StatefulSet185
8.6.4 帮助用户服务找到StatefulSet Pod185
8.6.5 管理模式更改187
8.7 在Kubernetes中使用非关系型数据存储187
8.8 小结191
8.9 扩展阅读192
第9章 在Kubernetes上运行Serverless任务193
9.1 技术需求193
9.2 云中的Serverless194
9.2.1 微服务与Serverless函数195
9.2.2 在Kubernetes上的Serverless函数模型195
9.2.3 构建、配置和部署Serverless函数196
9.2.4 调用Serverless函数196
9.3 Delinkcious链接检查196
9.3.1 设计链接检查197
9.3.2 实现链接检查199
9.4 使用Nuclio实现Serverless链接检查202
9.4.1 Nuclio简介202
9.4.2 创建一个链接检查Serverless函数203
9.4.3 使用nuctl部署链接检查函数206
9.4.4 使用Nuclio仪表板部署函数207
9.4.5 直接调用链接检查函数207
9.4.6 在LinkManager中触发链接检查208
9.5 其他Kubernetes Serverless框架209
9.5.1 Kubernetes Job和CronJob210
9.5.2 KNative210
9.5.3 Fission211
9.5.4 Kubeless211
9.5.5 OpenFaas211
9.6 小结212
9.7 扩展阅读212
第10章 微服务测试213
10.1 技术需求214
10.2 单元测试214
10.2.1 使用Go进行单元测试214
10.2.2 使用Ginkgo和Gomega进行单元测试216
10.2.3 Delinkcious单元测试217
10.2.4 模拟的艺术217
10.2.5 你应该测试一切吗221
10.3 集成测试222
10.3.1 初始化测试数据库222
10.3.2 运行服务223
10.3.3 运行实际测试223
10.3.4 实现数据库测试辅助函数225
10.3.5 实现服务测试辅助函数227
10.4 使用Kubernetes进行本地测试229
10.4.1 编写冒烟测试229
10.4.2 Telepresence232
10.5 隔离测试235
10.5.1 隔离集群236
10.5.2 隔离命名空间236
10.5.3 跨集群命名空间237
10.6 端到端测试237
10.6.1 验收测试237
10.6.2 回归测试238
10.6.3 性能测试238
10.7 管理测试数据239
10.7.1 合成数据239
10.7.2 人工测试数据239
10.7.3 生产环境快照239
10.8 小结240
10.9 扩展阅读240
第11章 微服务部署241
11.1 技术需求241
11.2 Kubernetes部署242
11.3 多环境部署243
11.4 理解部署策略246
11.4.1 重新部署247
11.4.2 滚动更新247
11.4.3 蓝绿部署248
11.4.4 金丝雀部署255
11.5 回滚部署260
11.5.1 回滚标准部署260
11.5.2 回滚蓝绿部署261
11.5.3 回滚金丝雀部署262
11.5.4 回滚模式、API或负载的更改262
11.6 管理版本和依赖263
11.6.1 管理公有API接口263
11.6.2 管理跨服务依赖264
11.6.3 管理第三方依赖264
11.6.4 管理基础设施和工具链265
11.7 本地开发部署265
11.7.1 Ko266
11.7.2 Ksync269
11.7.3 Draft271
11.7.4 Skaffold272
11.7.5 Tilt273
11.8 小结279
11.9 扩展阅读279
第12章 监控、日志和指标280
12.1 技术需求281
12.2 Kubernetes的自愈能力281
12.2.1 容器故障282
12.2.2 节点故障282
12.2.3 系统故障283
12.3 Kubernetes集群自动伸缩284
12.3.1 Pod水平自动伸缩284
12.3.2 集群自动伸缩286
12.3.3 Pod垂直自动伸缩287
12.4 使用Kubernetes供应资源289
12.4.1 应该提供哪些资源289
12.4.2 定义容器限制289
12.4.3 指定资源配额290
12.4.4 手动供应291
12.4.5 利用自动伸缩292
12.4.6 自定义自动供应292
12.5 正确地优化性能292
12.5.1 性能和用户体验292
12.5.2 性能和高可用性293
12.
|
內容試閱:
|
本书正是你一直期待的那本书。本书包罗万象,会介绍如何开发微服务并将其部署在Kubernetes平台上,基于微服务的架构与Kubernetes的结合将会带来巨大影响。书中首先解释了微服务和Kubernetes背后的基本概念,讨论了一些现实世界中的关注点和权衡取舍,引导你完成基于微服务的系统开发,向你展示最佳实践并给出了大量建议。
接着,本书深入地探索了其中的核心技术,并提供了可操作的代码进行说明。你将学习如何进行基于微服务的架构设计、构建微服务、测试已构建的微服务,以及将它们打包为Docker镜像。然后,你将学习如何将你的系统作为Docker镜像的集合部署到Kubernetes中并进行管理。
在此过程中,你将会看到当今流行的发展趋势,例如自动化的持续集成持续交付(CICD)、基于gRPC的微服务、无服务器计算和服务网格等。
读完本书后,你将获得大量使用部署在Kubernetes上的基于微服务的架构来设计、开发和操作大型云原生系统的知识及实战经验。
本书的目标读者
本书面向希望了解大规模软件工程前沿知识的软件开发人员和DevOps工程师。如果你有使用大型容器化软件系统的经验,那么这些经验将对你有所帮助。
本书内容
第1章介绍了Kubernetes基础知识,你将会快速掌握Kubernetes的核心概念,并了解它是微服务的完美搭档。
第2章讨论了基于微服务的系统中常见问题的各个维度、模式和方法,以及与其他通用架构(如单体架构和大型服务)的比较。
第3章探讨了为什么我们应该选择Go作为示例应用程序Delinkcious的编程语言,并简要介绍了Go语言开发。
第4章指导你如何通过CICD流水线解决一些问题,包括Kubernetes中CICD流水线的多种选项,以及如何为示例应用程序Delinkcious构建CICD流水线。
第5章带你进入微服务配置的实战领域。此外,该章还讨论了Kubernetes的特定组件,如ConfigMap。
第6章深入探讨了如何在Kubernetes上保护微服务,以及Kubernetes上作为微服务安全基础的支柱。
第7章使我们可以开放示例应用程序Delinkcious的访问,并允许用户从集群外部与其进行交互。此外,我们还添加了基于gRPC的新闻服务,用户可以访问该服务以获取其关注的其他用户的新闻。最后,我们再添加一个消息队列,使服务以松耦合的方式进行通信。
第8章深入研究了Kubernetes存储模型。我们还将扩展示例应用程序Delinkcious的消息服务,将其数据存储在Redis中。
第9章深入探讨了云原生系统中最热门的趋势之一:无服务器计算(也称为函数即服务(Function as a Service,FaaS))。此外,还介绍了在Kubernetes中进行无服务器计算的各种方法。
第10章涵盖了多个测试相关的主题,包括单元测试、集成测试以及端到端测试等,该章还介绍了示例应用程序Delinkcious的测试结构。
第11章涉及两个相关但又独立的主题:生产环境的部署和开发环境的部署。
第12章着重介绍运行在Kubernetes上的大型分布式系统的维护,以及如何设计系统以确保系统稳定高效。
第13章回顾了服务网格(尤其是Istio)这一热门话题,服务网格是目前真正改变游戏规则的角色。
第14章涵盖了Kubernetes和微服务的主题,将帮助我们学习如何确定何时是采用和投资新技术的恰当时机。
如何充分利用本书
任何软件方面的要求都会在每章开头的“技术需求”部分列出,如果安装某个特定软件是某章内容的一部分,那么该章会尽可能涵盖所需的全部说明,大多数软件都是安装在Kubernetes集群中的组件。这些内容是本书实战性质的重要组成部分。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http:www.packtpub.com通过个人账号下载,也可以访问华章图书官网http:www.hzbook.com,通过注册并登录个人账号下载。
约定
本书中使用了许多排版约定。
代码体:表示正文中的代码、数据库表名称、文件夹名、文件名、文件扩展名、路径名、用户输入和Twitter的内容。例如:“请注意我们需要确保它可以通过chmod +x执行。”
代码块如下:
命令行输入或输出如下:
黑体:表示新术语、重要单词或你在屏幕截图中看到的单词。例如,菜单或对话框中的单词会出现在这样的文本中。示例:“我们可以通过从ACTIONS下拉菜单中选择Sync来对其进行同步。”
警告或重要提示。
提示或小技巧。
|
|