了解更好的软件工作流程的 OpenGitOps 原则

x33g5p2x  于2022-02-12 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(241)

GitOps描述了一种使用植根于 Git 版本控制系统的方法来操作和管理软件的方法。使用基于 GitOps 的工作流,通过要求将系统的特征定义为 Git 存储库中的文件,可以更轻松地开发、部署、维护和协作软件。

术语暗示了 Git 作为单一事实来源的角色。然而,GitOps 驱动流程的实际实现历来是可以解释的。现在, OpenGitOps标准已经解决了这种模糊性,这是CNCF 支持的定义导致可重复 GitOps 系统的原则的尝试。

在本文中,我们将了解这些原则是什么,它们为何重要,以及如何使用它们来构建可扩展和可维护的软件。这些标准是根据GitOps 工作组中 90 多家领先公司和相关方的见解制定的。

1. 声明状态

第一个原则指出,所有 GitOps 管理的系统都必须以声明方式表达其状态。您应该定义理想状态在当前时间点的样子,而不是提供有关如何组装该状态的具体说明。

声明式配置将系统的所需状态与用于转换到该状态的过程分开。随着时间的推移,这更易于维护并且更容易推理;贡献者只需要描述系统现在应该看起来的样子,无需编写影响状态更改的迁移。
不定义实现状态的确切步骤可以节省开发时间并提高部署灵活性。您只需应用存储库中的最新状态定义,即可在新环境中启动应用程序实例。

声明式配置通常与Ansible 和 Terraform 等基础设施即代码工具一起使用。您编写配置文件来定义您希望可用的基础架构组件。这些工具将您的声明转换为提供必要资源的 API 调用和命令。Kubernetes 容器编排平台是声明式系统的另一个例子。

2. 版本化和不可变

第二个 OpenGitOps 原则指出,您的系统状态必须在其生命周期内完全版本化。这就是 Git 真正发挥作用的地方,它可以让您提交配置文件、合并来自其他协作者的更改,并随着时间的推移发展您的状态。

结合声明性状态定义,版本控制为您提供了一种在出现问题时回滚系统的有保证的方法。签出较旧的提交并重新应用您的配置文件将使系统恢复到当时的状态。

以这种方式存储状态也有助于实现不变性。将更改应用到基础架构的唯一方法应该是在存储库中修改文件。通过遵循这一原则,您可以断言系统的状态实际上反映了源中的声明。应避免通过直接修改基础架构组件来改变状态,因为它会在系统的真实状态和管理存储库中的“期望”状态之间产生差异。

3. 拉式代理

GitOps 的最终目标是尽可能地自动化系统管理。使用基于拉的方法来应用更改有助于促进这一点。在您的基础架构中运行的代理应定期从您的 Git 存储库中提取当前状态并应用任何更改。
传统的基于推送的部署模型通常通过将更改作为 CI/CD 管道脚本的一部分发送到您的基础设施来工作。即使感觉这是自动化的,这也是在源存储库和基础架构之间创建耦合点的额外步骤。在基于拉的模型中,环境中的代理会轮询您的源存储库并自动检测更改。

该模型创建了不易受状态“漂移”影响的自给自足的基础设施。当环境中的更改与存储库声明的状态相比出现差异时,就会发生漂移。在基于推送的部署模型中,在您的下一次脚本运行启动另一个推送之前,不会解决偏差。基于拉的方法通过定期轮询和重新应用最新状态来最小化漂移。

使用拉代理也是一项安全优势。基于推送的方法要求您以某种方式公开您的基础设施。这是必要的,因此您的源代码控制服务器可以发送更新的状态并执行应用它的命令。通过在基础架构中运行代理,您无需提供进入其中的路径。您可以收紧防火墙控制以允许所有外部访问环境。

同样,您不再需要生成提供对基础架构的访问权限的凭据。在基于推送的模型中使用的 CI 服务器的妥协可能会泄露保护您的实时环境的密钥。通过为拉取代理提供 Git 托管平台的访问令牌来逆转这一流程,比将环境开放给外部访问的风险要小。

4. 持续和解

最终的 OpenGitOps 原则涉及持续协调。这是通过将声明性状​​态定义与基于拉的代理结合使用来实现的。

您的代理会持续监控您的系统状态。当提交更改或发生自然漂移时,他们会采取行动将环境调和回声明的状态。这与传统模型形成鲜明对比,在传统模型中,部署是线性过程,它们开始、运行一系列命令并终止,让基础设施独立运行。
持续协调将 GitOps 工作流识别为实时适应不断变化的条件的动态过程。与简单的“设置并忘记”部署不同,GitOps 代理是不断工作以维持所需状态的活动组件。这使您可以确信部署仍按预期运行。

结论

OpenGitOps 原则描述了使用基于 GitOps 的工作流进行有效管理的系统的四个常见特征。他们正式确定了成功实施的关键特征,为 DevOps 团队提供了一个参考点来比较他们自己的系统。

正如这些原则所示,GitOps 不仅仅是 Git 存储库中的配置文件。它是一种用于定义、实施和维护系统的内聚方法;虽然 Git 存储库对于版本控制至关重要,但基于拉取的软件代理等其他组件可以释放该策略的全部潜力。

有效采用包含 OpenGitOps 原则的 GitOps 工作流程可以提高吞吐量、改善部署健康状况并最大限度地减少操作和维护基础架构所花费的时间。该方法使检查系统状态以及使用 Git 和您喜欢的代码编辑器进行或回滚更改变得简单。然后由您的基础架构的代理集成来检测和应用这些更改,从而消除与部署的人为交互及其带来的风险。

相关文章

微信公众号

最新文章

更多