实施 GitOps 的三个关键步骤
GitOps 是一种自动化和管理基础架构和应用程序的模型,通过许多团队已经使用的相同 DevOps 最佳实践来形成的模型,例如版本控制、代码审查和 CI/CD 流水线。在实施 DevOps 时,我们找到了自动化软件开发生命周期的方法,但在基础设施设置和部署方面,仍然依靠手动过程。借助 GitOps,团队可以自动化基础架构配置过程,同时能够编写 IaC、在 Git 存储库中对代码进行版本控制,以及将持续部署原则应用于云交付。
许多公司一直在采用 GitOps,因为 GitOps 具有提高生产力和软件质量的巨大潜力,同时它也最适合开发基于容器化和微服务的云原生解决方案的企业。
GitOps 如何优化开发运维环境
GitOps 带来的更好的基础设施自动化,创造了为应用程序开发人员开发“自助服务”的机会。熟练的开发人员可以使用基础设施即代码来声明他们的云资源需求,这成为基础架构的理想状态,因为集中存储并作为代码中规定的要求与实时环境的实际状态之间的不可变参考点。自助服务方法正在解放开发人员,提高了开发人员的工作效率,使他们能够专注于开发和创新,并更快地将应用程序推向市场。此外,自助服务避免了当开发人员和运营商需要协商资源时可能产生的一些问题与矛盾。
另一方面,人们经常误认为运维自动化程度的提高意味着运维团队需要的人员更少,并且运维在流水线中的作用被边缘化了。然而并非如此,我们相信 GitOps 和内部开发人员平台等现代方法为运维团队提供了更多机会来提高他们的技能并为企业创造更多价值。运维团队实际使用的技术可能会有所不同。在某些情况下,可能只是一个 PaaS 解决方案。在其他情况下,可能是各种工具的组合从而创建适合企业需求的定制平台。这使运维人员能够对基础设施资源和架构施加更大的影响和控制,并创建“护栏”,强制采用简单、高效和标准化的方法来部署云原生应用程序。
GitOps 有助于改善开发人员和运维团队之间的协作,提高他们的生产力,并提高部署频率。GitOps 使开发人员能够在无需了解底层基础架构的情况下贡献功能,从而有效提高了开发人员的体验。同时,它通过代码审查和批准来控制操作。通过这些改进,团队可以更快、更安全地发布软件,从而保持企业在市场中的地位。
实施 GitOps 的三个关键步骤
想要获得在公司中实施 GitOps 模型的最显著优势,例如整体工作流程的标准化和一致性,建议企业考虑以下事项。
一切皆代码(Everything as Code)
- 声明 IaC。
- 使用 Git 存储库进行 IaC 开发。
- 将作为应用程序代码生命周期一部分的实践复制到基础架构代码中。
- 使用 Docker 和 Kubernetes 等技术,将环境、版本、配置和依赖项定义为代码,并确保它们在运行时得到执行。
- 逐渐将 GitOps 模型扩展到任何可以定义为代码的事物,例如安全性、策略、合规性和基础设施之外的所有操作。
图片来源:Microtica
声明式代码提高了可读性和维护性。CloudFormation、Terraform、Pulumi 和 Crossplane 是一些可用的声明性语言,企业可以尝试使用这些语言来定基础架构的外观配置。当一切都定义为代码时,可以使用 Git 存储库进行开发并探索版本控制、协作和审计等优势。
审查程序
正确的 Git 流程包括:
- 主分支,通常代表一个环境,如 dev、test、stage、prod 和在该环境上运行的状态。
- 当开发人员需要对代码进行更改时,他们会从主分支创建一个新分支。
- 当更改准备就绪时,开发人员创建一个拉取请求,该请求应由操作人员审查以验证和批准。安全和合规专家也可以参与此阶段以正确验证环境状态。
- 一旦获得批准,代码就可以合并到主分支中并交付给测试或生产。
- 使用此工作流程,可以跟踪谁进行了哪些更改并确保环境具有正确的代码版本。
图片来源:Microtica
如果企业已经通过使用功能分支和拉取请求来利用 Git 流程系统,那就不需要为新的 GitOps 工作流程投入太多。此外,由于基础架构(和其他操作)被定义为代码,企业将能够实施相同的代码审查实践。
独立的构建和部署过程(CI 和 CD)
- CI 流程负责构建应用程序代码并将其打包到容器镜像中。
- CD 过程执行自动化以使最终状态与系统的期望状态一致,如存储库代码中所述。
最终,GitOps 将 CI 和 CD 视为两个独立的流程——CI 作为开发流程,CD 作为运营流程。 通常用于分离这些进程的 GitOps 方法是引入另一个 Git 存储库作为中介。这个 repo 包含关于环境的信息,每次提交都会触发部署过程。在流水线和编排工具之间有一个操作器组件。操作员不断地将环境存储库中的目标状态与已部署基础设施中的实际状态进行比较。如果操作员检测到任何更改,则会更改基础架构以适应环境存储库。此外,它还监控镜像仓库以识别要部署的新版本镜像。这样,CI 过程就不会触及底层基础设施(例如,Kubernetes 集群)。
图片来源:Microtica
将构建流水线与部署流水线分离是防止错误配置的有力保护措施,有助于实现更高的安全性和合规性。
结论
使用 GitOps,企业可以自动化基础架构配置过程,并将 Git 用作基础架构的单一真实来源。因此,要创建成功的 GitOps 模型,需要对环境进行声明性定义。建议企业团队最好具备拉取请求工作流程,以便在基础架构代码上进行协作并创建操作更改。资深 DevOps 工程师和安全专家随后审查拉取请求以验证更改并在一切正常时将它们合并到主分支中。企业需要使用 CI/CD 自动化来供应和配置底层环境以及部署定义的代码,以确保完整的 GitOps 实施。
最后,公司内部应当培养一种支持性的文化。GitOps 流程很自然地形成了一种结构,在这种结构中,开发人员可以从自助服务基础设施资源中获得更高的自动化程度,而运维工程师可以在过程中扮演更有影响力的角色。
参考链接:
https://danielkummer.github.io/git-flow-cheatsheet/
https://dzone.com/articles/3-steps-to-developing-a-successful-gitops-model
实施 GitOps 的三个关键步骤的更多相关文章
- Linux环境下SolrCloud集群环境搭建关键步骤
Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...
- Linux环境下HDFS集群环境搭建关键步骤
Linux环境下HDFS集群环境搭建关键步骤记录. 介质版本:hadoop-2.7.3.tar.gz 节点数量:3节点. 一.下载安装介质 官网下载地址:http://hadoop.apache.or ...
- Linux环境下ZooKeeper集群环境搭建关键步骤
ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...
- 关于安卓苹果手机安装证书抓https的关键步骤
苹果有关键步骤!!!
- 详细讲解 A/B 测试关键步骤,快来检查下还有哪些疏漏的知识点
作为一种对照实验方法,A/B 测试通过比较两个 (或多个) 不同版本之间的差异来验证假设是否正确.该方法将特定测试组从实验其余部分中独立出来,从而得出可靠结果.在被测人不知情且测试场景真实的情况下,A ...
- spring-cloud-kubernetes背后的三个关键知识点
在<你好spring-cloud-kubernetes>一文中,对spring-cloud-kubernetes这个SpringCloud官方kubernetes服务框架有了基本了解,今天 ...
- 构建和管理有效API市场的关键步骤
API市场关键要点 各个行业的公司正在寻找通过外部API扩展服务来塑造数字业务的方法.然而,要获得API的真正好处,是需要超越基本的API管理,再到创建API市场,这是一种专注于连接生产者和消费者的专 ...
- Datax源码改造关键步骤记录
Datax源码改造关键步骤记录: 一.作业配置1.一个job配置:reader 和writer 的column 字段必须是所有表共有的:2.reader多张表,writer一个表时,所有reader的 ...
- 8个让DevOps转型取得成功的关键步骤
关注嘉为科技,获取运维新知 在数字化时代,企业需要更快更灵活的交付来支持业务运营,这种迫切的需求促成了DevOps的高速发展,成为了企业获得竞争优势的关键.尽管大家都知道DevOps给业务带来的好 ...
- Web服务器集群搭建关键步骤纪要
前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...
随机推荐
- JavaWeb505错误,IDEA版问题解决
问题描述: 在学习JavaWeb的过程中,使用JSP文件转至servlet文件的过程中,发现无论如何都无法打开文件 JSP文件代码 <%@page contentType="text/ ...
- 关于history.back()、history.go()回退但无法刷新页面的问题
window.history.back(); 这样确实可以做到后退的功能,但是项目中,常常并不只是后退就能完成需求,往往需要在后退的同时,刷新后退的页面信息,比如后退到首页同时刷新首页的最新数据,这样 ...
- Linux基础_3_文件/文件夹权限管理
注:权限遮罩码: 控制用户创建文件和文件夹的默认安全设置,文件默认权限为666-umask的值,文件夹默认权限为777-umask的值. root默认0022,普通用户默认0002. 文件的默认权限不 ...
- 1、小程序Vant_WebApp组件库的安装步骤和简单使用
Vant 1.小程序对于npm的支持 目前,小程序当中已经支持使用npm安装的第三方包,通过使用这些第三方包,我们可以提高对小程序开发的效率,但是在小程序当中使用所谓的npm包有如下的三个限制 不能支 ...
- VS2022连接Oracle数据库所需包和连接字符串
VS连接ORACLE数据库 l VS2022连接ORACLE数据库时,需要引入Oracle.ManagedDataAccess.Core包. l 引入方式:打开VS2022==>项目==&g ...
- LVS之NAT、DR、TUNNEL实验
1.LVS-NAT规则+WRR算法 服务器 IP地址 作用 系统版本 RS1 10.0.0.8/24GW:10.0.0.101 网站服务器 Rocky8.6 RS2 10.0.0.18/24GW:10 ...
- Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
PostgreSQL 高可用数据库的常见搭建方式主要有两种,逻辑复制和物理复制,上周已经写过了关于在Windows环境搭建PostgreSQL逻辑复制的教程,这周来记录一下 物理复制的搭建方法. 首先 ...
- 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割
前言 前面给大家介绍了使用LabVIEW工具包实现图像分类,目标检测,今天我们来看一下如何使用LabVIEW实现Mask R-CNN图像实例分割. 一.什么是图像实例分割? 图像实例分割(Instan ...
- mybatis-核心配置文件讲解
核心配置文件详解 核心配置文件中的标签必须按照固定的顺序(有的标签可以不写,但顺序一定不能乱): properties.settings.typeAliases.typeHandlers.object ...
- scrapy 如何使用代理 以及设置超时时间
使用代理 1. 单文件spider局部使用代理 entry = 'http://xxxxx:xxxxx@http-pro.abuyun.com:xxx'.format("帐号", ...