GitOps:用于持续部署的云原生方法

GitOps是一种用于持续部署的云原生方法,它利用Git版本控制/源代码控制系统作为所有配置、基础设施和操作过程的单一事实来源。在这种方法中,基础设施配置更改是通过源代码控制系统本身自动进行的。GitOps 被视为基础设施即代码(Infrastructure as Code)的进化方法。

GitOps 与其他方法的不同之处在于,它集中了开发和运维过程,以便你基于单一数据来源,拥有一条单一简单的操作路径。

GitOps 的优势:

  • 通过推送代码,而不是容器的方式,节省了开发人员的时间和精力。
  • 通过自动化的持续部署提高速度。
  • 提高 CI/CD 流水线的健壮性,因为它提供了一种简单的跟踪机制。
  • 高度可用且经济高效,停机时间短。
  • 由于使用 Git 作为单一事实来源,因此安全性更高。
  • 实现了一个完整的端到端的交付流水线,一致性和统一性更高。
  • 更强大的工作流程,因为 Git 可以用于对系统的运维操作进行跟踪和管理。

GitOps 作为DevOps 的一个组成部分,帮助自动化了开发过程,并加快了发布过程。它利用自动化的优势来减少在整个应用程序生命周期管理中人工干预的必要性。

使用 GitOps,可以更好地划分流程。Git 为 Kubernetes 和整个云原生提供了一个操作过程模型。它围绕部署、监控和容器化集群管理等,定义了一组原则。

在非 GitOps 工作流中,你需要调用 API 或在可视化界面上来启动事件,但在 GitOps 工作流中,任何已批准的 Git 提交都会自动触发事件 — 构建、部署或其他生命周期事件。

GitOps 与现代 DevOps 实践完美契合,因为一切都被视为代码,而代码存储在 Git 中。一切都源于并连接到 Git,这是一个单一的事实来源。它允许你扩展对此处所有内容的定义,包括基础设施操作。而且一切都是可观察和监控的,更改还可以通过 Git 进行审核。

 

在 GitOps 工作流中,系统所需的配置与代码本身一起保存在存储在 git 中。工程师将对代表所需状态的配置文件进行更改,而不是通过 CLI 直接对系统进行更改。

在这里GitOps引入一个新的工具:Diffs,用来监控对比系统状态。即:验证当前线上系统的状态是否和Git库中描述的状态一致。

审查和批准此类更改也可以通过标准流程完成,例如 – 拉取请求、代码审查和合并到主分支。当更改被批准并随后合并到主分支时,它会根据新更新的文件中的配置,将系统的当前状态切换到所需状态。

在典型的 GitOps 实现中,不允许手动更改,对配置的所有更改都应放入 Git 中的文件。在少数的情况下,需要手动更改系统的权限。

在 GitOps 模型中,基础设施工程师和运维工程师的角色从实施基础设施修改和应用程序部署,转变为开发和支持 GitOps 的自动化以及通过 Git 协助团队审查和批准更改。

总而言之,GitOps 流水线的运行方式如下:

  • 从用户(主要是开发人员)更改 Git 中的代码开始。
  • 之后,构建容器镜像并将其推送到镜像仓库,如 JFrog 镜像仓库。
  • 然后它会更新程序。
  • 一旦开发人员创建了一个拉取请求,它就会部署到相关的分支。
  • 然后它测试工作流程是否全部正确或是否存在任何复杂性。
  • 一旦测试通过,代码审查人员就会合并它。
  • 合并后,下一步就是进入测试分支。
  • 一旦有人创建了拉取请求,它将自动部署到该测试分支。
使用 Anthos 和 JFrog Artifactory 的云原生 GitOps

使用 Anthos 和 JFrog Artifactory 的云原生 GitOps

GitOps 的一些缺点

虽然 GitOps 看起来很直观,但它也有一些缺点:

  • 可扩展性问题:虽然 GitOps 承诺对工作流具有完全的可见性,但对于拥有许多 GitOps 存储库和或配置文件的大型企业来说可能并非如此。GitOps 似乎只适用于相对简单的设置,目前只能管理数量有限的配置文件。
  • 有风险的密钥:在 Git 存储库中存储密钥不是最佳实践。一旦你将密钥存储在 Git 中,这些密钥可能会被永远记住。随着存储库体积的增大,管理和维护这些密钥也不可行并且可能存在风险。
  • 复杂的工作流程:在 GitOps 中,所有部署都由 yaml 文件拉取请求处理。当我们开始为流水线运行多个集群时,并且每个集群都将拥有自己独特的配置值时,GitOps很难根据环境自动适应。这表明每个环境都需要不同的部署脚本。随着我们在工作流设置中引入更多环境——集群和命名空间,这个难度会增加。
  • 没有提供完整的开发生命周期的解决方案: GitOps 方法和工具只关注了应用程序的部署部分。GitOps 对端到端软件开发没有帮助。

结论

GitOps是一种实现持续交付的模型,它的核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中。GitOps 提供了各种好处,但也有一些缺点。由于这种方法相对较新,与真正落地实践仍然存在一些差距。

译文链接: https://thenewstack.io/a-look-at-gitops-for-the-modern-enterprise/

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址