你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
本文介绍 持续集成和持续部署(CI/CD)基线体系结构的版本。 它重点介绍如何使用 Azure Pipelines 部署 Azure Kubernetes 服务 (AKS) 应用程序。
Azure Pipelines 将部署活动安排到 AKS,作为可重复应用程序交付计划的一部分。 可以将生成和发布过程集成到管道中,以减少人为错误的风险、加速发布周期并提高整体软件质量。 本文介绍如何使用 Azure Pipelines 实现 CI/CD 并将应用程序更新推送到 AKS 群集。
Architecture
下载此体系结构的 Visio 文件 。
数据流
以下数据流对应于上图:
对 Azure Repos Git 存储库或 GitHub 存储库的拉取请求(PR)会触发 PR 管道。
此管道运行质量检查,包括以下操作:
- 生成代码,可能需要从依赖项管理系统拉取依赖项
- 使用工具分析代码,例如静态代码分析、linting 和安全 扫描
- 执行单元测试
如果任何检查失败,管道运行将结束,开发人员必须进行所需的更改。 如果所有检查都通过,则管道需要 PR 评审。 如果 PR 评审失败,管道将结束,开发人员必须进行所需的更改。 成功的流水线运行意味着 PR 合并成功。
合并到 Azure Repos Git 会触发 CI 管道。 此管道运行与 PR 管道相同的任务,并添加集成测试。
如果集成测试需要 机密,管道会从 Azure Key Vault 获取机密,该保管库是专用于此环境的 CI 管道的资源。
如果任何检查失败,管道将结束,开发人员必须进行所需的更改。
成功的 CI 管道运行会在非生产 Azure 容器注册表中创建和发布容器映像。 Defender for Containers 在推送到 Azure 容器注册表时扫描容器映像,并将映像漏洞报告给 Microsoft Defender for Cloud。 (可选)可以对容器映像 进行签名 ,以确保容器映像的完整性。
CI 管道的完成 会触发 CD 管道。
CD 管道将 YAML 模板部署到包含 Defender 代理的过渡 AKS 环境。 此部署使用推送模型并通过 kubectl 或 Helm 运行。 该模板引用非生产注册表中的容器映像。
管道针对过渡环境执行验收测试,以验证部署。 如果测试成功,管道可能包含手动验证任务来验证部署并恢复管道。 某些工作负荷会自动部署。 如果任何检查失败,管道将结束,开发人员必须进行所需的更改。
当个人恢复手动干预时,CD 管道会将映像从非生产 Azure 容器注册表提升到生产注册表。 Defender for Containers 在推送到容器注册表时扫描容器映像,并将映像漏洞报告给 Microsoft Defender for Cloud。
CD 管道将 YAML 模板部署到包含 Defender 代理的生产 AKS 环境。 该模板指定生产注册表中的容器映像。
Prometheus 的 Azure Monitor 托管服务 定期将性能指标、清单数据和运行状况状态信息从容器主机和容器转发到 Azure Monitor。
Log Analytics 工作区存储所有数据。 Azure Monitor 提供了多个工具来分析其他功能收集的数据。 各种 Grafana 仪表板 结合了不同的 Kubernetes 遥测集。 Application Insights 收集应用程序特定的监控数据,例如跟踪信息。
Defender for Containers 对 AKS 中运行的容器执行定期扫描,以及容器注册表中存储的容器映像。 Defender for Containers 还为支持的容器化环境提供实时威胁防护,并为可疑活动生成警报。 此信息有助于识别安全问题并提高容器的安全性。
Components
Azure Pipelines 是 Azure DevOps 的一个组件,可自动生成、测试和将代码部署到其计算目标。 在此体系结构中,它将创建并测试容器映像,将其上传到容器注册表,并将其部署到 AKS 中。
适用于 Prometheus 的 Azure Monitor 托管服务 是一项 Azure 功能,可为容器化环境提供监视。 在此体系结构中,它会从容器收集性能指标、日志和运行状况数据,并将此可观测性数据转发到 Azure Monitor 进行分析和警报。
Key Vault 是用于存储和访问机密的云服务,例如 API 密钥、密码、证书或加密密钥。 在此体系结构中,管道从 Key Vault 获取测试代码所需的机密。
Azure Monitor 是一种监视解决方案,用于收集、分析和响应来自云和本地环境的遥测数据。 在此体系结构中,它作为中心的可观测性平台,为 AKS 群集和 CI/CD 管道操作提供监视和警报功能。
容器注册表 是 Azure 上的托管专用容器注册表服务。 容器注册表存储专用容器映像。 在此体系结构中,计算平台从容器注册表拉取应用程序的容器映像。
AKS 是一种托管 Kubernetes 服务,Azure 负责处理关键任务,例如运行状况监视和维护。 在此体系结构中,它充当应用程序的计算平台。
Microsoft 安全 DevOps Azure DevOps 扩展 允许您在 CI/CD 工作流中直接嵌入安全扫描工具。 在这种架构中,Microsoft Security DevOps 负责执行静态分析,并提供在 AKS 开发和部署过程中多个管道的安全态势可见性。 Microsoft DevOps 安全是 Microsoft Defender for Cloud DevOps 安全的一部分,它提供跨多云环境的全面可见性、姿态管理和威胁防护。
Alternatives
请考虑实现方案中的以下选项。
基于拉取的模型 (GitOps)
此方案演示了一个基于推送的模型,用于在 AKS 中部署资源。 需要对群集进行确定性更新时,基于推送的部署效果最佳。 流水线主动启动部署,监控其成功,并在部署失败时采取直接措施。 此方法通常是工作负荷中安全部署实践的重要特征。 基于推送的部署也适用于多个部署目标,例如蓝绿环境,需要在单个群集中或跨群集建立高度控制的推出模式。
或者,拉取式部署依赖于集群来提取和应用更新。 此模式将部署逻辑与管道分离,使单个群集能够与存储在中心位置的所需状态(例如 GitOps 工作流中的 Git 存储库或项目注册表)进行协调。 基于拉取的部署最适合优先保证一致性、可审核性和自动自我修复的环境。 真相的来源位于外部,通常位于版本控制系统中,因此群集会持续监视并应用更新以匹配此所需状态。 此方法可降低偏移风险。 如果群集遇到故障或不可用,则它可以在联机后自行协调,而无需从中央管道重新部署。
GitOps 拉取模型还不需要管道直接访问群集或使用关联的部署凭据,从而消除了攻击途径。 群集只需要对源存储库具有只读访问权限。 有关详细信息,请参阅 适用于 AKS 的 GitOps。
使用 GitHub Actions 生成的 CI/CD 管道
可以将 Azure Pipelines 替换为 适用于 AKS 的 GitHub Actions。 GitHub Actions 是一个 CI/CD 平台,可用于自动执行生成、测试和部署管道。 请考虑对 AKS 使用 初学者工作流 ,并根据 CI/CD 要求对其进行自定义。
后续步骤
- 有关基于 Azure Monitor 的完整服务集,用于监视 Kubernetes 基础结构中不同层的运行状况和性能,以及依赖于该服务的应用程序,请参阅 Azure Monitor 中的 Kubernetes 监视。
- 使用 Azure Pipelines 的 CI/CD 基线体系结构
- 培训课程:Azure 上的 Kubernetes 入门