什么是 GitOps

GitOps = IaC + Git+ CI/CD,即基于 IaC 版本化 CI/CD,它的核心是使用 Git 仓库来管理基础设施和应用的配置,并且以 Git 仓库作为基础设置和应用的单一事实来源。GitoOps 重新定义了云原生场景下的 CI/CD 流程。 开发、运维团队以 Git 版本控制,作为中心不可变状态声明,结合 CI/CD 流程中代码审查、自动测试和交付部署,从而实现云原生场景下运维体系的最佳实践。

GitOps 的设计理念

GitOps 本质上 DevOps 文化中的工程实践,而非某项具体的技术或项目,结合当今流行的使用形式,可将 GitOps 系统简单地理解为以下几大特点:

  1. 代码化描述基础设施和应用的部署状态

对于应用的基础设置资源、应用配置和状态的维护,原则都是应是使用代码化的方式进行声明式描述。只有将各类手动配置的工作代码化,我们才能使用 Git 仓库的形式来管理基础设施和应用的部署。

对大规模应用管理的运维效率和可维护性的关键基础是 IaC (Infrastructure as Code),基础设置无法进行 IaC,GitOps 也就无从谈起。

  1. 使用 Git 的语义来管理代码化后的配置代码

基础设施代码化后面临着管理问题,而 GitOps 顾名思义,采用 Git 语义来管理这部分代码,主要有:

  • IaC 代码存储于 Git 仓库中
  • 基于分支模式来管理代码版本
  • 开发人员使用 Pull Request 来提交 IaC 变更

更高级的管理人员,对这部分变更进行 Code Review,合规之后进行 Merge 到主版本,进而应用到线上环境, 而当线上环境出现问题时,再基于 Git 历史进行回退。

  1. 具备将配置代码进行自动化部署的能力

我们还必须要有相应的能力将 IaC 代码自动化部署于各种真实的线上环境,当 Git 仓库中声明的期望状态发生变更时,可以立刻自动化应用到系统中,使其当前环境与 Git 仓库中 Iac 所描述的状态一致。

  1. 应用状态偏离修正

应用状态一旦与 Git 仓库中期望状态不一致,应该立刻进行自动修复,即使手动修改了集群的编排策略,集群也会被自动恢复到 Git 仓库中清单所描述的状态。以 Git 仓库作为基础设置和应用的单一事实来源,从而杜绝各类权限分散、手动操作的弊端。

Last Updated:
Contributors: isno