理解GitOps:原则、工作流和部署类型

GitOps是什么?

GitOps是一组实践管理基础设施和应用程序配置。它利用Git,一个开源的版本控制系统中常用的软件开发项目。

GitOps建立在基础设施代码(IaC)技术,这可能需要一个配置文件指定所需的基础设施的状态,并自动将国家的基础设施。这就是所谓的声明式配置。GitOps, Git存储库成为真理的来源为所有声明式配置。

GitOps自动管理基础设施的配置和部署使用Git pull请求。Git存储库包含整个系统状态,所以你可以查看和检查系统状态变化的跟踪。

GitOps基于开发人员的经验,赋予团队来管理他们的基础设施使用相同的工具和流程软件开发。它不仅是基于Git,还集成了其他技术在持续集成/持续交付(CI / CD)和云本机工具集。

本文简介:

3 GitOps原理

这里有三个主要的原则GitOps模式。

声明式系统

在GitOps模型中,整个系统配置以声明的方式。这种声明方式注重的是结果(所需的状态),而不是所需的步骤来实现所需的结果。

这个声明式方法允许用户指定的终极目标,而无需担心所有必要的steps-known作为一个必要的方法。GitOps创建请求来声明配置,允许用户将这些状态存储在Git方便部署和回滚。

系统状态在Git存储库

所有声明性状态存储在一个Git仓库作为真理的唯一来源。这个版本控制方法使所有可用系统基础设施变更按时间顺序,允许用户轻松地识别基础设施会随着时间而改变。这使它更容易执行回滚,部署失败的故障诊断,并为合规和安全审计。

自动部署

当拉或合并请求,所有更改都存储在Git,所以他们都是验证和批准。在GitOps模型中,最好立即自动部署任何批准的更改。这允许系统达到预期的状态迅速。它还确保当前版本的Git配置匹配实际的基础设施。

GitOps工作流

GitOps基于拉请求。当拉请求初始化时,用户可以看到每个基于储存库的分支变化的概述。用户可以添加一个提议变动汇总表,观点提出的修改,添加标签,提到其他贡献者。

开发人员创建一个拉请求之后,他们可以添加主题分支中的提交。这允许所有贡献者看到实际的修改建议。一旦每个人都批准更改,他们可以与拉请求合并。

配置更改可以包含在一个拉的请求吗?
GotOps拉请求可以包括配置更改,如:

  • 更改应用程序配置
  • 改变集装箱的图片
  • 改变Kubernetes集群配置
  • 修复错误的环境中
  • 通过声明性定义新的基础设施配置
  • 更新一个环境的新要求

故障排除
把请求被批准后更改部署,如果有任何问题,故障诊断是简单的。GitOps,任何问题在一个环境可以追踪到特定的请求,然后故障诊断可以关注这些拉请求中引入的变化。

与其他系统的集成
Git push GitOps还可以使用其他工具,开发和持续集成:

  • GitOps可以处理任何CI和Git服务器。
  • GitOps可以使用CI / CD工具为Kubernetes构建环境,比如海洋的CD和詹金斯X。
  • GitOps可以使用任何Git存储库,如GitHub, Bitbucket都,Azure管道,或AWS CodeDeploy。

为什么使用GitOps ?

组织采用GitOps正在寻找在敏捷开发实践的前沿。GitOps在现有的开发过程提供了以下好处:

  • 生产力-GitOps是一个可行的方法来实现持续部署,提高开发效率。GitOps团队可以将每个更改部署到生产,而不是只把选择释放一天几次。这个反馈回路可以大大提高开发速度更快。
  • 开发人员的经验现代CI / CD管道是复杂的,各种各样的工具,并不是所有的开发人员都熟悉。随着Kubernetes,环境变得更加复杂。然而,所有开发人员都熟悉Git源代码控制。所以GitOps模型支持更快的提高和流畅的体验,基于概念的所有开发人员都熟悉。
  • 可靠性git叉子和恢复允许团队执行容易,可再生的回滚,如果在一个环境问题。Git存储库还提供了一个单一来源的事实使复苏的一个主要问题在几分钟内稳定状态。
  • 遵从性和安全性-GitOps更易于满足合规要求,因为它会自动创建一个所有Kubernetes集群变化的审计日志。这使得它可以容易调查问题,并向审计证明安全措施到位。此外,GitOps提供强有力的安全保障,并且能够签署所有更改证明作者和来源。
  • 一致性-GitOps使Kubernetes符合发展发生在其他环境。它提供了一个模型变更管理在传统和原生云环境。

GitOps vs DevOps

GitOps DevOps方法开发过程从两种不同的观点:

  • DevOps是一个管道的过程,主要关注软件开发的操作方面。它是由开发人员和操作人员使用。
  • GitOps发展机制,主要集中在自动化和跟踪环境变化以声明的方式。这是开发者。

下面是几个方面设置DevOps和GitOps分开。

命令式编程和声明式配置

  • DevOps命令式和声明。许多DevOps工具执行显式的部署脚本操作,采取必要的方法。同时,DevOps同样可以应用到集装箱和声明式配置环境。
  • GitOps只允许声明式配置。

集装箱的环境

  • DevOps最常用与裸金属等传统IT基础设施服务器和虚拟机(vm)。它可以处理容器和Kubernetes,但没有GitOps,管理可能是一个挑战。
  • GitOps几乎总是使用在云本机和集装箱环境。

单片和microservices

  • DevOps更适合独立应用程序,与有限数量的组件或应用程序。
  • GitOps最适合大型microservices与数十个或数百个组件的应用程序。

他们能一起工作吗?

  • DevOps能容纳和受益于GitOps开发工作流
  • 组织仅仅关注Kubernetes作为他们的基础设施,GitOps可能就足够了,可能不需要额外的DevOps工具和流程。

GitOps部署策略

部署策略技术开发人员可以使用修改或更新应用程序以最少的停机时间。GitOps使它更容易实现部署策略以一致的方式。下面是一些最常见的部署策略。

轧制策略

滚动部署逐步替换新版本的应用程序实例。它更新一些豆荚,执行准备检查,确认工作时,关闭老的实例。这意味着在重大问题的情况下,可以中止滚动更新,新实例终止并取代当前版本。

金丝雀的部署

一只金丝雀部署是一种策略。它包括引入新版本对于一小部分应用程序用户和观察他们的行为,在一段时间内,可以跨越从几分钟到几周。如果用户反应良好的变化,推出更多用户,直到新的替换旧版本。

相关内容:读我们的导游金丝雀部署(很快)

蓝绿色的部署

在一个蓝绿色的部署,开发人员运行并行应用程序的两个版本。使用负载均衡器或服务路由,他们逐渐转变交通从当前生产版本(绿色)的新版本(蓝色)。在这一点上仍然可以回滚到旧版本由蓝色变为绿色车辆绕行。

当蓝色的版本确认工作,生产路线重新配置为指向,它变成了新的产品版本。然后关闭旧的绿色部署。

A / B部署

一个A / B部署类似于一个蓝绿色的部署,它也并行运行两个版本的应用程序。但是,与蓝绿色,它定义了一个流量的比例,应该去每个版本的示例中,50/50或20/80-and转移流量基于此规则。随着时间的推移,当有更多的信心在新的版本中,交通转移的比例可以增加。

这种方法通常用于实验的不同版本的用户体验。换句话说,两个版本运行相同的后端,但用户界面的一个小变化,和开发团队可以观察到的差异度量用户参与度和转换。

GitOps最佳实践

这里有一些您可以使用的最佳实践来提高你GitOps实现。

  • 计划的分支策略记得的分支策略使用源代码控制存储库在你的环境有直接影响。你必须仔细规划源代码控制分支机构根据环境需要设置的分类。
  • 避免复杂的环境-GitOps是“全有或全无”。是有效的,所有部件必须由一个环境基础设施代码(IaC)工具和配置必须检查到存储库。通过GitOps运行环境中一些组件管理,和其他组件手动或通过其他自动化技术,将会有不可预知的结果。
  • 讨论利用合并请求当合并请求提交,有一个很好的机会对于开发人员讨论变更的含义。建立有效的合并请求程序,用适当的自动化模式,建立了通信协议,在拉请求指定开发人员应该问什么,什么类型的交往是适合早期规划阶段。
  • 当一些打破上游回应——一旦碎了GitOps上游环境部署,这表明有问题的配置用于构建环境。设置监控和触发器来获取这些信号从上游环境。当一些优惠,这应该被视为一个安灯线,停止工作GitOps配置直到问题解决。
  • 政策的代码-GitOps可以而且应该被自动补充政策,结合组织的政策。开放代理(OPA)是一个框架可以用来实现这一目标。政策自动化可以尤其重要,以确保部署环境符合安全性和遵从性需求。
  • 幂等性——无论你开始或你跑多少次声明配置,结果应该是一样的。确保您使用模板引擎和部署系统,保证幂等性。

与Spot.io GitOps

Baidu
map