你好,我是王炜。
这节课,我想和你共享一下 GitOps 的历史和开展进程。
时间回到 2017 年,一家做 Kubernetes 解决计划的草创公司 Weaveworks 首次提出了 GitOps,在那个 DevOps 盛行的时代,GitOps 绝对是具有创造性的。Weaveworks 对 GitOps 的界说是:利用云原生东西和云服务进行运用程序布置和办理的最佳实践,定位是 DevOps 的进一步扩展。
除了给出界说,Weaveworks 还开源了 FluxCD。没错,它就是现在和 ArgoCD 竞争的 CNCF 结业项目。它们的效果都是监听 Git 库房的改变,和集群内的对象进行比照,并主动运用有差异的部分。
不过,需求注意的是,GitOps 并不等于 FluxCD 或许 ArgoCD,它代表的是一种工程实践的办法。那么,为什么这个办法会成为运用交给的事实规范呢?究竟要怎样理解 GitOps,相比较传统的交给进程,它一起的优势是什么?
首先,咱们需求先理解 GitOps 究竟是什么?
GitOps 是什么?
根据 Weaveworks 的总结,咱们能够简略地把 GitOps 概括为下面两件事。
- 它是一种办理模型,也是一种云原生技能,负责为运用程序的布置、办理和监控供给一致的最佳实践。
- 它供给了一种完结开发者自助发布的途径,一致了开发团队和运维团队。
更进一步,GitOps 为开发者供给了持续布置的规范,它以开发者为中心,为开发者供给根底设施的办理和运维办法。它经过运用开发者现已熟悉的东西,例如 Git 来办理 Kubernetes 集群,完结运用交给。
Git 库房承担了根底架构和运用程序“单一事实来历”的职责,经过 Git 库房,开发者能够运用他们熟悉的推送、拉取和 Pull Request 流程来对根底架构和运用进行修正。
GitOps 的 4 个准则
不过,任何计划都需求有一个规范,为了建立职业内的 GitOps 规范,由 CNCF 牵头,2020 年 GitOps 作业组成立了,开始的作业组由 Weaveworks、微软、GitHub 和亚马逊等公司组成。作立作业组之后的第一步,他们发动了 OpenGitOps 项目,它目前是 CNCF Sandbox 项目。
此外,GitOps 作业组还拟定了 GitOps 的基本准则,它们分别是:
- 声明式
- 版别化和不可变
- 主动拉取
- 持续和谐
让咱们来分别介绍一下这几个基本准则。
准则一:声明式
声明式是完结 GitOps 的核心根底。在 GitOps 中,一切东西有必要是声明式的并将 Git 作为单一来历,运用程序能够十分方便地布置到 Kubernetes 集群中,最重要的是,当呈现渠道级毛病时,你的运用能够随时布置到其他的规范渠道上。
准则二:版别化和不可变
有了声明式的协助,根底设施和运用的版别能够映射为 Git 源码对应的版别,你能够经过 Git Revert 随时进行回滚操作。更重要的是 Git 库房不会跟着时间的推移呈现版别改变。
准则三:主动拉取
一旦将声明式的状态合并到 Git 库房中,也就意味着提交会主动运用到集群中。这种布置方法安全且高效,布置进程无需人工干预,因为整个进程是主动化的,且不存在人工运转指令的步骤,这就杜绝了人为过错的可能性。当然,为了安全起见,你也能够在布置进程加入人工批阅环节。
准则四:持续和谐
“和谐”进程实际上依赖于 FluxCD 或许 ArgoCD 这些操控器,它们会定时主动拉取 Git 库房并比照它和集群的差异,然后将差异运用到集群中,这样能够确保整个体系能够进行自我修正。
GitOps 的优势
咱们知道,当有新的内容提交到 Git 库房的时分,GitOps 流水线会主动对根底设施和运用进行修正。但实际上,背面的机制比看起来要杂乱得多。GitOps 东西能够主动对根底设施的状态以及 Git 代码库房的界说进行比照,然后当状态不一致的时分提示并主动同步。
总结来说,GitOps 的优势首要体现在 5 个方面:
- 提升发布功率
- 优化开发者体会
- 更高的稳定性和可靠性
- 规范化和一致性
- 更强的安全性
优势一:提升发布功率
GitOps 显著降低了软件发布所需求的时间。Weaveworks 估计,团队每天的发布次数提升了 30 到 100 倍,开发功率提升了 2-3 倍。
优势二:优化开发者体会
GitOps 流水线包括 CI 构建进程,对开发者屏蔽了 Kubernetes 内部杂乱的作业原理,开发人员只需求熟悉 Git 的运用就能够直接操控 Kubernetes 的更新。此外,GitOps 也对新手工程师十分友爱,降低了开发门槛。最终,GitOps 为开发者供给了自助式的发布体会,开发人员能够随时发布和回滚运用。
优势三:更高的稳定性和可靠性
因为 Git 是仅有可信源,它很容易进行回滚和康复,所以当体系呈现毛病时,开发者只需求对 Git 库房进行回滚即可,这将体系康复时间从几小时缩短到了几分钟。此外,因为每次改变都会发生新的提交,相当于供给了一个审计日志,它详细记录了谁在什么时分对体系进行了什么修正,有助于日后追溯操作记录。
优势四:规范化和一致性
凭借声明式和 Kubernetes,Git 库房界说的对象都是规范化的,它天然支撑不同的云厂商,当咱们需求在其他云厂商重建环境时,只需求修正布置的方针集群即可。此外,GitOps 流水线对安排的一切团队来说都是一致的,这能够防止不同的小组在完结相同的布置需求时重复造轮子。
优势五:更强的安全性
因为 GitOps 凭借 Git 来存储规范的界说文件,而 Git 的安全性又十分好,所以 GitOps 的存储进程也是安全的。此外,在开发者侧,并不会直接接触到根底设施的凭证,所以,相比较传统的发布进程,GitOps 具有更高的安全性。
成为交给规范:GtiOp的革新性影响
GitOps 之所以能成为云原生运用交给的规范,除了上述 5 大优势以外,还因为它给现有的 DevOps 运用交给形式带来了巨大革新。
这里所说的革新性影响首要包括下面几个方面。
- 将运用交给从推形式改变为了拉形式。
- 弥补了 Infra As Code(根底设施即代码)的缺乏。
- 逐步替代了 DevOps 的方位。
接下来咱们详细介绍一下这几个方面。
将运用交给从推形式改变为了拉形式
在 DevOps 主导的运用交给进程中,CD 东西往往需求在 CI 流水线履行完结之后才会发动。在这个进程中,CD 东西需求具有集群的访问权限。而在 GitOps 的流程中,当有新的改变提交到 Git 库房时,集群内的 GitOps 东西会主动比照差异并履行改变。
那为什么运用交给从推形式变成了拉形式就发生了如此巨大的差异呢?
在推形式下,CI 或许 CD 修正集群对象时,它需求在集群外部获得集群的凭证,这是十分不安全的做法。此外,推形式下的布置进程往往是指令式的,例如经过 kubectl apply 来履行改变,因为缺少“和谐”的进程,在改变进程中该行为并不是原子性的。
而 GitOps 经过 Operator 在集群内完结了拉的形式,在解决凭证安全问题的同时,也加入了“和谐”进程,这个进程就像是一个不断运转的监视器,不断拉取库房改变并比照差异,这一切都是在集群内完结的。
出于安全性和原子性考虑,运用交给从推形式正逐步被拉形式替代。
弥补了根底设施即代码的缺乏
以 Terraform 为代表的根底设施即代码获得了巨大的成功,它将以往需求经过指令式的操作变成了 HCL 声明式的配置方法。GitOps 继承了这个思维,在 GitOps 流程中,不只能够经过声明式的方法界说根底设施,而且还能够界说运用的交给方法,弥补了根底设施即代码在界说交给方法时的缺乏。
逐步替代了 DevOps 的方位
尽管 DevOps 比 GitOps 支撑更广泛的运用程序模型,但跟着容器化和 Kubernetes 技能的遍及,DevOps 的优势现已不这么明显了。
其次,跟着云原生技能的开展,DevOps 的东西链现已逐步落后于 Kubernetes 的生态体系。GitOps 的东西链相对来说更加轻量,也更符合云原生快速开展的规范。
尽管 DevOps 和 GitOps 并不是彻底独立的,它们有许多一起的方针。但跟着云原生的遍及,GitOps 和 Kubernetes 的组合注定会成为新的工程实践方法。而跟着 GitOps 在开发者群体中的认可度越来越高,DevOps 很可能会淡出开发者的技能选型。
总结
最终,我来总结一下。这节课,我带你学习了 GitOps 的理论根底,例如什么是 GitOps、GitOps 的 4 个准则及其优势,以及 GitOps 为什么会成为交给规范的几大原因。
从 GitOps 作业组拟定的准则咱们能够得出结论,最常用的 GitOps 东西 FluxCD 和 ArgoCD 都是基于相同的理念来构建的。至于 GitOps 的优势,经过之前的实战我相信你现已感触到了它的强大之处。
此外,GitOps 之所以能成为云原生交给的事实规范,我个人认为除了文中提到的三个原因以外,还有一个十分重要的原因是云原生技能特别是容器化和 Kubernetes 技能逐步成为了职业的规范。在这种情况下,旧的 CI/CD 东西也显现出了功率低和适配性不够强的问题,社区迫切需求更好的运用交给体会,这就为 GitOps 的遍及供给了更多的可能性。
总的来说,GitOps 吸收了 DevOps 的优势,同时也学习了 SRE(网站可靠性)的思维,给咱们带来了推翻式的运用交给体会。
文章来历:极客时间《云原生架构与 GitOps 实战》