第 8 章 面向开发人员的部署 为开发人员部署
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
无论战略多么漂亮,您都应该偶尔看看结果。
温斯顿-邱吉尔爵士
当计算机体积庞大、价格昂贵时, ,制造商通常会将软件与硬件捆绑在一起。随着大众市场软件的发展,这种操作变得非常耗时,于是出现了新的软件分发形式。如今的开发流程侧重于解耦构建和部署活动,以促进软件的快速分发和团队中的并行活动。
应用软件的部署代表着软件从打包工件到运行工作状态的转变。 现代开发要求这种转变尽可能快地进行,以便快速获得系统运行状态的反馈。
作为开发人员,您的工作重点主要是 编写性能良好的应用程序代码。然而 DevOps 是以协作为中心的,您的工作应该完美地融合在基础设施中。在审视部署流程时,您应该不断问自己:"机器需要哪些指令才能按照我的设想执行部署?"并将这些指令与负责基础设施和自动化的同事或专家分享。 在规划部署流程时,您可以列出一个愿望清单,以便日后扩展到分布式系统的更多组件:
-
为了逐步扩展系统的功能,应经常进行小规模部署。 使用这种方法,可以在出现故障时轻松回滚到之前的工作状态。
-
隔离部署每个微服务,因为你应该能够单独扩展或替换它。
-
您应该能够在另一个环境中重复使用已经部署的微服务。
-
自动化基础架构部署,并根据应用功能进行演进。
无论您将在哪个容器编排平台上部署任何微服务,您可能都会从打包应用程序开始,然后继续进行以下工作:
-
构建和推送容器镜像
-
选择并实施部署策略
随着应用部署在不同阶段或环境中的进展,您可能会参与以下活动:
- 工作量管理
-
完善健康检查以及 CPU 和内存使用量,以避免功能运行缓慢或无响应。
- 可观察性方面
-
使用度量、日志和跟踪来提供分布式系统内部的可见性并衡量其输出。
本章将向您介绍这些活动,并探讨它们对大规模部署的影响。
构建和推送容器映像
将应用程序部署到容器 需要创建 Java 应用程序工件和构建容器映像。通过利用第 6 章中分享的推荐工件格式和实践,我们可以专注于制作容器映像。
从 2013 年 Docker 问世开始, ,使用 Dockerfile 构建容器镜像开始流行起来。Dockerfile是一种标准化的 镜像格式,由基本操作系统、要添加的应用程序工件和所需的运行时配置组成。从本质上讲,该文件是未来容器运行方式的蓝图。如第 3 章所述,除了 Docker,您还可以使用Podman、Buildah 和kaniko 等工具构建容器镜像。
由于 DevOps 方法论依赖于应用开发人员和基础架构工程师之间的良好 沟通,一些团队认为最好将 Dockerfile 保留在存储库根目录下。此外,在对容器镜像构建进行工具化时,脚本或管道可以进一步使用该位置。除了编写 Dockerfile,Java 特定的选项(如 Eclipse JKube 或 Jib)还能帮助你将容器镜像变成标准构建流程的一部分。
提示
使用 Java 专用工具生成和推送容器映像可能会诱使您从应用程序代码中控制整个运行时。 为避免基础架构和应用程序代码之间的紧密耦合,您应该使用可在构建或运行时覆盖的参数来配置这些工具。 现代 Java 框架提供了对src/main/resources 下配置文件的自定义。本章的示例将使用项目配置文件中的参数来展示这种方法。
使用 Jib 管理容器映像
谷歌的Jib是一种 的工具,您可以使用它将 Java 应用程序容器化,而无需编写 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access