假设您已经成功扩展了应用程序基础架构。您使用 DevOps 进行快速协作软件开发,并通过 Kubernetes 或 HashiCorp Nomad 等容器编排扩展底层应用程序基础设施以满足当前需求。编写和部署新代码进展顺利……直到情况并非如此——直到应用程序配置或其他组件偏离对齐,或者直到出现重构的根本需求,而没有简单的方法来重新创建环境,或者回滚时到之前的状态变成下沉或游泳时刻等。
自动化声明式基础设施部署和配置不仅可以更轻松地快速交付具有令人惊叹的新功能和改进的代码,而且还可以减轻漂移冲突,并保持对部署环境状态的控制。虽然云原生应用程序是为了在流动和动态的云环境中运行而构建的,但这正是 GitOps 真正发挥作用的地方。
什么是 GitOps?
GitOps 不仅仅是另一个流行词,它已经进入了非常拥挤的软件开发领域。 GitOps 是一个操作框架,旨在使用 Git 作为单一事实来源来简化和自动化应用程序和基础设施的部署和管理。 GitOps 在云原生生态系统中迅速普及,特别是在基于 Kubernetes 的环境中。
对某些人来说,围绕 GitOps 的炒作可能听起来像是对 DevOps 的枕式重新包装。如果您已经拥有坚实的 DevOps 文化,那么 GitOps 会带来什么?
GitOps 与 DevOps
DevOps 为软件开发生命周期带来了一套最佳实践,包括版本控制、协作、合规性、CI/CD、日志记录和监控,以开发和交付高质量的应用程序。 GitOps 是这些最佳实践的操作实现,用于管理和自动化整个部署环境。
GitOps 利用版本控制的 git 存储库作为单一事实来源。 CD 管道控制云基础设施所需的声明性状态,并且合并到中央存储库中的更改会触发强制执行该状态的机制。
GitOps 可自动化应用程序代码部署和基础设施管理。通过为应用程序代码和配置创建单独的存储库来遵循最佳实践。使用 CI/CD 工具更新应用程序存储库会触发进程来更新配置存储库。然后将配置更改推送/拉取到部署环境。
GitOps 方法补充了云原生开发的快速性和灵活性。可重复的流程和统一的部署方法允许团队异步工作而不牺牲协作——这是更快地将稳定和可扩展的产品推向市场的关键。
GitOps 的好处
使用 GitOps 方法的好处包括:
- 运营效率。自动化基础设施各个方面的测试和部署大大减少了工程师执行手动和/或重复任务所花费的成本和时间。团队能够加快错误修复或新功能的开发。直接管理基础设施所花费的时间更少,可以腾出时间专注于监控和优化。
- 更好的协作:开发、运营和 DevOps 团队都使用相同的熟悉界面(git 存储库),并利用相同的程序进行同行评审和合并拉取请求。统一的部署方法和 CI/CD 流程使这些团队能够更紧密、更高效地合作,同时遵循相同的最佳实践。
- 可靠性: GitOps 自动化极大地降低了人为错误的风险和影响,因为错误在部署到选定环境之前会在 CI 测试管道中被捕获。如果发生事件,版本控制状态的主要优点是能够快速回滚到以前的稳定版本。
- 更严格的安全性:在基于推送的方法中,只有自动化工具需要对环境进行写访问。在基于拉取的方法中,环境只需要对 git 存储库的读取访问权限。这极大地减少了攻击面,并且消除了大多数个人和/或团队直接访问环境的需要。
- 合规性和审核: git 存储库作为所有更改的单一界面,可以轻松以编程方式强制执行策略即代码,以确保基础设施持续满足合规性标准。版本控制通过整个存储库的可用且记录的历史记录简化了审核。
- 多环境的自动化部署。一些常见且强烈推荐的部署策略包括独立的开发、登台和生产环境、蓝/绿部署、多云和/或多区域部署。手动执行此过程可能很麻烦、耗时且容易出错。 GitOps 方法提供了一种更快、更稳定的方法来部署这些多个环境。