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

GitOps提供一种自动化基础设施治理办法,曾经在泛滥团队中失去利用的DevOps最佳实际——包含版本控制、代码审查以及CI/CD流水线——都将被囊括于其中。目前,许多公司都在采纳DevOps,看中的正是它在进步生产率和软件品质方面领有的微小后劲。在这一过程中,咱们曾经找到了自动化软件开发生命周期的办法。然而,当波及到基础设施的设置和部署时,手动操作的比重依然相当可观。有了GitOps,团队就能够自动化基础设施配置过程。这是因为在GitOps办法中,咱们可能应用申明将基础设施编写为代码(IaC),而后像存储利用程序开发代码一样将基础设施即代码存储在Git repo当中。

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…

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

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据