GitOps—用于基础设施自动化的DevOps

GitOps提供了一种自动化和管理基础设施的方法。它通过许多团队已经应用的DevOps最佳实践来做到这一点,例如版本控制、代码评审和CI/CD管道。

由于DevOps在提高生产率和软件质量方面的巨大潜力,许多公司一直采用DevOps。在这个过程中,我们已经找到了自动化软件开发生命周期的方法。然而,在基础设施设置和部署方面,它仍然主要是一个手动过程。

使用GitOps,团队可以自动化基础设施配置过程。这是因为可以使用声明文件将基础结构编写为代码(IaC)。我们可以将它们存储在Git存储库中,就像存储应用程序开发代码一样。

GitOps是如何运作的?

GitOps的概念最初是由Kubernetes管理公司Weaveworks提出的。所以关于GitOps的讨论主要是在Kubernetes的背景下进行的。向在容器中运行的微服务的转换带来了对编排平台的需求。基于容器的应用程序的供应和管理可能很复杂,也很困难。GitOps通过应用已在DevOps世界中验证过的技术来帮助简化这一点。

如今,这个想法在DevOps的爱好者中很流行,代表了IaC概念的升级模型。它围绕三个主要部分展开:
基础设施即代码
拉取请求
CI/CD

基础设施即代码

IaC是一种将基础设施作为声明文件(存储为代码)提供和管理的实践。通过利用IaC和版本控制团队可以优化所有的操作过程。

GitOps以IaC的声明式模型为中心。这就是为什么Kubernetes是一个很好的实现示例。声明性意味着配置更多的是对预期状态的声明,而不是一组命令。例如,在Kubernetes中,您可以在清单中定义服务所需的pods数量。系统会自行处理。工程师不需要编写能够达到所需pod编号的命令式脚本。

任何符合声明式模型的云本地软件都可以被视为代码。我们使用AWS CloudFormation来编写AWS基础设施,这是一个声明性工具。这意味着我们可以将基础设施本身视为代码。将所需状态声明为代码。系统应用变更来实现自动化状态。

话虽如此,声明式模型在GitOps中并不是必须的。命令式定义的环境也可以这样做。

 

拉取请求

GitOps概念背后的主要思想是版本控制系统是事实的唯一来源。我们使用Git作为应用程序代码的变更管理系统。我们还可以在基础设施代码中使用它。因此,整个声明文件集都在一个可以协作的地方。这使我们能够使用Git的关键概念——操作更改的pull请求。

在应用程序开发工作流中,我们使用一个主分支作为发布分支。开发人员从主分支创建功能分支。开发一个特定的特性或故事,完成后创建一个pull请求,将其合并回主分支。同样的方法对于基础结构代码也很方便。

在我们将代码集成到代码基的另一个分支之前,创建一个pull request使代码能够经过一个代码审查过程。代码检查可以阻止坏代码进入测试或生产环境。这对于基础架构代码甚至更为重要。通过代码审查获得正式的批准对审计和故障排除有很大帮助。

Git组织

GitOps中的部署过程至少需要两个repo:应用程序repo和环境配置repo。第一个包含应用程序的源代码及其部署清单。第二个包含对每个环境使用声明性规范描述的整个系统的期望状态。您可以将您的环境描述为代码存储库中的开发、测试、生产,其中包含可以与该环境的特定版本一起运行的应用程序和基础设施服务。

在基础设施的情况下,主要分支可以表示一个环境。我们可以在特性分支中实现变更。然后创建一个pull request来合并主分支中的更改。通过这种方式,我们可以实现协作,同时对谁执行了哪些更改保持透明。这也有利于问题跟踪到根源,因为所有更改都是在Git中提交的。

GitOps可用于任何基于Git的系统,如GitHub、BitBucket或GitLab。它不依赖于任何工具或技术。

CI/CD

要实现完整的GitOps,您需要一个CI/CD管道。使用自动交付管道,每次Git存储库中发生更改时,您都可以将基础结构更改传递到指定的环境中。
这里的管道用于将Git pull请求连接到编排系统。当您使用pull请求触发管道时,业务流程系统将执行该任务。

GitOps部署策略有两种可能:push管道和pull管道。它们之间的区别在于确保部署环境与所需的基础设施相似的方式。

Push管道

许多流行的CI/CD工具都在使用这种策略。我们将应用程序的源代码及其部署清单存储在一个存储库中。当应用程序代码中发生新的更新时,生成管道将触发。管道构建容器映像并将更改推送到环境中。这种策略带来了更大的灵活性,因为它可以支持任何类型的基础设施。缺点是它允许CI/CD工具访问您的环境。

基于push的DevOps部署

 

Pull管道

社区认为Pull管道方法对GitOps来说更安全的实践。通过这种方法,引入了运算符。操作符是管道和编配工具之间的一个组件。它不断地将环境存储库中的目标状态与部署基础设施中的实际状态进行比较。操作员如果检测到任何更改,就更改基础结构以适应环境存储库。另外,还可以监视映像注册表,以确定要部署的映像的新版本。这就是GitOps如此特别的原因。

基于pull的DevOps部署


在GitOps中,只有在环境存储库中发生更改时才会进行环境更新。如果实现的基础设施以未在环境存储库中定义的任何方式更改,系统将恢复所做的任何修改。

对于大多数应用程序,您可能需要多个环境。GitOps允许您创建多个可以更改环境存储库的管道。您可以在环境存储库中使用不同的分支来管理更多的环境。操作员可以通过部署到生产环境来响应一个分支的更改,也可以通过部署到测试来响应另一个分支。

GitOps的优势何在?

使用DevOps最佳实践

由于GitOps是一个专注于Git工作流、IaC、CI/CD管道、不可变服务器、跟踪和可观察性等现有最佳实践的模型,它代表了Kubernetes云原生应用程序管理的更高级状态。因此,公司目前的经验和经验可以提供很多服务。

持续部署—简化

持续部署意味着更快、更频繁地部署。由于不同的考虑因素,如系统的状态性、抗停机能力、上游/下游依赖关系以及许多其他组织相关流程和依赖关系,正确的持续部署一直非常具有挑战性。

GitOps允许您这样做,而不必管理一堆工具,因为所有的事情都发生在版本控制系统中。由于使用了部署操作,它提供了结构和自动化。

这也提高了生产率和更快的MTTD(平均部署时间)。自动化的持续部署确保团队每天可以发布30-100倍的更改,从而将平均生产性能提高2-3倍。

降低平均修复时间(MTTR)

MTTR是DevOps团队应该度量的关键指标之一。在微服务体系结构中,即使是很小的问题也很难修复。由于GitOps在版本控制系统中保留了所有更改,并且管理是自动化的,因此可以显著降低MTTR。您已经全面了解了环境是如何变化的,并且错误恢复变得非常容易。

简化Kubernetes管理

在不深入了解Kubernetes的情况下,开发人员可以使用熟悉的工具(如Git)来更轻松地处理Kubernetes的升级和特性。新的嵌入式开发人员将很容易跟上速度,并在几天内而不是几个月内活跃起来。

改进了整个公司的标准化

因为GitOps有一个用于呈现应用程序、软件和Kubernetes附加修改的框架,所以在整个企业中都有透明的端到端工作流。Git还可以完全复制操作活动。

如何准备GitOps?

建立一个稳定的代码评审和测试过程。仔细检查代码更改可以指出一些明显的操作,例如添加全局变量。它可以防止坏代码被释放。然后,您可以通过pull请求提交经过验证的代码,不允许开发人员直接提交任何更改。一旦请求被检查和合并,就可以触发管道。这是维护高标准代码和随后系统稳定性的第一步。

加入GitOps意味着拥有高水平的自动化,这需要对管道发布的应用程序进行彻底的测试。尽管GitOps允许相对容易地回滚,但发布经过良好测试用例的好代码会使流程更加可靠。

重点监控

GitOps允许可重复的操作过程,改进可跟踪的系统状态、发布和回滚。仔细的监视可以帮助您识别和防止配置中任何意外的偏移和系统更改。所以,在开始使用GitOps之前,回顾一下你的监控技能,并加强你的监控能力,让他们能够应对这种变化。

 

接受文化

具有长发布时间的传统流程约束只会阻碍您。采用DevOps文化意味着利用最好的策略,帮助团队理解开发和运营行动的价值。与此同时,它们必须一起协作,以创建一个整体稳定的基础设施,更快、更平稳地执行应用程序,并有效地管理系统。缺乏DevOps文化会妨碍你享受GitOps的好处。

 

为什么是GitOps?

GitOps是一种非常好的工作流模式,它可以帮助你高效地处理云基础设施。GitOps可以为工程团队提供许多优势,包括更好的协调、透明度、稳定性和系统的耐用性。

 

原文链接:https://dzone.com/articles/gitops-devops-for-infrastructure-automation

原文地址:https://www.cnblogs.com/ErinLee/p/14116060.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


前言我们于2022年5月宣布推出 AmazonDevOpsGuruforServerless ,这是面向AmazonDevOpsGuru https://aws.amazon.com/devops-guru/的全新功能。通过此功能,开发人员能够提高无服务器应用程序的运行性能和可用性。该产品链接可点击:https://aws.amazon.com/devops-guru/fe
GIT、GITLAB、GITHUB、GITLIBGit是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越...
初识JFrog Artifactory背景在软件项目开发中,一个项目常常依赖于大量的外部库,而这些外部库又在不断的进行版本更新,特别是在当前微服务开发越来越流行的情况下,一个服务依赖于多个服务,如何管理依赖库以及依赖版本,确保开发有序进行呢?JFrog ArtiFactoryArtiFactory是一款二进制存储管理工具,用来管理构建构建工具(如:gradle)等所依赖的二进制仓库,以方...
在删除文件夹的时候,可能会遇到文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开,请关闭该文件夹或或文件,然后重试。这类无法关闭删除文件夹的情况,如下图所示。 解决这个的关键是,找到是哪个程序在使用该文件夹,把这个程序关闭掉就行了。 但有时说实在的并不好找。 下面来介绍一个方便的找到这些程序的方法。 首先按ctrl+shitf+esc快捷键,打开任务管理器。然后...
xcopy 若目标盘上不存在此子目录,而在目标盘的结束符又不以""为结束,则将提示:does destination specify a file name or directory name on the target[f=file,d=directory]?在目标盘上创建文件[按下]还是创建子目录[按下d] ?应选择d键如何在命令中指定copy的是一个文件或者目录?而不用再手动输入F或...
DevOps软件开发工艺解读随着业务复杂化和人员的增加,开发人员和运维人员逐渐演化成两个独立的部门,他们工作地点分离,工具链不同,业务目标也有差异,这使得他们之间出现一条鸿沟。而发布软件就是将一个软件想从鸿沟的这边送去那边,这之中困难重重。另一方面,行业竞争更加激烈,无论是客户还是公司自身,都要求软件能快速发布,频繁修改,而上边所说的这种隔阂,阻碍了开发团队的生产力,成了企业亟待解决的难题。面对...
创建任务创建任务比较简单,这里我们创建自由风格项目:General信息这里填写项目或任务的基本信息,如下:GitBucket这里我们用到的就以下两点,一个是参数化构建:构建的时候可以指定部分参数,比如这里我们这里指定要构建的分支作参数,第二个是丢弃旧的构建:这样每次构建都会丢弃之前历史构建,防止jenkins构建项目过多导致内存泄漏等问题:源码管理源码管理主要是填写我们要构建的...
一、在任务设置-构建触发器模块,选中“Build periodically”二、然后在日程表里输入你的定时构建时间,输入的时间语法参考如下:1、时间字段遵循cron的语法,每行由TAB或空格分隔的5个字段组成:MINUTE HOUR DOM MONOW DOW - 分钟:小时内的分钟数(0-59) - 小时 :一天中的小时(0-23) - DOM:月份的日子(1-31) ...
DevOps进阶(九)使用assembly plugin实现自定义打包assembly plugin的使用方式比较简单,主要有:1. 修改pom.xml pom.xml中设置如下:<build> <plugins> <plugin> <artifactId&g
<h2 id="1-操作环境"><strong>1. 操作环境</strong></h2>1. Windows:win72. JenkinsJenkins 1.6193. JavaJDK_1.7.0_64bit.exe4. Tomcatapache-tomcat-8.
在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。(2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。一.find命令基本格式:find path expres......
走近DevOps工程师我们之前已经听到很多谈论DevOps和DevOps世界的最新趋势的事情,但是就DevOps工程师本身,到底干些什么呢?在最纯粹的存在形式上来说,DevOps工程师是为了加快开发和运营团队之间的交付效率而存在的桥梁。DevOps工程师在软件生命周期中能带来什么?在传统的交付周期中,软件开发人员会在经年累月的编写代码后,将软件交给QA团队进行测试,然后将最终版本交给运营...
1、关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit。例如我jenkins的地址http://localhost:8080/,那么我只需要在浏览器地址栏上敲下http://localhost:8080/exit 网址就能关闭jenkins服务.2、重启Jenkieshttp://localhost:8080/restart3、重新加载配置信息http...
   我们在执行Jenkins的项目构建的时候一般都是通过web管理界面中的”构建”来执行项目构建操作,但是除此之外我们还可以通过项目配置中的”构建触发器”来触发构建操作,其中”构建触发器”有一种方式是通过配置令牌远程触发项目构建;要启用Token(令牌)远程触发项目构建首先要保证Jenkins服务安装了build-token-root 插件,...
maven三种打包插件maven有多种可以打包的插件,如下: plugin function 官网 maven-jar-plugin maven 默认打包插件,用来创建 project jar maven-shade-plugin 用来打可执行包,executable(fat) jar http://maven.apache.org/plug...
Linux下查看和添加环境变量$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。编辑你的 PATH 声明,其格式为:PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后......
贾磊:高级质量经理&敏捷教练曾就职于外企、国企、大型上市企业等,担任过测试工程师、测试经理、项目经理、敏捷教练、质量总监、高级质量经理等岗位。是一名敏捷变革的爱好者和践行者。爱好网球、羽毛球。正文原文链接:https://www.scaledagileframework.com/continuous-explorati
在IT流行语的字母组合中,DevSecOps是一个很容易让人混淆的缩写。DevSecOps是一个特定工具吗?是否有DevSecOps流程或最佳实践?DevSecOps应该成为内部IT部门的优先事项,还是更广泛的公司理念?如果一个公司已经利用了DevOps的流程和技术栈,那么它应该升级到DevSecOps吗?或者这只
企业项目开发流程商城1.1B2C直销商城商家与会员直接交易(BusinessToCustomer)1.2B2B批发商城商家与商家直接交易1.3B2B2C购物平台商家和会员在另一个商家提供的平台上面进行交易1.4C2B定制商城会员向商家发起定制商品的需求,商家去完成。1.5O2O线上线下
jenkins清除工作空间报错 错误如下: Error:WipeOutWorkspaceblockedbySCM   解决方法:进入jenkins服务器,进入workspace,手动rmcd/var/jenkins_home/workspace  ===================注释==================如果你的启动命令如下:【进行了外部目录的挂载