什么是GitOps?
小军的求知笔记
小军的求知笔记
微信号
Golang_Porter
功能介绍
分享个人成长笔记,勇敢做自己。
GitOps是一个软件开发框架,它使组织能够持续地交付软件应用程序,同时使用Git作为单一的真实来源有效地管理IT基础设施。GitOps是DevOps的一个子集,它结合了基础设施即代码(IaC)和DevOps最佳实践,创建了一个操作模型,用于管理软件开发流程,并根据Git仓库的状态立即重现系统的云基础设施。
虽然有一些软件开发工具和解决方案,但基础设施管理一直是一项复杂的任务。它需要专业知识来建造和维护基础设施。DevOps彻底改变了软件开发环境,并通过“基础设施即代码(IaC)”方法赋能基础设施管理。
虽然IaC允许开发人员将配置声明为代码并自动化系统基础设施,但保持代码、测试和生产环境之间的实时同步仍然是一个挑战。GitOps扩展了IaC的功能,允许开发人员在Git中声明每个资源,并在整个基础设施中自动维护所需的状态。继续阅读,了解更多关于什么是GitOps!
GitOps:是否是一个版本控制方法?
版本控制系统在DevOps环境中扮演着至关重要的角色。VCS是一个软件工具,它使组织能够跟踪和管理代码的更改。它将对代码所做的每一个更改存储在一个唯一的数据库中。版本控制系统允许团队在代码开发上无缝协作,在最大限度地减少中断的同时加快发布时间。当出现错误时,团队可以快速恢复到早期版本,而不会中断其余的工作。GitOps利用Git VCS来提高CI/CD流水线的效率。
Git是开发人员圈子里最流行的版本控制系统。由于大多数开发人员都熟悉Git,因此使用GitOps项目变得很容易。在GitOps环境中,Git充当唯一的真相来源。环境中的每个资源都在Git存储库中进行了描述性声明。当Git“pull请求”发出,并且更改被批准时,当前使用的基础设施将自动重新配置,以与Git存储库中声明的所需状态同步。flux用于监视Git拉取请求,并将生产集群收敛到所需的状态。
GitOps原则
声明式
由于Git作为所有DevOps操作的唯一真实源,整个系统在Git中使用.yaml文件进行声明性描述。对应用程序、基础设施、部署和环境的更改都通过Git进行管理。例如,Kubernetes配置和环境配置可以通过Helm复用Chart进行管理。应用程序代码可以在Dockerfile中声明,而Terraforms可以声明基础设施。你不仅可以快速部署容器和回滚,还可以在灾难发生时重新生成整个集群基础设施。
版本
由于版本控制系统充当声明和管理基础设施所需状态的中央存储库,因此你可以试验新特性,并在需要时快速回滚/恢复。当变更提交时,将存储提交者信息、提交时间戳和提交ID等详细信息。因此,你可以完全跟踪在任何给定时间点对基础设施状态所做的所有更改。
作为GitOps原则之一,查看变更的整个审计跟踪的能力为组织中的各个团队带来了透明度。当基础设施和应用程序作为版本化后,审计也变得很容易。
自动化
声明性描述的优点是,你可以在Git代码中声明系统所需的状态,然后自动将所有更改应用到系统。通过在持续部署流水线中集成反馈控制循环,可以实现自动化部署。虽然它显著增加了你每天所做的更改的数量,但也减少了部署的平均时间。
保险
当期望的状态与系统的实际状态不匹配时,软件代理会立即就配置更改向你发出警报。有了这个GitOps原则和自愈方法,就可以确保拥有一个高质量的软件开发环境。
GitOps是如何工作的?
GitOps架构允许开发人员使用Git作为唯一的真实来源来管理基础设施操作。在典型的DevOps开发环境中,CI组件位于流水线的前端。CI组件将VCS视为提供输入以构建操作的服务,将CD视为部署代码的服务。它获取代码,运行自动化测试,并使用CD自动化将批准的代码推到生产环境中。
下面是一个典型的DevOps CI/CD流水线。
1、开发人员编写代码并将其提交给版本控制系统。
2、CI服务器获取代码并对其运行自动化测试。
3、当发现错误/bug时,将发送代码进行更正。
4、已批准的代码将自动推送到容器镜像仓库。
5、自动化部署工具将容器推向生产环境。
6、容器编排工具用于管理容器。
在这里,CI组件是CI/CD流水线的核心。然而,GitOps将版本控制系统Git推向了中心。在这个体系结构中,Git无缝地管理部署和操作。由于开发人员最熟悉Git和拉请求,所以使用GitOps变得很容易。
下面是GitOps环境中的一个典型工作流程:
1、开发人员向Git存储库发出拉取请求。
2、代码由相关人员审查和批准。
3、然后将代码合并到Git存储库中。
4、当检测到更改时,CI构建流水线将被触发。CI工具自动运行测试。代码通过所有测试后,将构建镜像并将其推入镜像仓库。
5、部署Automator检测镜像仓库的更改,将其从注册中心取出,并更新Config存储库YAML文件。
6、部署同步器检测集群中的更改。它从配置仓库中提取更改,并使用新特性更新过时的集群。
考虑一个使用Kubernetes集群和Flux CD来管理Kubernetes的GitOps环境。Kubernetes集群的状态首先在Git存储库中声明。如果没有事先声明,就不会有工作负载进入Kubernetes集群。工作负载描述被声明并推送到Git仓库。部署的集群状态应该始终与Git中声明的状态保持同步。Flux执行部署同步。它被部署在Kubernetes中,并使用一个控制循环来拉出git代码,并检查是否有新的提交被推送。当一个新的提交被应用时,它立即将集群状态收敛到新声明的状态。
此外,Flux还检查容器镜像仓库以进行更新。当发现新镜像时,Flux将使用最新的容器镜像tag更新Git上的集群manifest文件,然后用最新的提交重新同步集群状态。这意味着容器实例总是使用最新的镜像运行。它还确保集群状态始终与Git存储库中的声明完全同步。如果你需要回滚某个特性,只需使用Git将其恢复到早期版本,Flux将自动将集群状态同步到该版本。
使用GitOps,你不需要为开发人员提供写访问。相反,Flux将根据Git仓库声明在集群中更新、删除或创建资源。通过实现基于角色的访问控制(RBAC),你可以使用所需的特权配置Flux服务帐户并执行所需的操作,而无需向外部暴露集群凭据。
GitOps的优势
更快速
地
回应市场需求
可靠性高
改进开发者体验
审计容易
GitOps最佳实践
代码仓库管理
manifest管理
管理有状态应用程序和服务
总结
在回顾了什么是GitOps之后,我们可以得出这样的结论:随着多种技术、工具和框架的涌入,现代云基础设施正变得日益复杂。GitOps提供了强大的操作工作流来管理这个复杂的云系统基础设施。通过确保实时生产集群始终在所需的状态下运行,组织可以奢侈地合并新功能,以交付出色的客户体验,提高生产力并减少停机。
预览时标签不可点
微信扫一扫
关注该公众号
继续滑动看下一个
轻触阅读原文
小军的求知笔记
向上滑动看下一个
知道了
微信扫一扫
使用小程序
取消
允许
取消
允许
:
,
。
视频
小程序
赞
,轻点两下取消赞
在看
,轻点两下取消在看
分享
留言