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. Ubuntu20.04和Docker环境下安装Redash中文版

    创建Ubunt20.04虚拟机,请参考:https://www.linuxidc.com/Linux/2020-03/162547.htm 一.安装基础环境: # 1.更换APT国内源 sudo se ...

  2. 某宝抢购taobaosnap开发与实现

    某宝抢购脚本 Taobaosnap Taobaosnap is a completely open tool, which is used to buy goods in seconds on Tao ...

  3. 《Generative Adversarial Networks for Hyperspectral Image Classification 》论文笔记

    论文题目:<Generative Adversarial Networks for Hyperspectral Image Classification> 论文作者:Lin Zhu, Yu ...

  4. 原生Redis跨数据中心双向同步优化实践

    一.背景 公司基于业务发展以及战略部署,需要实现在多个数据中心单元化部署,一方面可以实现多数据中心容灾,另外可以提升用户请求访问速度.需要保证多数据中心容灾或者实现用户就近访问的话,需要各个数据中心拥 ...

  5. 「国产系统」Tubian 0.1,兼容Windows和Android的GNU/Linux系统!

    Tubian 0.42已发布:https://www.cnblogs.com/tubentubentu/p/16745926.html Tubian是我的自用系统整理而成的Linux发行版,基于Deb ...

  6. .net程序员的android studio 初体验 (环境设置2022年10月)

      很久以前用DevExtreme写的一个Hybird APP要添加蓝牙打印功能,但是用来打包APP的phonegap被adobe关闭了,所以,只能自己用cordova去打包安卓APP,不得已,研究了 ...

  7. vulnhub靶场之THE PLANETS: EARTH

    准备: 攻击机:虚拟机kali.本机win10. 靶机:THE PLANETS: EARTH,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnh ...

  8. 文心ERNIE-ViLG,你的免费插图画师

    你是否想拥有一个专属画师,免费为你的优美文字插上几幅优美的插图?如今依然实现 最近AI作画确实很火,在DALL-E和Imagen崭露头角之后,ERNIE-ViLG.Stable-Diffusion(S ...

  9. AspNetCore中 使用 Grpc 简单Demo

    为什么要用Grpc 跨语言进行,调用服务,获取跨服务器调用等 目前我的需要使用 我的抓取端是go 写的 查询端用 Net6 写的 导致很多时候 我需要把一些临时数据写入到 Redis 在两个服务器进行 ...

  10. 代码块及final关键字的使用

    1.代码块的作用:用来初始化类.对象 2.代码块如果有修饰的话,只能使用static. 3.分类:静态代码块 vs 非静态代码块 4.静态代码块 内部可以有输出语句 随着类的加载而执行,而且只执行一次 ...