最近半年一直在学习和实践GitOps,从最开始的懵懵懂懂,到后来在生产环境落地,踩了不少坑,也积累了一些经验。
很多朋友问我GitOps是什么,怎么入门,今天就来分享一下我的GitOps学习路线,看看我是怎么从一个小白入门的。内容包括GitOps的基本概念、核心原理、常用工具、学习步骤、实践方法、常见问题等,希望能给想学习GitOps的朋友一些参考和帮助,让大家少走弯路,快速入门。
一、先说说什么是GitOps
在讲学习路线之前,先简单说说什么是GitOps。
GitOps这个概念,最早是由Weaveworks公司在2017年提出来的,它是一种基于Git的持续交付方式,核心思想是把基础设施和应用的配置都存放在Git仓库中,作为唯一的事实来源,然后通过自动化的工具,把Git仓库中的配置同步到运行环境中。
简单来说,GitOps就是用Git来管理一切,包括基础设施、应用配置、部署流程等,所有的变更都通过Git提交来触发,所有的环境状态都和Git仓库中的定义保持一致。
GitOps的核心原则有四个:
- 系统的所有声明都存储在Git中:基础设施和应用的配置都以声明式的方式存放在Git仓库中,Git是唯一的事实来源。
- 变更通过Git提交来批准和合并:所有的变更都通过Git的Pull Request/Merge Request来提交,经过审查和批准之后才能合并,保证变更的可控和可追溯。
- 变更自动应用到系统:合并之后的变更,通过自动化工具自动应用到运行环境中,不需要人工干预。
- 持续协调确保状态一致:通过持续的协调和监控,确保运行环境的状态和Git仓库中的定义保持一致,如果出现不一致,就自动告警或者自动修复。
GitOps和传统的CI/CD有什么区别呢?传统的CI/CD,一般是在CI系统中构建镜像,然后通过CD工具把镜像部署到集群中,部署的权限在CI/CD系统手里。而GitOps,是把部署的配置存放在Git仓库中,由专门的Operator来监听Git仓库的变化,然后把配置同步到集群中,部署的权限在集群内部,更安全,也更可控。
GitOps的好处有很多,比如更安全、更可靠、更可追溯、更容易回滚、审计更方便等,现在越来越多的公司开始采用GitOps的方式来做持续交付。
二、我为什么要学GitOps
再说说我为什么要学GitOps。
最开始我们团队用的是传统的CI/CD方式,用Jenkins做CI,然后用Jenkins调用kubectl命令把应用部署到Kubernetes集群中。这种方式用了一段时间,出现了很多问题:
- 部署权限不好控制:Jenkins有集群的管理员权限,所有人都能通过Jenkins部署,很容易出现误操作,而且不知道是谁部署的,出了问题不好追溯。
- 环境配置不一致:开发、测试、生产环境的配置经常不一致,有时候开发环境改了配置,忘了同步到生产环境,导致生产环境出问题。
- 回滚困难:部署出了问题,回滚很麻烦,需要找到之前的版本,重新部署,而且有时候配置也回滚不了,很容易出问题。
- 审计困难:谁在什么时候部署了什么,改了什么配置,都没有记录,出了问题很难排查,也不符合合规要求。
- 人工操作多:很多部署操作还是需要人工去做,效率低,而且容易出错。
这些问题一直困扰着我们,直到我们了解到了GitOps,发现GitOps正好能解决这些问题。于是我们就开始学习GitOps,并且尝试在团队中落地。
学习了一段时间之后,我们发现GitOps确实是个好东西,不仅解决了我们之前的问题,还带来了很多其他的好处,比如部署更规范了,流程更清晰了,团队协作更顺畅了等等。现在我们已经把大部分应用都迁移到了GitOps的方式,效果很好。
三、我的GitOps学习路线
下面详细说说我的GitOps学习路线,分为几个阶段,每个阶段学什么,做什么,希望能给大家一些参考。
第一阶段:基础概念学习(1-2周)
最开始,我先花了一两周的时间,学习GitOps的基本概念和原理,搞清楚GitOps到底是什么,核心思想是什么,和传统的CI/CD有什么区别,有什么好处和挑战。
这个阶段我主要看了这些资料:
- Weaveworks的GitOps官方指南:这是GitOps概念的提出者写的,非常权威,讲清楚了GitOps的核心原则和最佳实践,是入门必看的资料。
- GitOps的相关博客和文章:在网上找了很多GitOps的介绍文章和博客,比如CNCF的博客、各大技术社区的文章,多看看不同人的理解,加深对GitOps的认识。
- GitOps的演讲视频:在YouTube和B站上找了一些GitOps相关的演讲视频,比如KubeCon上的GitOps相关演讲,看大佬们怎么讲GitOps,更容易理解。
- ArgoCD和Flux的官方文档:这两个是最主流的GitOps工具,先大概看看官方文档,了解一下它们的基本功能和用法,不用深入,先有个印象。
这个阶段的目标是搞清楚GitOps的基本概念和原理,知道GitOps是什么,能解决什么问题,有哪些常用工具,不用太深入,也不用急着动手实践,先把理论基础打牢。
学习的时候,我建议多思考,多问几个为什么,比如为什么要用Git作为唯一的事实来源?为什么要把部署逻辑放在集群内部?GitOps和Infrastructure as Code有什么区别和联系?想清楚这些问题,对GitOps的理解会更深入。
第二阶段:工具上手实践(2-3周)
搞清楚基本概念之后,就可以开始动手实践了,先选一个GitOps工具,上手用一用,感受一下GitOps的工作流程。
目前最主流的GitOps工具有两个,一个是ArgoCD,一个是Flux。这两个工具都很好用,各有特点:
- ArgoCD:功能更丰富,有Web UI,可视化做得好,支持多集群,用户体验好,适合新手入门。
- Flux:更轻量,更云原生,基于GitOps的核心理念设计,组件化,可扩展性强,适合有一定经验的用户。
我最开始选的是ArgoCD,因为它有Web UI,可视化好,容易上手,适合新手。等ArgoCD用熟了之后,我又研究了一下Flux,对比了两者的区别,最后我们团队选择了ArgoCD,因为它的功能更全面,更适合我们的场景。
这个阶段我主要做了这些事情:
- 搭建本地Kubernetes集群:用Minikube或者Kind在本地搭建一个Kubernetes集群,作为实验环境。
- 安装ArgoCD:按照官方文档,在本地集群中安装ArgoCD,熟悉安装过程和基本配置。
- 创建第一个GitOps应用:创建一个简单的应用,比如Nginx,把部署配置提交到Git仓库中,然后在ArgoCD中创建应用,关联Git仓库,看看ArgoCD是怎么自动同步部署的。
- 体验GitOps的工作流程:修改Git仓库中的配置,提交之后看看ArgoCD是不是自动同步了;故意修改集群中的配置,看看ArgoCD是不是能检测到不一致,并且告警或者自动修复;试试回滚,看看是不是通过Git回滚就能回滚应用。
- 学习ArgoCD的核心功能:比如应用管理、同步策略、健康检查、多集群管理、RBAC权限控制、Webhook通知等,把核心功能都用一遍。
这个阶段的目标是熟悉GitOps工具的基本用法,体验GitOps的工作流程,感受GitOps和传统部署方式的区别。不用太深入,先把基本功能用熟,有个直观的感受。
实践的时候,我建议多动手,多尝试,不要怕出错,反正是本地环境,搞坏了重新来就行。多试试不同的配置,不同的场景,加深对工具的理解。
第三阶段:深入理解原理(2-3周)
工具用熟了之后,就可以开始深入学习GitOps的原理和最佳实践了,这个阶段很重要,决定了你能不能真正用好GitOps。
这个阶段我主要学习了这些内容:
- GitOps的核心模式:比如Push模式和Pull模式的区别,为什么GitOps推荐用Pull模式;声明式配置的原理,为什么要用声明式而不是命令式;持续协调的原理,怎么保证状态一致。
- Git仓库的组织方式:单仓库和多仓库的优缺点,怎么组织Git仓库,怎么管理多环境、多应用的配置,怎么处理配置的复用和差异。
- 配置管理的最佳实践:比如用Kustomize或者Helm来管理配置,怎么处理不同环境的配置差异,怎么做配置的模板化和复用,怎么保证配置的可维护性。
- 安全和权限管理:GitOps的安全模型,怎么控制Git仓库的权限,怎么控制ArgoCD的权限,怎么管理集群的访问权限,怎么做密钥管理,怎么保证敏感信息的安全。
- CI/CD和GitOps的结合:GitOps不是要取代CI,而是和CI配合,CI负责构建镜像和测试,GitOps负责部署,怎么把CI和GitOps结合起来,形成完整的交付流程。
- 多集群管理:如果有多个Kubernetes集群,怎么用GitOps统一管理,怎么组织配置,怎么做权限隔离,怎么保证各集群的配置一致。
- 可观测性和运维:怎么监控GitOps工具的运行状态,怎么监控应用的同步状态,怎么做告警,怎么排查问题,怎么做备份和恢复。
这个阶段我主要看了这些资料:
- ArgoCD和Flux的官方文档:深入阅读官方文档,特别是最佳实践部分,官方文档是最好的学习资料。
- GitOps的最佳实践指南:比如OpenGitOps的官方指南,CNCF的GitOps白皮书,这些都是行业的最佳实践总结,很有参考价值。
- 各大公司的GitOps实践分享:很多公司都分享了他们的GitOps落地经验,比如字节跳动、腾讯、阿里、Intuit等,看看他们是怎么用GitOps的,踩了哪些坑,有什么经验。
- 相关的书籍和课程:比如《GitOps入门与实践》这本书,还有一些在线课程,系统地学习GitOps的知识体系。
这个阶段的目标是深入理解GitOps的原理和最佳实践,知道怎么用好GitOps,怎么避免常见的坑,怎么结合自己的业务场景设计合适的GitOps流程。
学习的时候,我建议多思考,多结合自己的实际场景,想想如果是在你们公司,应该怎么设计GitOps流程,怎么组织仓库,怎么管理配置,怎么处理权限,这样学习才不会空泛,才能真正学到东西。
第四阶段:生产环境落地(持续进行)
理论学的差不多了,就可以开始在生产环境落地了,这个阶段是最关键的,也是最能学到东西的,因为生产环境会遇到各种各样的问题,需要你去解决。
我们团队的落地过程是这样的:
- 先从非核心应用开始:最开始我们选了几个非核心的、影响小的应用,尝试用GitOps的方式部署,先跑通流程,积累经验,等稳定了再逐步推广。
- 制定规范和流程:在落地的过程中,我们逐步制定了GitOps的相关规范,比如Git仓库的组织规范、配置管理规范、提交信息规范、代码审查规范、部署流程规范等,让大家有章可循。
- 培训团队成员:给团队成员做GitOps的培训,让大家都理解GitOps的理念,熟悉GitOps的工作流程,掌握ArgoCD的使用方法,确保大家都能按照规范来做。
- 逐步迁移应用:等流程稳定了,团队成员也熟悉了,我们就开始逐步把更多的应用迁移到GitOps的方式,从非核心应用到核心应用,从测试环境到生产环境,一步步来,不急于求成。
- 持续优化改进:在落地的过程中,我们遇到了很多问题,也在不断地优化改进,比如优化仓库结构、优化配置管理、完善监控告警、加强安全控制等,让GitOps的流程越来越完善。
这个阶段会遇到很多问题,比如配置管理混乱、权限不好控制、多环境配置不一致、密钥管理困难、CI和GitOps配合不好等等,这些问题都需要你去思考,去解决,在解决问题的过程中,你对GitOps的理解会越来越深入,能力也会越来越强。
落地的时候,我建议不要急于求成,先从小范围开始试点,跑通流程,积累经验,等稳定了再逐步推广。一定要制定好规范和流程,做好培训,让团队成员都理解和接受GitOps,不然很容易流于形式,达不到预期的效果。
四、学习GitOps的常见问题
最后,说说学习GitOps过程中常见的一些问题,以及我的一些建议。
1. GitOps是不是要取代CI/CD?
不是的,GitOps不是要取代CI/CD,而是和CI/CD配合。CI负责代码构建、测试、镜像打包,GitOps负责部署和环境管理,两者结合起来,形成完整的持续交付流程。不要觉得用了GitOps就不用CI了,CI还是很重要的。
2. GitOps只能用在Kubernetes吗?
GitOps的理念可以用在很多地方,但是目前最成熟、最适合的场景还是Kubernetes,因为Kubernetes本身就是声明式的,和GitOps的理念很契合。当然,GitOps也可以用在其他场景,比如基础设施管理、云资源管理等,但是工具和生态还不如Kubernetes成熟。
3. ArgoCD和Flux选哪个?
这两个工具都很好,各有特点,新手的话建议先学ArgoCD,因为它有Web UI,可视化好,容易上手。等有一定经验了,可以再看看Flux,对比一下,选择适合自己场景的工具。其实工具只是手段,核心是理解GitOps的理念,工具用熟了都差不多。
4. 怎么管理多环境的配置?
这是GitOps落地中最常见的问题,也是最容易搞混乱的地方。常用的方法有两种,一种是用Kustomize的Overlay,每个环境一个Overlay,继承基础配置,然后覆盖差异部分;另一种是用Helm的Values,每个环境一个Values文件,渲染的时候用不同的Values。两种方法都可以,根据自己的团队习惯和场景选择就行,关键是要规范,要清晰,要容易维护。
5. 敏感信息怎么管理?
Git仓库中不能存放明文的敏感信息,比如密码、密钥、证书等。常用的解决方案有几种:一种是用Sealed Secrets,把Secret加密之后存放在Git仓库中,在集群中解密;另一种是用External Secrets,把敏感信息存放在专门的密钥管理系统中,比如Vault、云厂商的密钥管理服务,然后在集群中引用;还有一种是用SOPS,加密文件中的敏感字段。根据自己的场景选择合适的方案,总之不要把明文的敏感信息提交到Git仓库。
6. 怎么保证GitOps的安全?
安全是GitOps中很重要的一环,主要包括几个方面:一是Git仓库的权限控制,严格控制谁能提交,谁能合并,做好代码审查;二是ArgoCD的权限控制,通过RBAC控制不同用户的权限,做好多租户隔离;三是集群的权限控制,ArgoCD在集群中的权限要最小化,不要给管理员权限,只给需要的权限;四是镜像和配置的安全,做好镜像扫描,配置验证,防止恶意配置部署到生产环境。
五、写在最后
GitOps是一种很好的持续交付理念,现在越来越受到重视,也有越来越多的公司开始采用。学习GitOps,不仅能让你掌握一种新的技术,更能让你对持续交付、DevOps、云原生有更深的理解。
我的学习路线不一定适合所有人,但是核心的思路是通用的:先学基础概念,再动手实践工具,然后深入理解原理和最佳实践,最后在生产环境落地,在实践中不断学习和成长。
学习新技术,最重要的是动手实践,光看不学是没用的,一定要多动手,多尝试,多思考,在实践中加深理解。不要怕出错,出错是学习的最好机会,解决了问题,你就成长了。
希望这篇文章能给想学习GitOps的朋友一些参考和帮助,也欢迎大家在评论区分享自己的GitOps学习经验和实践心得,一起交流学习。
最后,祝大家都能快速入门GitOps,用好GitOps,让交付更简单、更安全、更可靠。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录