你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于微服务的 DevTest 和 DevOps 解决方案

Azure Boards
Azure 容器注册表
Azure Kubernetes 服务 (AKS)
Azure Pipelines
GitHub

解决方案构想

本文是一种解决方案构想。 如果你希望我们在内容中扩充更多信息,例如潜在用例、备用服务、实现注意事项或定价指南,请通过提供 GitHub 反馈来告知我们。

微服务体系结构将应用程序设计为松散耦合的服务的集合。 在微服务体系结构中,服务是细粒度的,而协议是轻型的。 微服务提供清晰的关注点分离和依赖项解耦等优势。

与传统的整体式应用程序相比,微服务在开发周期中会带来复杂性。 传统上,开发在应用程序堆栈的本地或虚拟副本中发生,该堆栈在单独在本地配置并运行计算和存储组件。 在微服务模型中,开发人员需要针对现有体系结构测试他们的服务,及早发现集成问题以节省生成和部署时间,并在应用程序的整个生命周期内保持干净的集成式生成。

开发测试 (DevTest) 是一种软件开发方法,它在开发阶段的早期环节集成测试以加速开发。 DevOps 是将软件开发和 IT 运营相结合的一套做法,旨在缩短开发周期并提供高质量的持续交付。 Kubernetes 是一个用于自动化应用程序部署的开源容器业务流程系统。

此解决方案体系结构为某个开发和部署环境建模,该环境在 DevTest 中使用 DevOps 来实现 Azure Kubernetes 服务 (AKS) 微服务应用程序的快速迭代开发。

可能的用例

  • 旧式应用程序现代化
  • 需要实时处理的解决方案(银行/金融或数据流/媒体)
  • 应用程序的 RAM 或 CPU 密集型部件(本机语言处理)

体系结构

Diagram showing the configuration of DevTest and DevOps for a microservice application.

下载此体系结构的 Visio 文件

数据流

  1. 开发人员将本地流程与 Kubernetes 配合使用,以便在 Kubernetes 开发群集的上下文中运行其本地微服务版本。 在调试服务的同时连接到群集可以在整个应用程序上下文中进行快速测试和开发。

  2. 每个微服务代码库使用单独的 GitHub 代码存储库进行源代码管理。

  3. GitHub Actions 生成微服务容器映像,并将其推送到 Azure 容器注册表。 GitHub Actions 还会更新存储库的最新标记以进行持续集成 (CI),或标记存储库以进行发布。

  4. GitHub Actions 自动测试为 Azure Boards 生成工作项,使所有工作项可在一个位置进行管理。

  5. Visual Studio Code 扩展支持 Azure Boards 和 GitHub 集成。 将 Azure Boards 工作项与 GitHub 存储库相关联会将要求与代码相关联,从而推进开发循环。

  6. 合并到集成分支中的提交会触发 GitHub Actions 生成并将 Docker 推送到 DevTest 容器注册表的操作。 每个微服务在容器注册表中有自身的存储库,该存储库与 GitHub 存储库的级别是平行的。 CI 生成带有“最新”标记,表示它是最近成功的微服务生成。

  7. Azure Pipelines 运行 Kubernetes apply 命令以触发将更新的容器注册表映像部署到 DevTest Kubernetes 群集的操作。 Azure 可对 AKS 进行身份验证以运行无人参与的容器注册表拉取,从而简化了持续部署 (CD) 过程。

    Azure Pipelines 通过 Azure 密钥保管库来安全使用发布和部署配置所需的机密,例如凭据和连接字符串。

  8. 当应用程序的某个版本准备好进行质量保证 (QA) 测试时,Azure Pipelines 将触发 QA 发布。 管道使用下一个递增版本标记所有相应的映像,更新 Kubernetes 清单以反映映像标记,然后运行 apply 命令。 在此示例中,虽然开发人员可以单独迭代某个服务,但只有通过 CI/CD 集成的生成才会转移到部署中。

  9. 在测试过程已批准某个可部署的服务版本后,GitHub Actions 会提升从 DevTest 容器注册表发布到生产容器注册表的过程。 GitHub Actions 按照容器注册表最佳做法,使用适当的版本标记映像并将其推送到生产容器注册表。

  10. Azure Pipelines 创建到“生产”的发布。 管道施加审批门限以及暂存前和暂存后条件,以免在生产环境中进行无意或不正确的部署。

应用程序将 Azure Cosmos DB 用于其全局分布式数据库层。

所有服务和环境向 Azure Monitor 报告指标。

在此解决方案中,由单个 Microsoft Entra ID 管理 DevTest 和生产订阅的标识。 Azure 基于角色的访问控制 (Azure RBAC) 限制对受保护资源的访问,防止未经授权或无意中修改生产资源。 开发人员在“生产”中拥有的访问控制级别与他们在“DevTest”沙盒中不同。

组件

  • Azure 开发测试实验室提供实验室,其中具备创建环境所需的所有工具和软件。 开发人员无需等待批准即可高效地自我管理资源。 使用开发测试实验室,团队可以控制成本并调控每个实验室的资源,授予开发人员在成本约束范围内操作沙盒的权限和灵活性。

  • GitHub 是用于版本控制和协作的代码托管平台。 GitHub 源代码管理存储库包含所有项目文件及其修订历史记录。 开发人员可以在存储库中合作贡献代码,以及讨论和管理代码。

  • GitHub Actions 提供一套生成和发布工作流,其中涵盖了 CI、自动测试和容器部署。

  • Azure Boards 是一个用于管理软件项目工作的服务。 Azure Boards 引入了一组丰富的功能,包括原生对 Scrum 和看板的支持、可自定义的仪表板和集成报告。

  • Azure Pipelines 是一个功能齐全的 CI/CD 服务,可以自动将更新的容器注册表映像部署到 Kubernetes 群集。

  • Azure 密钥保管库安全存储和严格控制对 API 密钥、密码和证书等机密的访问。 有关 DevOps 场景中的 Key Vault 的详细信息,请参阅 AKS 上的 DevSecOpsGitHub 中的 DevSecOps

  • Azure 容器注册表支持在专用注册表中为所有类型的容器部署生成、存储和管理容器映像与项目。

  • Azure Kubernetes 服务通过将大部分复杂性、责任和运营开销转移到 Azure,来简化托管 Kubernetes 群集的部署。

  • Microsoft Entra ID 企业标识平台提供单一登录和多重身份验证来治理用户的访问。 单个 Microsoft Entra ID 可以跨订阅管理所有环境的标识。 Azure 基于角色的访问控制 (Azure RBAC) 限制对受保护资源的访问,防止未经授权或无意中修改生产资源。

  • Azure Cosmos DB 是一个完全托管、广泛分布的数据库即服务,它支持高可用性、多区域应用程序以及 SQL 和 NoSQL API。 Azure Cosmos DB 包括 DevTest 功能,例如与 Azure DevOps 集成的本地 Azure Cosmos DB 模拟器,以及用于在 DevTest 沙盒中管理成本的低成本层。

  • Azure Monitor 可以监视生产和 DevTest 环境。 Azure Monitor 从 VM 操作系统和故障转储文件收集日志数据,并将其聚合以便在 Microsoft Defender for Cloud 中查看。

备选方法

  • Azure Repos 是 GitHub 的替代服务,用于托管 Git 存储库。 借助 Azure Repos、Azure Boards 和 Azure Pipelines,所有 Azure DevOps 服务都可以使用相同的门户和用户界面,并整合开发人员执行 DevOps 活动所需的服务。

  • Azure Pipelines 中可用的某些集成(例如直接在 Azure 主干网络中进行服务连接或身份验证)目前在 GitHub Actions 中不存在。 对于这些需求,请考虑为 CI 和生成活动使用 Azure Pipelines 而不是 GitHub Actions。

  • 在广泛分布的系统中,将微服务隔离到单独的存储库会有好处。 所有权和权限的分离更简单,维护不同语言的项目比维护单个存储库更容易。 但是,如果有少量的微服务全都采用同一种语言或运行时,则为项目维护单个 Git 存储库可能更容易。

后续步骤