采用GitOps的11大原因
Kubernetes允许我们单纯地使用声明性的配置文件来管理我们的应用部署和其他基础设施组件(例如,我们现在都是YAML开发者)。这使我们能够把所有这些文件放到Git仓库中,然后把它挂到流水线上(Jenkins、GitLab等),流水线会把这些变化应用到集群上,然后就有了GitOps。如果你还不了解GitOps是什么,可以查看我们之前发布过的文章:GitOps初阶指南:将DevOps扩展至K8S

为了使工作正常进行,我们必须确保改变集群的唯一方法是在Git仓库上提交。GitOps并不是专门针对Kubernetes的,同样的原理也可以应用于任何其他声明式配置管理的环境。
可以说,很多企业已经开始采用GitOps了,但现在是业界开始充分认识到其潜力的时候。所以,让我们深入了解一下它如此出色的原因吧!
1、存储环境变更历史记录
只有通过更新相应Git仓库中的配置,才能改变应用环境。这将创建一个完整的状态变化的历史记录,包括谁做了更改和为什么更改的记录。你可以通过正在使用的Git用户界面来读取历史记录。
2、轻松回滚到之前的状态
一旦我们所有的变更都被存储为Git历史记录,就可以很容易地将一个环境回滚到之前的任何状态。通过还原一些commit,我们可以回到以前的工作状态。
3、保障部署安全
一旦对集群的所有更改都通过GitOps repo,用户和持续集成(CI)流程就不需要再访问集群了。这大大降低了攻击面,尤其是还可以减少对Kubernetes API的网络访问。
部署过程无论如何实现,都可以在集群内部运行,并从Git中拉取配置。其对API的访问使用基于角色的访问控制(RBAC)进行限制。这极大地提高了集群的安全性,防止任何恶意的远程更改在API服务器上。
4、轻量化审批程序
在修改生产环境时,开发人员总是不受信任。因此在许多公司中都建立了四眼审批流程(four-eyes approval processes),不论是出于什么原因建立的审批流程,GitOps都提供了一个简单的方法来实现它们。
具体实现方式取决于你使用的Git服务器,但重点是给开发人员在Git repo上创建拉取请求的权利,同时给另一组人审查和合并的权利。大多数Git服务器都有一个很好的UI来检查修改和批准拉取请求——所以这个解决方案不仅便宜,而且对用户也相当友好。
5、模块化架构
GitOps有3个部分:Git repo、部署流程以及一个在Git repo中自动更新版本的过程。这三者可以相互独立演化或替换。
一边是一个组件在Git repo写入,另一边是一个组件在读取。Git repo的结构成为这些组件之间的桥梁。由于这是一个相当松散的耦合,两边可以用不同的方式甚至不同的技术栈来实现。
6、独立于工具的架构
第5点中提到的模块化可以看出GitOps架构是一个可以灵活组装最佳工具的架构。当然,任何流行的Git服务器都可以完成Git部分的工作,FluxCD或ArgoCD可以负责将repo同步到集群。JenkinsX是一个处理这个过程所有部分的工具,包括创建Git repos,并在构建新的Docker镜像时用新版本更新它们。
7、复用现有知识
将 Git 置于部署流程的核心,可以充分利用大多数开发人员和运维人员已经掌握的 Git 知识。不需要新的工具来浏览部署历史或实施审批流程。所有的流程都是用大家都熟悉的工具来完成的。
8、比较不同的环境
当你有一个从开发到用户接受度测试(UAT)再到生产的环境链时,跟踪这些环境之间的差异是一件很麻烦的事情。多亏了存储在Git repos中的声明式配置,它使得处理环境间差异就像比较一组YAML文件一样简单。
我们有非常棒的工具来做这件事,所以这将不再是一个问题。更重要的是,从头开始创建一个新的环境,就像复制和粘贴这些文件到一个新的repo中一样简单。
9、开箱即用的备份
由于你的环境状态存储在Git中,如果Kubernetes上的etcd发生了什么事情,你也永远不会丢失数据。因为它是你集群状态的自然备份。
10、像应用程序代码一样测试你的更改
你可以用测试应用程序代码的方式来测试环境中可能出现的破坏性变化。将更改放在一个分支上,然后在其上运行 CI 流水线。你的 CI 工具将能够运行测试,并根据测试结果将 Git 中的 pull-request 状态设置为绿色或红色。一旦所有的东西都经过测试和审查,你就可以合并到master。
这听起来非常简单,但自动化测试是基础设施管理中经常被忽视的任务。虽然GitOps并没有让它变得更容易,但至少它为你提供了与你在其他地方使用的相同的熟悉工作流程。
11、高可用部署基础设施
部署基础设施保持一致很重要。Git repo服务器通常已经以复制、高可用的方式进行了设置。源代码是所有开发人员在大多数时间都需要访问的东西,所以使用Git作为部署的源码并不会给Git本身增加额外的负担。
采用GitOps的11大原因的更多相关文章
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- 现在就使用HTML5的十大原因
你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因: 它现在还没有被广泛的支持,在IE中不好使,或者你就是喜欢写比较严格的XHTML代码. HTML5是Web开发世界的一次重大的改变,事实 ...
- C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)
C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼) Josee Lajoie(约瑟拉乔伊 ) B ...
- 使用HTML5的十大原因
你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在IE中不好使,或者你就是喜欢写比较严格的XHTML代码.HTML5是web开发世界的一次重大的改变,事实上不 ...
- [转载] 使用HTML5的十大原因
转载自http://www.williamlong.info/archives/3024.html 你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在IE中不 ...
- 【html5】使用 html5 的十大原因
你难道还没有考虑使用 html5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在 ie 中不好使,或者你就是喜欢写比较严格的 xhtml 代码.html5 是 web 开发世界的一次重大 ...
- 高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解
Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...
- 不仅仅是双11大屏—Flink应用场景介绍
双11大屏 每年天猫双十一购物节,都会有一块巨大的实时作战大屏,展现当前的销售情况. 这种炫酷的页面背后,其实有着非常强大的技术支撑,而这种场景其实就是实时报表分析. 实时报表分析是近年来很多公司采用 ...
- 11大Java开源中文分词器的使用方法和分词效果对比
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
随机推荐
- 【Mysql】SpringBoot_2.1.0+Druid_1.1.10 配置数据源监控服务Yml格式
访问地址:localhost:8080/druid 按照这个方法和版本配置没问题 版本或高或低可能会出现不兼容 1.添加依赖 <dependency> <groupId>com ...
- 基于token的会话保持机制
session简介 做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息. 用户通过用户名和密码登陆成功之后,服务器端程序会在 ...
- 【NOI2015】 软件包管理器 - 树链剖分
noi2015 软件包管理器 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...
- python基础 Day5
python Day5 字典 其他数据类型的缺点 列表可以存储大量的数据,但是关联性不强. 列表的查询速度比较慢 其容器的数据类型为dict 其数据类型的分类 可变(不可哈希)的数据类型:list d ...
- 8.hbase写入流程和读取流程
1 hbase写入流程 hbase中无论是新增数据还是修改已有行,其内部流程都是一样的,hbase执行写入时会写到两个地方,write-ahead log 简称wal 也叫hlog 预写式日志 和 M ...
- virt-install 安装系统和启动虚机
安装系统: virt-install -n x1 -r --vcpus --disk path=/home/wangjq/x1.qcow2,size=,format=qcow2,bus=virtio, ...
- 对于CSS里面我之前不太清楚的伪类,我做一些总结
格式: 标签 + : + 参数 +{ 可填背景颜色,字体颜色,鼠标样式,加粗等 } a:hover{ color:#f40;} :link表示鼠标点击之前的样式 :hover表示鼠标放上去的样式 :a ...
- Open MPI 4.0 编译安装
电脑上目前使用的mpi环境是2.1.1版本的openmpi,是我之前直接使用系统的包管理工具安装的.但是系统包版本一般都比较老旧,现在openmpi最新版已经出到了4.0,即将出4.1了,所以我打算升 ...
- Python1--简介及基础语法
0. 简介 Python易于学习的编程语言,有很多现成的第三方库可以调用,不用重复造轮子,老话说:"人生苦短,我用 Python" 1. 安装Python Mac:brew ins ...
- Salesforce LWC学习(二十一) Error浅谈
本篇参考:https://developer.salesforce.com/docs/component-library/documentation/en/lwc/data_error https:/ ...