使用 Oracle Cloud Infrastructure DevOps 了解现代应用部署策略
快速交付软件对于在云中高效运行应用至关重要。Oracle DevOps 服务为开发人员提供了连续的集成和部署 (CI/CD) 平台,可用于在 Oracle Cloud 上轻松构建、测试和部署软件和应用。
DevOps 构建和部署管道可减少因更改而产生的错误,并缩短客户在构建和部署发行版本方面的时间。该服务还提供用于存储代码的专用 Git 资料档案库,并支持与外部代码资料档案库的连接。无论是将负载迁移到 OCI(从内部部署或其他云)还是 OCI 上开发新应用,您都可以使用 DevOps 服务简化软件交付生命周期。
体系结构
此参考架构描述了两种不同的部署策略,即蓝绿色策略和加那利策略。
部署策略是允许修改或升级应用程序的模型和做法。它们允许 DevOps 团队定义如何将应用程序部署到生产环境。通过在不同的部署策略之间进行选择,管理员可以在部署新发行版的风险、新发行版对其用户的影响以及实施策略所需的基础结构开销之间做出正确的权衡。此处提供的策略为客户提供更多的权衡选择,以满足他们的应用需求。
蓝绿色部署
通过蓝绿色部署策略,DevOps 团队可以使用两个相同的环境(其中一个在给定时间处于活动状态)发布新版本的应用。当前版本的应用程序是在活动环境中预配的,而新版本则部署到备用环境。
部署到备用环境不会影响活动环境或用户流量。DevOps 发行版管道可以针对新版本运行验证测试,一旦获得批准,它便会通过将用户流量轻松切换到备用环境来提升到生产环境。此过程将在应用程序的每个新发行版中重复执行。
该战略的主要优势在于它提供近乎零的停机时间和即时回滚功能。如果出现新版本的任何问题,流量可以立即恢复到先前的稳定版本。此外,备用环境可用于调试应用程序发行版的问题。
- 它支持快速、无风险的部署。
- 它提供了一个有效且简单的回退机制。
- 这是编排 A/B 软件测试的有效方法。
- 由于生产环境始终由一个活动环境(由负载平衡器控制),因此只需要很少停机。
- 运行相同的环境成本高昂,而且维护需要大量资源。
- 管理两个相同环境之间的发行版时,需要密切监视这两个环境。
- 管理部署之间的数据库相关性可能比较复杂。
下图说明了蓝绿色部署体系结构:
插图 blue-green-deployment.png 的说明
Canary 部署
使用 Canary 部署策略,应用程序发行版会逐步更新到一部分用户。最初,新版本将部署到没有用户流量的 Canary 环境。DevOps 发行版管道可以针对新版本运行验证测试,准备就绪后,仅将一部分用户路由到 Canary 环境。
此技术允许 DevOps 团队根据真实用户流量评估新的应用程序版本。他们可以在将新版本推出到更大的用户群之前并排比较这两个应用程序版本。它还提供风险缓解,因为新版本只为一小部分用户启用。如果出现任何问题,这些用户可以轻松切换回以前的版本。
- 您可以与真实用户并排测试两个应用程序版本。
- 新版本发布零停机时间。
- 回滚到以前的版本非常简单,并且风险最小。
- 大规模测试和验证新版本可能比较复杂。
- 从用户测试中获取针对新版本的反馈比较耗时。
下图说明了 Canary 部署策略:
- 区域
OCI 区域是一个局部地理区域,包含一个或多个数据中心,称为可用性域。区域独立于其他区域,而广阔的距离可以分离它们(跨国家甚至大陆)。该体系结构使用单个区域。
- DevOps 项目
实施 CI/CD 工作流所需的 DevOps 资源的逻辑分组。DevOps 资源可以是构件、构建管道、部署管道、外部连接、触发器和环境。通过 DevOps 项目,可以轻松地对所有 DevOps 资源启用日志记录、监视和通知。
- 构建管道
构建管道从源代码资料档案库获取提交 ID,并使用该源代码运行构建指令。构建管道为构建流程定义了一组阶段:构建、测试和编译软件构件,将构件传送到 OCI 系统信息库,以及(可选)触发部署。您可以在构建规范文件中定义构建运行的流和说明。
- 构建阶段阶段是在管道运行期间发生的单个操作。此处提到的各种构建阶段包括:
- 托管构建阶段:用于构建和测试源代码的托管构建阶段。
- 传送 Artifact 阶段:用于将构建阶段的输出推送到各种资料档案库的阶段;例如,将容器映像推送到容器资料档案库或部署清单到 Artifact 注册表。
- 调用部署:用于在构建阶段完成后调用部署管道的阶段,以及分析从托管构建阶段到部署管道阶段的导出变量。
- 代码存储库
由 DevOps 服务托管的专用 Git 系统信息库。您可以使用这些 DevOps 代码资料档案库存储、管理、开发源代码。
- 部署管道
用于将一组对象传送和部署到目标环境的步骤序列。可以通过定义可以串行或并行运行的阶段来控制软件发行版的流和逻辑。
- 部署阶段
阶段是在运行管道期间发生的单个操作。蓝绿部署的构建阶段包括:
- 蓝色 / 绿色 OKE 部署或蓝色 / 绿色实例组部署:将更新的代码部署到目标环境的阶段。
- 部署验证:可选阶段,您可以在其中使用函数来验证部署。
- 控制:审批:用于批准部署到目标生产环境的控制阶段。
- Blue/Green OKE Traffic Shift 或 Blue/Green Instance Group Traffic Shift:最终阶段,其中生产通信将切换到最新部署的环境。
- Canary OKE 部署或Canary Instance Group Deployment:将更新的代码部署到目标环境的阶段。
- 部署验证:可选阶段,您可以在其中使用函数来验证部署。
- Canary OKE Traffic Shift 或 Canary Instance Group Traffic Shift:根据坡道限制(要移动的流量百分比)将流量切换到 Canary 环境的阶段。
- 控制:审批:用于批准部署到目标生产环境的控制阶段。
- Canary Deploy Instance Group Production(Canary 部署实例组生产)或 OKE Deploy Production(OKE 部署生产):最后阶段,其中生产通信将切换到最新部署的环境。
- DevOps 对象
DevOps Artifact 是对组成应用程序的任何文件、二进制文件、程序包、清单或映像的引用或指针。创建构件时,将实际构件的源位置通知 Oracle DevOps。DevOps 支持 OCI 容器映像注册表和 OCI Artifact 注册表资料档案库。
- 构件资料档案库
Artifact 资料档案库创建用于对相似 Artifact 进行分组的资料档案库。创建后,可以将对象上载到此资料档案库。这些构件是传送到目标部署环境的文本文件、二进制文件和部署清单的集合。每个构件都有一个名称,该名称由其路径组成:版本。路径是用于组织对象的字符串。
- OCI 日志记录和通知服务
OCI 日志记录服务存储与部署相关的日志。部署运行时输出和部署的最终结果显示为日志条目。OCI 通知服务提供对部署项目及其资源的最新状态的可见性,并执行任何必要的操作。例如,当重要事件(例如部署管道中的阶段等待审批)时,您将收到通知。收到通知消息后,您可以转至 DevOps 部署管道并批准该阶段。
- 部署环境
此环境是部署构件的计算资源的集合。环境可以是函数、计算虚拟机 (VM) 或裸金属实例,也可以是 OKE 集群。蓝绿色部署仅适用于 OKE 集群和计算虚拟机。
建议
- 计算配置
此体系结构使用具有 E3 或 E4 弹性配置的 Oracle Linux OS 映像,并且资源最小,可用于在 OKE 群集节点中托管计算主机。如果您的应用需要更多内存或核心,您可以选择其他配置。
- VCN
创建 VCN 时,根据计划连接到 VCN 中的子网的资源数量,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。创建 VCN 后,您可以更改、添加和删除其 CIDR 块。此体系结构使用公共 VCN 来托管 Oracle Container Engine for Kubernetes。您还可以使用专用 VCN。在这种情况下,请使用 NAT 网关通过公共 Internet 访问集群。
- Oracle Container Engine for Kubernetes (Oke)
此体系结构将 OKE 群集部署为目标环境之一。worker 节点部署在 E3 或 E4 Oracle Linux OS 上。此体系结构在群集中使用三个 worker 节点,但在每个集群上最多可以创建 1,000 个节点。
- 实例组
如果您选择此体系结构部署到实例组,将在您的租户中创建您选择配置的新计算实例。
- 容器映像注册表
此体系结构将注册表部署为供内部使用的专用 Docker 注册表。Docker 映像推送到注册表并从注册表提取。您还可以使用注册表作为公共 Docker 注册表,使用户能够访问互联网和了解相应 URL 的任何用户,并从 Oracle Cloud 的公共存储库中提取映像。
- 构件注册表
此体系结构为实例组、OKE 和函数部署使用的软件和配置创建构件。体系结构创建构件注册表资料档案库供内部使用。软件二进制文件、文本和部署配置将上载到 Artifact 注册表资料档案库并从中下载。
考虑事项
使用 Oracle DevOps 服务部署连续集成和部署 (Continuous Integration and deployment, CI/CD) 平台时,请考虑这些因素。
- DevOps 支持的部署
DevOps 支持部署到 OKE、计算主机和函数。此体系结构部署到 OKE 群集。可以考虑根据您的特定要求部署到其他端点。
- Linux 支持服务
计算实例的实例组部署仅支持 Linux 主机。
- 已部署构件
要使用 DevOps 部署的 Artifact 需要位于 OCI Artifact 注册表或容器映像注册表资料档案库中。
- 对应用程序分组
作为最佳实践,将每个应用及其所有微服务组合到一个项目中。
部署
此参考体系结构的 Terraform 代码在 Oracle Cloud Infrastructure Resource Manager 中作为样例堆栈提供。您还可以从 GitHub 下载代码,并对其进行定制以满足您的特定需求。
- 使用 Oracle Cloud Infrastructure Resource Manager 中的示例堆栈进行部署:
- 单击与所需部署策略相对应的按钮,然后按照步骤 2-6 中的说明进行操作:
如果您尚未登录,请输入租户和用户凭据。
- 选择要部署堆栈的区域。
- 按照屏幕上的提示和说明创建堆栈。
- 创建堆栈后,单击 Terraform 操作,然后选择计划。
- 等待任务完成,然后复核计划。
要进行任何更改,请返回到 "Stack Details"(堆栈详细信息)页面,单击 Edit Stack(编辑堆栈),然后进行所需的更改。然后,再次运行计划操作。
- 如果不需要进一步更改,请返回“堆栈详细信息”页,单击 Terraform 操作,然后选择应用。
- 单击与所需部署策略相对应的按钮,然后按照步骤 2-6 中的说明进行操作:
- 在 GitHub 中使用 Terraform 代码进行部署:
- 转至 GitHub。
- 将存储库克隆或下载到本地计算机。
- 按照
README
文档中的说明进行操作。