做GitOps实践有一段时间了,踩了不少坑,今天就来分享一下那些年我踩过的坑,以及对应的解决方案,希望能帮到正在做GitOps的朋友。

GitOps,是,这,几年,比较,火,的,一个,概念,是,一种,以,Git,为,核心,的,持续,部署,方式,把,基础设施,和,应用,的,配置,都,存,在,Git,仓库,里,通过,Git,的,提交,来,触发,部署,实现,基础设施,即代码,和,声明式,的,持续,部署。

这,几年,随着,Kubernetes,的,流行,GitOps,也,越来越,受,欢迎,很多,团队,都,开始,实践,GitOps,我,所在,的,团队,也,在,一年,前,开始,实践,GitOps,用,的,是,ArgoCD,和,Flux,这,两个,工具,过程,中,踩,了,不少,坑,也,积累,了,一些,经验,今天,这篇,文章,就,来,分享,一下,那些年,我,踩,过,的,坑,以及,对应,的,解决,方案。

一、什么是GitOps

在,说,踩坑,之前,先,简单,介绍,一下,什么,是,GitOps,让,不,了解,的,朋友,有,个,概念。

GitOps,这个,概念,是,由,Weaveworks,公司,在,2017年,提出,的,是,一种,以,Git,为,核心,的,持续,部署,方式,核心,思想,是,把,所有,的,配置,包括,应用,配置,基础设施,配置,等等,都,存,在,Git,仓库,里,作为,唯一,的,事实,来源,然后,通过,Git,的,提交,来,触发,部署,自动化,地,把,Git,仓库,里,的,配置,同步,到,实际,的,运行,环境,中。

GitOps,的,核心,原则,有,几个:

  1. 声明式:所有,的,配置,都,是,声明式,的,描述,期望,的,状态,而,不是,命令式,的,操作,步骤,比如,Kubernetes,的,YAML,配置,就是,声明式,的,描述,期望,的,应用,状态。
  1. Git是唯一事实来源:所有,的,配置,都,存,在,Git,仓库,里,Git,仓库,是,唯一,的,事实,来源,任何,对,配置,的,修改,都,要,通过,Git,提交,来,进行,不能,直接,在,运行,环境,修改,配置。
  1. 自动同步:通过,工具,自动,把,Git,仓库,里,的,配置,同步,到,运行,环境,中,保证,运行,环境,的,状态,和,Git,仓库,里,的,期望,状态,一致,如果,不一致,就,自动,同步,或者,告警。
  1. 可观测和可审计:因为,所有,的,修改,都,通过,Git,提交,所以,所有,的,变更,都,有,记录,可,追溯,可,审计,谁,在,什么,时候,改,了,什么,都,能,查到,而且,能,很,方便,地,回滚,到,任何,历史,版本。

GitOps,的,好处,很,多,比如,配置,版本,管理,变更,可,追溯,可,审计,回滚,方便,部署,自动化,减少,人为,错误,等等,而且,开发者,已经,熟悉,Git,的,工作流,学习,成本,低,很,容易,上手,所以,这,几年,GitOps,越来越,受,欢迎,很多,团队,都,开始,实践,GitOps。

目前,主流,的,GitOps,工具,有,两个,一个,是,ArgoCD,一个,是,Flux,都,是,CNCF,的,项目,都,很,流行,功能,也,都,很,强大,ArgoCD,有,很,好,的,Web UI,功能,丰富,容易,上手,Flux,更,轻量,更,专注,于,GitOps,的,核心,功能,两个,工具,都,很,不错,大家,可以,根据,自己,的,需求,选择。

二、坑一:Git仓库结构设计不合理

第一个,坑,是,Git,仓库,结构,设计,不,合理,这,是,我们,最,开始,实践,GitOps,的,时候,踩,的,第一个,坑。

最,开始,的,时候,我们,把,所有,的,配置,都,放,在,一个,Git,仓库,里,包括,所有,环境,的,配置,所有,应用,的,配置,所有,基础设施,的,配置,都,放,在,一起,仓库,结构,很,混乱,找,配置,很,麻烦,而且,不同,团队,的,人,都,在,一个,仓库,里,提交,代码,经常,冲突,合并,很,麻烦,权限,也,不,好,控制,谁,都,能,改,所有,的,配置,很,不安全。

后来,我们,重新,设计,了,Git,仓库,结构,才,解决,了,这个,问题,我们,的,经验,是,Git,仓库,结构,要,根据,团队,组织,和,应用,边界,来,设计,不要,把,所有,东西,都,放,在,一个,仓库,里。

我们,最终,采用,的,是,按,应用,分,仓库,的,方式,每个,应用,一个,Git,仓库,仓库,里,包含,这个,应用,的,所有,环境,的,配置,比如,开发,环境,测试,环境,预发,环境,生产,环境,的,配置,都,在,这个,仓库,里,按,目录,区分,这样,每个,应用,的,团队,只,需要,管,自己,的,仓库,权限,好,控制,也,不,会,和,其他,团队,冲突,而且,应用,的,配置,都,在,一个,仓库,里,找,起来,也,方便。

仓库,里,的,目录,结构,我们,是,这样,设计,的:

app-name/
├── base/          # 基础配置,所有环境共用
│   ├── deployment.yaml
│   ├── service.yaml
│   └── kustomization.yaml
├── overlays/      # 各环境的覆盖配置
│   ├── dev/
│   │   ├── kustomization.yaml
│   │   └── patch.yaml
│   ├── test/
│   │   ├── kustomization.yaml
│   │   └── patch.yaml
│   ├── staging/
│   │   ├── kustomization.yaml
│   │   └── patch.yaml
│   └── prod/
│       ├── kustomization.yaml
│       └── patch.yaml
└── README.md

用,Kustomize,来,管理,配置,base,目录,放,基础,配置,所有,环境,共用,overlays,目录,放,各,环境,的,覆盖,配置,每个,环境,一个,目录,这样,既能,复用,基础,配置,又,能,针对,不同,环境,做,差异化,配置,很,方便,也,很,清晰。

当然,仓库,结构,的,设计,没有,标准答案,要,根据,团队,的,实际,情况,来,设计,如果,团队,小,应用,少,放,在,一个,仓库,里,也,没问题,如果,团队,大,应用,多,就,需要,分,仓库,或者,按,其他,维度,组织,关键,是,要,清晰,易,找,权限,好,控制,不,容易,冲突。

三、坑二:配置漂移问题

第二个,坑,是,配置,漂移,问题,这,是,GitOps,实践,中,很,常见,的,一个,坑。

所谓,配置,漂移,就是,运行,环境,的,实际,状态,和,Git,仓库,里,的,期望,状态,不一致,了,有人,直接,在,运行,环境,修改,了,配置,没有,同步,到,Git,仓库,导致,Git,仓库,里,的,配置,和,实际,运行,的,配置,不一致,这,就是,配置,漂移。

我们,最,开始,实践,GitOps,的,时候,经常,出现,配置,漂移,因为,有些,同事,习惯,了,直接,在,Kubernetes,集群,里,修改,配置,比如,用,kubectl edit,修改,Deployment,或者,用,kubectl scale,扩容,缩容,等等,改,了,之后,没有,同步,到,Git,仓库,导致,Git,仓库,里,的,配置,和,实际,运行,的,配置,不一致,下次,GitOps,工具,同步,的,时候,就,会,把,直接,修改,的,配置,覆盖,掉,导致,问题,而且,出,问题,的,时候,排查,也,很,麻烦,因为,不知道,配置,是,被,谁,改,的,为什么,改,的。

后来,我们,采取,了,几个,措施,才,解决,了,配置,漂移,的,问题:

  1. 开启自动同步:在,ArgoCD,里,开启,自动,同步,功能,让,ArgoCD,自动,检测,配置,漂移,如果,发现,运行,环境,的,状态,和,Git,仓库,的,期望,状态,不一致,就,自动,同步,把,运行,环境,的,状态,恢复,到,Git,仓库,的,期望,状态,这样,就算,有人,直接,在,运行,环境,修改,了,配置,也,会,被,自动,覆盖,掉,保证,配置,一致,当然,自动,同步,也,有,风险,比如,如果,Git,仓库,里,的,配置,有,问题,自动,同步,会,把,问题,同步,到,生产,环境,所以,生产,环境,我们,是,手动,同步,的,不,开启,自动,同步,但是,会,开启,漂移,检测,和,告警,如果,发现,配置,漂移,就,告警,通知,相关,人员,去,处理。
  1. 限制集群修改权限:通过,Kubernetes,的,RBAC,权限,控制,限制,大部分,人,的,集群,修改,权限,只,给,少数,运维,人员,有,集群,修改,权限,其他人,只有,只读,权限,不能,直接,在,集群,里,修改,配置,要,修改,配置,必须,通过,Git,提交,来,进行,这样,从,权限,上,杜绝,了,大部分,人,直接,修改,集群,配置,的,可能,大大,减少,了,配置,漂移,的,发生。
  1. 制定规范和培训:制定,GitOps,的,操作,规范,明确,要求,所有,配置,修改,都,必须,通过,Git,提交,来,进行,禁止,直接,在,集群,里,修改,配置,并且,对,团队,所有,人,进行,培训,让,大家,都,了解,GitOps,的,工作流,和,规范,养成,通过,Git,提交,修改,配置,的,习惯,从,意识,上,减少,配置,漂移,的,发生。
  1. 定期审计:定期,对,集群,配置,和,Git,仓库,配置,进行,审计,检查,有没有,配置,漂移,的,情况,如果,有,就,及时,处理,并且,分析,原因,优化,流程,避免,再次,发生,我们,是,每周,做,一次,审计,效果,还,不错。

通过,这,几个,措施,我们,的,配置,漂移,问题,基本,上,解决,了,很少,再,出现,配置,漂移,的,情况,就算,偶尔,出现,也,能,及时,发现,和,处理。

四、坑三:多环境管理复杂

第三个,坑,是,多,环境,管理,复杂,这,也是,GitOps,实践,中,很,常见,的,一个,坑。

一般,团队,都,有,多个,环境,比如,开发,环境,测试,环境,预发,环境,生产,环境,等等,每个,环境,的,配置,都,有,差异,比如,镜像,版本,不同,副本,数,不同,资源,限制,不同,配置,参数,不同,等等,多,环境,的,配置,管理,很,容易,混乱,比如,改,了,开发,环境,的,配置,忘记,改,生产,环境,的,或者,各个,环境,的,配置,差异,越来越,大,很难,维护。

我们,最,开始,的,时候,多,环境,管理,也,很,混乱,每个,环境,一套,完整,的,YAML,配置,复制,粘贴,改,参数,时间,长,了,各个,环境,的,配置,差异,越来越,大,很多,配置,应该,是,一样,的,但是,因为,复制,粘贴,的,问题,变得,不一样,了,改,一个,公共,配置,要,在,所有,环境,都,改,一遍,很,麻烦,也,很,容易,漏。

后来,我们,用,Kustomize,来,管理,多,环境,配置,才,解决,了,这个,问题,Kustomize,是,Kubernetes,官方,的,配置,管理,工具,能,通过,base,和,overlay,的,方式,管理,多,环境,配置,base,目录,放,所有,环境,共用,的,基础,配置,overlay,目录,放,各,环境,的,覆盖,配置,只,需要,写,差异,的,部分,不用,复制,完整,的,配置,这样,既能,复用,基础,配置,又,能,针对,不同,环境,做,差异化,配置,很,方便,也,很,清晰。

而且,Kustomize,支持,各种,patch,方式,比如,strategic merge patch,JSON patch,等等,能,很,灵活,地,覆盖,基础,配置,还,支持,configMapGenerator,secretGenerator,等,功能,能,很,方便,地,生成,ConfigMap,和,Secret,用,起来,很,方便。

除了,Kustomize,还有,一个,工具,叫,Helm,也,能,管理,多,环境,配置,通过,values.yaml,的,方式,不同,环境,用,不同,的,values,文件,也,能,实现,多,环境,配置,管理,Helm,的,功能,更,强大,支持,模板,变量,条件,循环,等等,但是,也,更,复杂,学习,成本,更,高,我们,团队,因为,配置,不,太,复杂,所以,选,了,Kustomize,更,简单,更,轻量,如果,配置,复杂,需要,模板,功能,的话,可以,考虑,用,Helm。

另外,多,环境,管理,还有,一个,要,注意,的,点,就是,环境,之间,的,晋升,流程,比如,开发,环境,测试,通过,后,怎么,晋升,到,测试,环境,测试,环境,通过,后,怎么,晋升,到,预发,环境,预发,环境,通过,后,怎么,晋升,到,生产,环境,这个,流程,要,设计,好,我们,的,做法,是,每个,环境,一个,分支,开发,环境,用,dev,分支,测试,环境,用,test,分支,预发,环境,用,staging,分支,生产,环境,用,main,分支,开发,在,dev,分支,提交,代码,测试,通过,后,合并,到,test,分支,测试,环境,自动,部署,测试,通过,后,合并,到,staging,分支,预发,环境,自动,部署,验证,通过,后,合并,到,main,分支,生产,环境,手动,部署,这样,每个,环境,的,配置,都,在,对应,的,分支,上,晋升,就是,合并,分支,很,清晰,也,很,方便,而且,每个,环境,的,配置,变更,都,有,记录,可,追溯。

当然,多,环境,管理,的,方式,也,没有,标准答案,要,根据,团队,的,实际,情况,来,设计,关键,是,要,清晰,易,维护,减少,重复,配置,避免,配置,不一致。

五、坑四:密钥管理问题

第四个,坑,是,密钥,管理,问题,这,是,GitOps,实践,中,很,重要,也,很,容易,踩坑,的,一个,问题。

GitOps,要求,所有,配置,都,存,在,Git,仓库,里,但是,密钥,比如,数据库,密码,API Key,证书,等等,是,敏感,信息,不能,明文,存,在,Git,仓库,里,否则,会,有,安全,风险,所以,密钥,管理,是,GitOps,实践,中,必须,解决,的,一个,问题。

我们,最,开始,的,时候,也,在,这个,问题,上,踩,了,坑,最,开始,我们,是,把,密钥,加密,后,存,在,Git,仓库,里,用,的,是,git-crypt,这个,工具,能,把,指定,的,文件,加密,后,存,在,Git,仓库,里,克隆,后,用,GPG,密钥,解密,但是,用,起来,很,麻烦,每个,需要,访问,密钥,的,人,都,要,有,GPG,密钥,还要,把,公钥,加,到,git-crypt,的,信任,列表,里,新人,入职,和,离职,的,时候,处理,很,麻烦,而且,ArgoCD,要,访问,加密,的,文件,也,需要,配置,GPG,密钥,很,麻烦,还,有,安全,风险。

后来,我们,换,了,方案,用,的,是,Sealed Secrets,这,是,Bitnami,开源,的,一个,Kubernetes,密钥,管理,工具,能,把,Secret,加密,成,SealedSecret,存,在,Git,仓库,里,只有,集群,里,的,controller,能,解密,成,Secret,其他人,就算,拿到,了,Git,仓库,里,的,SealedSecret,也,解密,不了,很,安全,而且,用,起来,很,方便,用,kubeseal,命令行,工具,就能,把,Secret,加密,成,SealedSecret,存,到,Git,仓库,里,ArgoCD,同步,的,时候,集群,里,的,controller,会,自动,解密,成,Secret,很,方便,也,很,安全。

除了,Sealed Secrets,还有,一个,工具,叫,SOPS,也,很,常用,是,Mozilla,开源,的,加密,工具,能,加密,YAML,JSON,ENV,等,格式,的,文件,支持,多种,加密,方式,比如,GPG,KMS,Vault,等等,功能,更,强大,也,更,灵活,但是,配置,也,更,复杂,一些,如果,需要,更,灵活,的,加密,方式,可以,考虑,用,SOPS。

还有,一个,方案,是,用,外部,密钥,管理,系统,比如,HashiCorp Vault,云,厂商,的,KMS,等等,把,密钥,存,在,外部,系统,里,Git,仓库,里,只,存,密钥,的,引用,不,存,实际,的,密钥,然后,通过,External Secrets Operator,等,工具,把,外部,系统,里,的,密钥,同步,到,Kubernetes,集群,里,成,Secret,这种,方案,更,安全,也,更,专业,适合,对,安全,要求,高,的,团队,但是,也,更,复杂,需要,维护,外部,密钥,管理,系统,成本,更,高。

我们,团队,因为,规模,不,大,对,安全,要求,也,不是,特别,高,所以,选,了,Sealed Secrets,方案,简单,方便,安全,也,够用,大家,可以,根据,自己,团队,的,实际,情况,选择,适合,的,密钥,管理,方案,但是,一定,要,注意,密钥,不能,明文,存,在,Git,仓库,里,这是,底线。

六、坑五:CI/CD和GitOps的关系处理

第五个,坑,是,CI/CD,和,GitOps,的,关系,处理,这,也是,很多,团队,实践,GitOps,的,时候,容易,困惑,的,一个,问题。

很多,团队,最,开始,的,时候,搞,不,清楚,CI/CD,和,GitOps,的,关系,不知道,哪些,事情,应该,在,CI/CD,里,做,哪些,事情,应该,在,GitOps,里,做,导致,流程,混乱,比如,有的,团队,把,镜像,构建,也,放,在,GitOps,里,做,有的,团队,把,部署,也,放,在,CI/CD,里,做,和,GitOps,重复,了,流程,很,乱。

我们,最,开始,的,时候,也,有,这个,困惑,后来,理清,了,CI/CD,和,GitOps,的,分工,才,解决,了,这个,问题,我们,的,经验,是,CI/CD,负责,构建,和,测试,GitOps,负责,部署,两者,分工,明确,不,重叠。

具体,来说,CI/CD,的,职责,是:

  1. 代码构建:从,代码,仓库,拉取,代码,编译,构建,成,镜像,或者,其他,制品。
  2. 代码测试:运行,单元测试,集成测试,代码,质量,检查,等等,保证,代码,质量。
  3. 镜像推送:把,构建,好,的,镜像,推送,到,镜像,仓库。
  4. 更新配置:如果,需要,自动,部署,的话,CI/CD,可以,自动,更新,GitOps,仓库,里,的,镜像,版本,提交,到,Git,触发,GitOps,部署。

而,GitOps,的,职责,是:

  1. 配置管理:管理,所有,的,部署,配置,存在,Git,仓库,里,作为,唯一,事实,来源。
  2. 环境同步:自动,或者,手动,把,Git,仓库,里,的,配置,同步,到,Kubernetes,集群,里,部署,应用。
  3. 状态监控:监控,集群,的,实际,状态,和,Git,仓库,的,期望,状态,是否,一致,如果,不一致,就,告警,或者,自动,同步。
  4. 部署审计:所有,的,部署,变更,都,通过,Git,提交,有,记录,可,追溯,可,审计。

这样,分工,就,很,明确,了,CI/CD,负责,把,代码,变成,镜像,GitOps,负责,把,镜像,部署,到,集群,两者,通过,Git,仓库,解耦,CI/CD,不,直接,操作,集群,只,操作,Git,仓库,GitOps,负责,操作,集群,这样,更,安全,也,更,清晰。

而且,这样,的,分工,也,有,很多,好处,比如,CI/CD,不需要,有,集群,的,访问,权限,只,需要,有,Git,仓库,的,提交,权限,更,安全,部署,的,逻辑,都,在,GitOps,里,统一,管理,不,分散,在,各个,CI/CD,流水线,里,更,易,维护,回滚,也,很,方便,只,需要,在,Git,仓库,里,回退,版本,就,能,触发,GitOps,回滚,部署,很,方便。

我们,团队,现在,的,流程,是,这样,的,开发者,提交,代码,到,应用,代码,仓库,触发,CI/CD,流水线,CI/CD,运行,测试,构建,镜像,推送,到,镜像,仓库,然后,自动,更新,GitOps,配置,仓库,里,的,镜像,版本,提交,到,Git,触发,ArgoCD,同步,部署,到,开发,环境,开发,环境,验证,通过,后,合并,到,测试,分支,部署,到,测试,环境,依次,类推,直到,生产,环境,整个,流程,很,清晰,也,很,顺畅。

七、坑六:GitOps工具的高可用和性能

第六个,坑,是,GitOps,工具,的,高可用,和,性能,问题,这,是,当,集群,规模,大,了,之后,容易,遇到,的,问题。

我们,最,开始,的,时候,集群,规模,小,应用,少,ArgoCD,单,实例,就,够用,了,没什么,问题,后来,集群,规模,越来越,大,应用,越来越,多,有,几百个,应用,了,ArgoCD,就,开始,出现,性能,问题,了,比如,同步,慢,UI,卡,API,超时,等等,而且,单,实例,也,有,单点,故障,风险,如果,ArgoCD,挂,了,就,没法,部署,了,影响,很大。

后来,我们,做,了,一些,优化,才,解决,了,高可用,和,性能,的,问题:

  1. ArgoCD高可用部署:把,ArgoCD,部署,成,高可用,模式,多个,副本,redis,也,部署,成,高可用,模式,这样,就算,一个,副本,挂,了,其他,副本,还,能,继续,工作,没有,单点,故障,风险,ArgoCD,官方,有,高可用,的,部署,清单,直接,用,就,行,很,方便。
  1. 应用分片:当,应用,数量,很多,的,时候,可以,把,应用,分片,到,多个,ArgoCD,实例,上,每个,ArgoCD,实例,只,管理,一部分,应用,这样,能,减轻,单个,ArgoCD,实例,的,压力,提升,性能,比如,按,团队,分片,每个,团队,一个,ArgoCD,实例,或者,按,环境,分片,每个,环境,一个,ArgoCD,实例,等等,都,可以,我们,是,按,环境,分片,的,开发,测试,环境,一个,ArgoCD,实例,预发,生产,环境,一个,ArgoCD,实例,效果,还,不错。
  1. 调整同步策略:调整,应用,的,同步,策略,不要,所有,应用,都,开启,自动,同步,和,自动,自愈,只,给,需要,的,应用,开启,这样,能,减轻,ArgoCD,的,压力,而且,自动,同步,的,间隔,也,可以,调,大,一点,不要,太,频繁,比如,默认,是,3分钟,可以,调,到,5分钟,或者,10分钟,根据,实际,情况,调整,能,减轻,压力。
  1. 使用ApplicationSet:如果,有,很多,类似,的,应用,可以,用,ApplicationSet,来,批量,管理,不用,每个,应用,都,单独,创建,Application,能,减少,Application,的,数量,减轻,ArgoCD,的,压力,也,更,方便,管理,比如,一个,团队,有,很多,微服务,每个,微服务,一个,应用,配置,都,类似,就,可以,用,ApplicationSet,批量,生成,很,方便。
  1. 监控和告警:给,ArgoCD,加,监控,和,告警,监控,ArgoCD,的,性能,指标,比如,同步,耗时,API,响应,时间,redis,内存,使用,等等,如果,有,异常,就,告警,及时,发现,和,处理,性能,问题,我们,用,Prometheus,加,Grafana,监控,ArgoCD,效果,还,不错。

通过,这,几个,优化,我们,的,ArgoCD,性能,和,高可用,问题,基本,上,解决,了,现在,几百个,应用,也,能,稳定,运行,没什么,性能,问题。

八、其他一些小坑

除了,上面,说,的,几个,大,坑,还有,一些,小坑,也,简单,说,一下:

  1. Git仓库权限管理:GitOps,仓库,的,权限,要,管理,好,不要,谁,都,能,提交,代码,尤其是,生产,环境,的,配置,要,有,审核,机制,比如,用,Pull Request,加,Code Review,的,方式,至少,要,一个,人,审核,通过,才能,合并,避免,误操作,导致,生产,事故。
  1. 回滚流程:要,提前,设计,好,回滚,流程,出,问题,的,时候,能,快速,回滚,GitOps,的,回滚,很,方便,只,需要,在,Git,仓库,里,回退,到,上一个,版本,就,能,触发,GitOps,回滚,部署,但是,要,注意,数据库,变更,的,回滚,可能,比较,复杂,要,提前,考虑,好。
  1. 测试环境和生产环境一致性:要,尽量,保证,测试,环境,和,生产,环境,的,一致性,这样,在,测试,环境,验证,通过,的,配置,到,生产,环境,也,能,正常,运行,减少,生产,事故,GitOps,因为,配置,都,在,Git,仓库,里,各,环境,的,配置,差异,很,清晰,能,比较,好,地,保证,一致性,但是,还是,要,注意,基础设施,的,差异,比如,集群,版本,节点,配置,等等,也要,尽量,一致。
  1. 文档和培训:要,写,好,文档,对,团队,成员,进行,培训,让,大家,都,了解,GitOps,的,工作流,和,操作,规范,知道,怎么,提交,配置,怎么,部署,怎么,回滚,出,问题,怎么,排查,等等,这样,能,减少,因为,不,熟悉,导致,的,误操作,和,问题。

九、写在最后

GitOps,是,一种,很,好,的,持续,部署,方式,能,带来,很多,好处,但是,实践,起来,也,会,踩,很多,坑,需要,不断,摸索,和,优化,才能,发挥,它,的,价值。

今天,分享,的,这些,坑,都是,我们,团队,这,一年,多,实践,GitOps,踩,过,的,真实,的,坑,以及,我们,的,解决,方案,和,经验,希望,能,帮,到,正在,做,GitOps,或者,准备,做,GitOps,的,朋友,让,大家,少,走,弯路,更快,地,落地,GitOps。

当然,每个,团队,的,情况,都,不一样,遇到,的,坑,也,可能,不一样,解决,方案,也,要,根据,自己,团队,的,实际,情况,来,调整,不要,照搬,要,灵活,运用,关键,是,要,理解,GitOps,的,核心,思想,和,原则,然后,结合,自己,团队,的,情况,设计,适合,自己,的,GitOps,工作流。

而且,GitOps,也,不是,银弹,不是,所有,团队,都,适合,用,GitOps,如果,团队,小,应用,少,部署,不,频繁,用,传统,的,CI/CD,直接,部署,也,没问题,不一定,要,上,GitOps,不要,为了,技术,而,技术,要,根据,实际,需求,选择,适合,的,方案。

最后,希望,大家,都,能,顺利,落地,GitOps,提升,部署,效率,和,系统,稳定性,也,欢迎,大家,在,评论,区,分享,你们,实践,GitOps,踩,过,的,坑,和,经验,一起,交流,一起,进步。