菜单

DevOps与CI/CD

相关源文件

目的与范围

本文档全面概述了 DevOps 实践和持续集成/持续交付 (CI/CD) 流水线。它涵盖了构成现代软件交付基础的核心概念、工具、实现模式和最佳实践。本指南侧重于 DevOps 和 CI/CD 流水线的技术方面、容器化技术、部署策略以及使组织能够更快、更可靠地交付软件的监控方法。

有关云基础设施和分布式系统(通常是 DevOps 实践的补充)的信息,请参阅 云和分布式系统。有关 DevOps 的安全方面(DevSecOps),请参阅 安全系统和实践

什么是 DevOps?

DevOps 是一套实践,它结合了软件开发(Dev)和 IT 运营(Ops),以缩短系统开发生命周期,同时频繁可靠地交付功能、修复和更新。主要目标是缩小开发和运营团队之间的差距,从而更快地交付高质量软件。

来源: README.md369-396

什么是 CI/CD?

CI/CD 代表两个相互关联的实践:持续集成和持续交付/部署。

  • 持续集成 (CI):开发人员频繁地将其代码更改合并到中央存储库中,并在其中运行自动化构建和测试。
  • 持续交付 (CD):自动准备代码更改以发布到生产环境。
  • 持续部署:在通过所有验证阶段后,自动将代码更改部署到生产环境。

CI/CD 管道架构

来源: README.md383 README.md396

CI/CD 实现组件

精心设计的 CI/CD 系统包含几个关键组件,它们协同工作以自动化软件交付过程。

核心组件

来源: README.md396 README.md383

容器化和编排

Docker

Docker 是一个平台,它将应用程序及其依赖项打包到容器中,以便在不同环境中一致地部署。

来源: README.md380 README.md382 README.md395

Docker 最佳实践

  1. 使用官方的最小基础镜像
  2. 层优化(合并 RUN 命令)
  3. 仅包含必需文件(.dockerignore)
  4. 多阶段构建以减小镜像大小
  5. 避免以 root 用户运行(使用 USER 指令)
  6. 使用环境变量进行配置
  7. 正确的健康检查(HEALTHCHECK 指令)
  8. 安全处理敏感信息
  9. 正确标记镜像(不仅仅是“latest”)

来源: README.md380

Kubernetes

Kubernetes (K8s) 是一个开源的容器编排平台,可自动化容器化应用程序的部署、扩展和管理。

来源: README.md375 README.md376-378 README.md394

Kubernetes 服务类型

Kubernetes 提供不同的服务类型,用于在集群内部和外部公开应用程序。

来源: README.md375

Kubernetes 设计模式

Kubernetes 设计模式为容器编排中的常见挑战提供了解决方案。

  1. Sidecar 模式:通过附加功能增强主容器。
  2. Ambassador 模式:代理网络连接到主容器。
  3. Adapter 模式:标准化主容器的输出。
  4. Init Container 模式:在应用程序容器运行之前运行,以设置先决条件。
  5. Leader Election 模式:协调副本之间的工作。
  6. Work Queue 模式:将任务分发给工作节点。
  7. Scatter/Gather 模式:将请求发送到多个节点并聚合响应。
  8. Singleton 模式:确保只有一个容器实例在运行。
  9. Stateful Service 模式:管理有状态应用程序。
  10. Service Discovery 模式:在集群中定位服务。

来源: README.md370

部署策略

不同的部署策略在风险、复杂性和停机时间之间提供了各种权衡。

来源: README.md384 README.md386 README.md389

基础架构即代码 (IaC)

Terraform

Terraform 是一个开源的 IaC 工具,支持跨多个云提供商进行声明式基础架构配置。

来源: README.md387

监控、日志记录和指标

有效的监控、日志记录和指标收集对于维护和故障排除生产系统至关重要。

来源: README.md390 README.md391 README.md375

指标收集中的推送与拉取

来源: README.md373

实际 CI/CD 示例

Netflix CI/CD 流水线

Netflix 拥有复杂的 CI/CD 流水线,每天支持数千次部署。

来源: README.md381 README.md97

Uber CI/CD 流水线

Uber 使用高度自动化的 CI/CD 流水线来管理其微服务架构。

来源: README.md86 README.md105

DevOps 方法论比较

DevOps vs. SRE vs. 平台工程

方面DevOps站点可靠性工程 (SRE)平台工程
重点打破开发和运营之间的孤岛将软件工程应用于运营创建自助开发者平台
行业运动Google近期行业演变
关键指标部署频率、交付周期、平均修复时间 (MTTR)、变更失败率SLI、SLO、错误预算开发者生产力、平台采用率
主要实践CI/CD、IaC、监控自动化、可靠性、减少重复劳动内部开发者平台、API、抽象
团队结构跨职能团队专业的 SRE 团队为开发者提供服务的平台团队

来源: README.md388

DevOps vs. NoOps

方面DevOpsNoOps
定义Dev与Ops的协作消除对专用运维的需求
基础设施由协作团队通过 IaC 进行管理完全由云提供商/平台管理
运维工作简化但仍然存在自动化或抽象化
采用行业内广泛采用新兴,尤其是在无服务器架构中
技术栈容器、IaC、CI/CD 工具无服务器、PaaS、BaaS

来源: README.md392

Kubernetes 生态系统和工具

Kubernetes 拥有丰富的工具生态系统,可以增强其功能

来源: README.md377-378

总结

DevOps 和 CI/CD 已经改变了组织开发、部署和维护软件的方式。通过自动化软件交付流程以及打破开发和运维团队之间的壁垒,DevOps 实践能够实现更快、更可靠的软件交付。Docker、Kubernetes 和各种 CI/CD 工具等关键技术促进了这一转型,而监控、日志记录和部署策略等实践则确保了软件能够以最小的风险和最大的效率进行交付。