GitOps:运用DevOps之力实现基础设施自动化

GitOps提供一种自动化基础设施管理方法,已经在众多团队中获得应用的DevOps最佳实践——包括版本控制、代码审查以及CI/CD流水线——都将被囊括于其中。目前,许多公司都在采用DevOps,看中的正是它在提升生产率和软件质量方面拥有的巨大潜力。在这一过程当中,咱们已经找到了自动化软件开发生命周期的方法。可是,当涉及到基础设施的设置和部署时,手动操做的比重仍然至关可观。有了GitOps,团队就能够自动化基础设施配置过程。这是因为在GitOps方法中,咱们可以使用声明将基础设施编写为代码(IaC),然后像存储应用程序开发代码同样将基础设施即代码存储在Git repo当中。git

GitOps如何发挥做用?

GitOps的概念最初是由Kubernetes管理公司Weaveworks所提出,所以关于GitOps的讨论主要是在Kubernetes的背景下进行的。随着总体设施转向运行在容器内的微服务架构,咱们天然须要更多可行的编排平台做为支撑。事实上,基于容器的应用程序也每每拥有极为复杂且难以管理的配置体系。GitOps则经过应用在DevOps领域已经获得实际验证的技术,帮助咱们简化了这一过程。现在,这一思路已经在DevOps支持者中获得普遍承认,也表明着IaC概念的升级模型。其中包含三大主要组成部分:安全

  • 基础设施即代码
  • Pull请求
  • CI/CD

下面具体来看。服务器

基础设施即代码架构

IaC是一种将基础设施以声明文件的形式进行配置和管理,并将其存储为代码的实践。经过利用IaC和版本控制,团队便可轻松优化全部的运营过程。GitOps以IaC的声明性模型为核心,同时也为Kubernetes提供了良好的施展平台。声明性意味着配置更多关注指向预期状态的声明,而不是一组具体命令。例如,在Kubernetes中,你能够在manifest中定义服务所需的Pod数量。以此为基础,系统将根据服务的运行状态自动为其提供Pod,而再也不由工程师编写固定的Pod配置数量。任何符合声明式模型的云原生软件均可以被视为代码。咱们使用AWS CloudFormation(一种声明性工具)来编写AWS基础设施,借此实现基础设施即代码原则。所需的状态将被声明为代码形式,系统则应用更改以自动达到这一目标状态。固然,声明式模型并非实现GitOps的惟一途径。你们也可使用命令式定义环境实现相同的运营效果。框架

Pull请求运维

GitOps概念背后的核心思路,是将版本控制系统视为单一的客观来源。咱们使用Git做为应用程序代码的变动管理系统,也能够将其用于基础架构代码。因此全部的声明文件都托管在统一位置以供协做使用。在此基础之上,咱们得以使用Git的关键概念——操做更改的pull请求。在应用程序开发工做流中,咱们使用一个主分支做为发布分支。开发人员在主分支内建立功能分支。在开发一项特定的功能或故事以后,咱们建立一个pull请求以将其合并回主分支。一样的方法也能在基础设施代码中便捷起效。经过建立pull请求,咱们能够保证代码在被集成至代码库的另外一个分支以前,首先通过完整的代码审查流程。代码审查能够阻止低质量代码进入测试或生产环境,这一点对于基础架构代码来讲尤其重要。经过代码审查得到正式的批准,也将有助于后续的审核和故障排查工做。分布式

Git组织微服务

GitOps的部署过程至少须要两个repo:应用程序repo与环境配置repo。前者包含应用程序的源代码及其部署manifest;后者则包含了整个系统所需的状态,该状态使用声明性规范来对环境中的各项要素加以描述。你能够在代码repo中将环境描述为开发、测试和生产环境,同时包含能够在该环境的特定版本中运行的应用程序和基础设施服务。在基础设施的状况下,主分支能够表示一个环境。咱们能够在功能分支中实现这些更改,然后建立一个pull请求来合并主分支中的变动。经过这种方式,咱们能够在实现协做的同时,以更加透明的方式了解谁执行了哪些更改。由于全部的更改都是在Git中提交完成,所以这也有利于跟踪引起问题的根本缘由。GitOps适用于任何基于Git的系统,包括GitHub、BitBucket或GitLab。其不依赖于任何特定工具或技术。工具

CI/CD测试

为了创建完整的GitOps实现,你还须要一条CI/CD流水线。经过使用自动化的交付流水线,每当Git存储库中发生更改时,你均可以将基础设施更改交付到指定环境当中。这条流水线将你的Git pull请求链接到业务流程系统。当你使用pull请求触发流水线时,业务流程系统将相应执行该任务。GitOps的部署策略有两种方式:push与pull流水线。两者的区别,主要体如今构建基础设施时所采起的环境部署方式之上。

Push流水线

许多流行的CI/CD工具都在使用这种策略。咱们将应用程序的源代码及其部署manifest存储在一个repo当中。当应用程序代码中发生新的更新时,构建流水线将触发。流水线将构建容器镜像并将更改推送到环境。这种策略带来了更高的灵活性,足以支持任意类型的基础设施。固然,这种方法也有缺点,即容许CI/CD工具直接访问你的环境。

在这里插入图片描述

Pull流水线

社区广泛认为,pull流水线方法对GitOps来讲是一种更为安全的实践方案。这种方法引入引入了操做符。操做符属于流水线和业务流程工具之间的组件,它会不断将环境repo中的目标状态与已部署基础设施中的实际状态进行比较。一旦检测到任何更改,则操做符会更改基础设施以适应环境repo。此外,它还能够监控镜像仓库,识别待部署的新版本镜像。正是这一切,让GitOps变得如此特别。在GitOps中,只有在环境repo中发生了更改时,才会引起环境更新。若是实现的基础设施以环境repo中未经定义的任何其余方式发生更改,系统将恢复所作的任何修改。大多数应用程序可能须要同时使用多个环境。GitOps容许您建立多个能够更改环境repo的流水线。您能够在环境repo中使用单独的分支以管理更多环境。面对分支变动,运维人员能够在响应中将此项变动部署到生产环境当中,同时未来自另外一分支的其余变动部署到测试环境。

在这里插入图片描述

GitOps的优点是什么?

DevOps最佳实践

GitOps是一套专一于现有Git工做流、IaC、CI/CD流水线、不可变服务器、跟踪与可观察性最佳实践的模型,也表明着Kubernetes在云原生应用程序管理领域的先进的理念。所以,其技术栈与操做体验可以切实为企业用户带来诸多助益。

持续部署——简化

持续部署意味着更快、更频繁的部署节奏。出于多种不一样考量,例如系统的有状态性、宕机弹性、上游/下游的依赖关系,以及组织内常见的其余过程与依赖项,不少朋友可能发现愈来愈难以创建适当的持续部署机制。GitOps不只可以实现持续部署,同时也让你们摆脱了对大量工具方案的单独管理——这是由于全部操做都发生在版本控制系统以内。做为另外一大助力,部署操做符则负责提供结构和自动化支持。这也提升了生产力并带来更快的MTTD(平均部署时间)。自动化持续部署确保团队天天能够交付30-100倍以上的更改,将平均生产效能提升2-3倍。

Rancher 2.5经过Rancher持续交付(Continuous Delivery)简化了部署和管理。这是一项全新的功能,经过使用Git仓库自动存储和管理应用程序和配置信息,以确保部署的一致性,大大减轻了客户的负担,从而简化跨私有云、公有云、混合云或多云环境的部署流程。

Rancher于2020年推出了海量集群管理项目Fleet,这个项目成为了Rancher持续交付的引擎。Fleet是一个Kubernetes集群控制器,旨在解决全球内成千上万集群的挑战。

低MTTR(平均修复时间)

MTTR是DevOps团队须要衡量的关键指标之一。在微服务架构中,即便是极微小的问题也可能难以修复。因为GitOps将全部更改保存在版本控制系统中,同时辅以自动化管理手段,所以有望显著缩短MTTR。你能够全面了解环境的变化进程,同时极大下降错误恢复难度。

简化Kubernetes管理

即便对Kubernetes不甚了解,开发人员可使用熟悉的工具(如Git)轻松获取Kubernetes升级与功能实现。新手嵌入式开发人员可以很快跟上进度,将本来须要数月的适应期压缩到几天时间。

改进企业总体的标准化水平

你能够在整个企业中创建起透明的端到端工做流,这要归功GitOps提供的用于呈现应用程序、软件和Kubernetes附加组件修改的呈现框架。Git还可以全面重现你的各项操做活动。

应用GitOps的先决条件

创建稳定的代码审查与测试过程

深刻检查代码更改将帮助咱们准确识别某些重要操做,例如添加全局变量,借此防止低质量代码被发布到测试甚至生产环境当中。以此为基础,您能够经过pull请求提交验证过的代码,且严格禁止开发人员直接提交更改。一旦pull请求完成审查与合并,便可触发流水线。这是也维护高标准代码、进而加强系统稳定性的第一步。

测试,测试,仍是测试

GitOps的介入意味着整个自动化水平都将提高到新的高度,这也要求咱们对流水线发布的应用程序进行完全测试。尽管GitOps能帮助咱们相对轻松地完成回滚,但发布通过良好测试的高质量代码才是真正提高进程可靠性的最佳途径。

监控为王

GitOps可以重播操做过程,持续跟踪系统状态并加以改进,最终据此执行发布与回滚。严格的监控体系能够帮助你识别并防止配置中出现任何非预期的漂移与系统更改。所以,在开始使用GitOps以前,请检查你的监控技能并着手增强,确保其有能力处理这种变化。

拥抱新文化

传统的流程约束以及较长的发布时间只会拖慢业务节奏。全面拥抱DevOps文化,意味着咱们应当全面利用最佳战略并帮助团队理解开发和运维行动的价值。与此同时,开发与运维团队必须联手协做,创建起总体稳定的基础设施,更快速、更顺畅地运行应用程序,进而提高系统管理效率。而DevOps文化的欠缺将严重阻碍咱们享受GitOps带来的好处。

为何采用GitOps?

GitOps是一种强大的工做流模式,能够帮助您高效治理云基础设施。GitOps能够为工程团队带来诸多优点,极大加强系统的协调能力、透明度、稳定性与持久性。

原文连接: https://microtica.com/blog/gi...

文章来源:分布式实验室,点击查看原文

相关文章
相关标签/搜索