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 的三个关键步骤的更多相关文章

  1. Linux环境下SolrCloud集群环境搭建关键步骤

    Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...

  2. Linux环境下HDFS集群环境搭建关键步骤

    Linux环境下HDFS集群环境搭建关键步骤记录. 介质版本:hadoop-2.7.3.tar.gz 节点数量:3节点. 一.下载安装介质 官网下载地址:http://hadoop.apache.or ...

  3. Linux环境下ZooKeeper集群环境搭建关键步骤

    ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...

  4. 关于安卓苹果手机安装证书抓https的关键步骤

    苹果有关键步骤!!!

  5. 详细讲解 A/B 测试关键步骤,快来检查下还有哪些疏漏的知识点

    作为一种对照实验方法,A/B 测试通过比较两个 (或多个) 不同版本之间的差异来验证假设是否正确.该方法将特定测试组从实验其余部分中独立出来,从而得出可靠结果.在被测人不知情且测试场景真实的情况下,A ...

  6. spring-cloud-kubernetes背后的三个关键知识点

    在<你好spring-cloud-kubernetes>一文中,对spring-cloud-kubernetes这个SpringCloud官方kubernetes服务框架有了基本了解,今天 ...

  7. 构建和管理有效API市场的关键步骤

    API市场关键要点 各个行业的公司正在寻找通过外部API扩展服务来塑造数字业务的方法.然而,要获得API的真正好处,是需要超越基本的API管理,再到创建API市场,这是一种专注于连接生产者和消费者的专 ...

  8. Datax源码改造关键步骤记录

    Datax源码改造关键步骤记录: 一.作业配置1.一个job配置:reader 和writer 的column 字段必须是所有表共有的:2.reader多张表,writer一个表时,所有reader的 ...

  9. 8个让DevOps转型取得成功的关键步骤

    ​​关注嘉为科技,获取运维新知 在数字化时代,企业需要更快更灵活的交付来支持业务运营,这种迫切的需求促成了DevOps的高速发展,成为了企业获得竞争优势的关键.尽管大家都知道DevOps给业务带来的好 ...

  10. Web服务器集群搭建关键步骤纪要

    前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...

随机推荐

  1. 220514 T2 画画 (二维差分)

    首先我们需要特判只涂了一种颜色的情况: (1)k=1,此时答案就是1:(2)k>1,涂的这种颜色肯定不能是第一个,答案是k-1; 对于其他正常情况,我们对于每个颜色找到一个最小的矩形(这个矩形内 ...

  2. liunx文件定期本地备份、异地备份、删除备份脚本

    导航 一.背景二.依赖功能介绍三.本地备份脚本四.异地备份脚本五.定期删除备份六.github脚本地址 - - - - - - - - - - 分割线 - - - - - - - - - - 一.背景 ...

  3. KubeEdge SIG AI发布首个分布式协同AI Benchmark调研

    摘要:AI Benchmark旨在衡量AI模型的性能和效能. 本文分享自华为云社区<KubeEdge SIG AI发布首个分布式协同AI Benchmark调研>,作者:KubeEdge ...

  4. 手写自定义springboot-starter,感受框架的魅力和原理

    一.前言 Springboot的自动配置原理,面试中经常问到,一直看也记不住,不如手写一个starter,加深一下记忆. 看了之后发现大部分的starter都是这个原理,实践才会记忆深刻. 核心思想: ...

  5. 后端框架的学习----mybatis框架(3、配置解析)

    3.配置解析 1.核心配置文件 2.环境配置(environment) 3.属性(properties) 可以通过properties属性来实现引用配置文件 这些属性可以在外部进行配置,并可以进行动态 ...

  6. 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?

    相信大家在前端开发中都使用过很多前端脚手架,如vue-cli,create-vite,create-vue等:本篇文章将会为大家详细介绍这些前端脚手架是如何实现的,并且从零实现一个create-kit ...

  7. 微服务 Zipkin 链路追踪原理(图文详解)

    一个看起来很简单的应用,可能需要数十或数百个服务来支撑,一个请求就要多次服务调用. 当请求变慢.或者不能使用时,我们是不知道是哪个后台服务引起的. 这时,我们使用 Zipkin 就能解决这个问题. 由 ...

  8. 斑马打印机二维码标签制作(.prn文件)基础简单快速上手

    在工厂生产中,经常需要一线员工在电脑上输入订单号的情况.订单号往往很长,手输容易出错,并且浪费时间,所以常常使用扫码枪扫描二维码的方式输入订单号,本篇就是记录斑马打印机.prn标签模板的制作和使用. ...

  9. nrf52——DFU升级USB/UART升级方式详解(基于SDK开发例程)

    摘要:在前面的nrf52--DFU升级OTA升级方式详解(基于SDK开发例程)一文中我测试了基于蓝牙的OTA,本文将开始基于UART和USB(USB_CDC_)进行升级测试. 整体升级流程: 整个过程 ...

  10. 小样本利器4. 正则化+数据增强 Mixup Family代码实现

    前三章我们陆续介绍了半监督和对抗训练的方案来提高模型在样本外的泛化能力,这一章我们介绍一种嵌入模型的数据增强方案.之前没太重视这种方案,实在是方法过于朴实...不过在最近用的几个数据集上mixup的表 ...