什么是 GitOps
GitOps = IaC + Git+ CI/CD,即基于 IaC 版本化 CI/CD,它的核心是使用 Git 仓库来管理基础设施和应用的配置,并且以 Git 仓库作为基础设置和应用的单一事实来源。GitoOps 重新定义了云原生场景下的 CI/CD 流程。 开发、运维团队以 Git 版本控制,作为中心不可变状态声明,结合 CI/CD 流程中代码审查、自动测试和交付部署,从而实现云原生场景下运维体系的最佳实践。
GitOps 的设计理念
GitOps 本质上 DevOps 文化中的工程实践,而非某项具体的技术或项目,结合当今流行的使用形式,可将 GitOps 系统简单地理解为以下几大特点:
- 代码化描述基础设施和应用的部署状态
对于应用的基础设置资源、应用配置和状态的维护,原则都是应是使用代码化的方式进行声明式描述。只有将各类手动配置的工作代码化,我们才能使用 Git 仓库的形式来管理基础设施和应用的部署。
对大规模应用管理的运维效率和可维护性的关键基础是 IaC (Infrastructure as Code),基础设置无法进行 IaC,GitOps 也就无从谈起。
- 使用 Git 的语义来管理代码化后的配置代码
基础设施代码化后面临着管理问题,而 GitOps 顾名思义,采用 Git 语义来管理这部分代码,主要有:
- IaC 代码存储于 Git 仓库中
- 基于分支模式来管理代码版本
- 开发人员使用 Pull Request 来提交 IaC 变更
更高级的管理人员,对这部分变更进行 Code Review,合规之后进行 Merge 到主版本,进而应用到线上环境, 而当线上环境出现问题时,再基于 Git 历史进行回退。
- 具备将配置代码进行自动化部署的能力
我们还必须要有相应的能力将 IaC 代码自动化部署于各种真实的线上环境,当 Git 仓库中声明的期望状态发生变更时,可以立刻自动化应用到系统中,使其当前环境与 Git 仓库中 Iac 所描述的状态一致。
- 应用状态偏离修正
应用状态一旦与 Git 仓库中期望状态不一致,应该立刻进行自动修复,即使手动修改了集群的编排策略,集群也会被自动恢复到 Git 仓库中清单所描述的状态。以 Git 仓库作为基础设置和应用的单一事实来源,从而杜绝各类权限分散、手动操作的弊端。