0%

GitOps介绍

一、GitOps的优势

GitOps专注于Git工作流、IaC、CI/CD管道,不可变服务器(immutable servers)、跟踪、以及可观测性等优秀实践模型,因此它代表了对于Kubernetes云原生应用管理的高级状态。

  • 简化持续部署
  • 缩短平均修复时间(Mean-time-to-repair,MTTR)MTTR是衡量DevOps团队绩效的一项关键指由于GitOps保留了版本控制系统中的所有修改,并且能够实现自动化的管理,因此,开发团队能够全面了解目标环境中的变化,轻松发现和修复错误,从而显著降低MTTR。
  • 简化Kubernetes管理

二、原则

img

  • 系统的目标状态通过 Git 进行版本控制
  • 对目标状态的变更批准后将自动应用到系统
  • 驱动收敛 & 上报偏离

三、流水线推与拉模型

1.Push Pipeline

推模型的原理 :
img

代码被合并到主分支后会触发 CI 系统进行构建和一系列的测试,并将新生成的镜像推送至镜像仓库,最后再通过kubectl set image、helm upgrade、ksonnet apply等方式将新版本直接应用到系统,整个流程如下图所示
img
缺点:

  • 跨越安全边界共享秘钥,集群密钥暴露给CI组件。
  • 回滚操作复杂
  • 难以快速重建集群

2.Pull Pipeline

拉模型原理
img
通过 pull request 向主分支提交包含新功能的代码。
代码审核通过后将被合并至主分支。
合并行为将触发 CI 系统进行构建和一系列的测试,并将新生成的镜像推送至镜像仓库。
GitOps 检测到有新的镜像,会提取最新的镜像标记,然后同步到 Git 配置仓库的清单中。
GitOps 检测到集群状态过期,会从配置仓库中拉取更新后的清单,并将包含新功能的镜像部署到集群里。整个流程如下图所示
img

四、工具

1.工具集:

最全的 GitOps 工具选型,30+ 款工具随你挑

  • Infrastructure as Code & Configuration as Code

    • Terraform
    • CloudFormation
    • ROS
    • Kubernetes
    • Chef
    • Ansible
  • 版本控制工具

    • GitLab
    • Bitbucket
  • 敏感信息管理

    • Sealed Secrets
    • SOPS
    • Vault
  • 状态比较工具

    • Kubediff
  • 交付流水线

    • Jenkins X
    • Argo CD
    • Weave Flux
    • Spinnaker

2.CD工具对比

img

五、实现分析

1.GitOps流水线

img
Config Update 和 Deploy Operator是需要进行设计开发的,它们是实现GitOps流水线必须的关键组件。GitOps赋予了它们神奇的魔法,它们既是自动化容器升级和发布到线上环境的工具,可能也要负责服务、部署、网络策略甚至路由规则等任务。因此,Config Update 和 Deploy Operator是映射代码,服务和运行集群之间所有关系的“粘合剂”。
关键点:

  • CI工具
  • CD工具
  • 状态diff
  • 观测

2.目前 CICD实现方案(推模型)

技术组件:

  • 代码库:gogs
  • 任务:Jenkins
  • 编译打包:maven、nexus

流水线特点:

  • 支持基础的Java代码编译打包、镜像构建和部署
  • 支持批量流水线(同一阶段任务),组合流水线(多阶段自定义设置)。

不足

  • 不兼容多代码仓库,不支持多语言。
  • 流水线功能偏弱。不支持可视化设计,流水线阶段不完善,缺少像代码扫描、单元测试、人工卡点等。

3.Choerodon的GitOps方案

img

技术组件

  • 代码库:gitlab
  • 代码编译:Maven
  • 测试与代码扫描:Junit、snarqube、se
  • 镜像: harbor
  • CI工具:gitlab ci
  • CD工具: activiti工作流引擎实现流水线的可视化设计和编排。

cheorodon通过上面的组件实现了GitOps,并且在代码管理,流水线这块功能比较完善。
cheorodon的流水线分为两个阶段,每个阶段都可以添加新阶段。

  • CI阶段:添加阶段时,选择为阶段属性为CI阶段后,用户便只能在此阶段中添加CI类型的任务,其中包含:构建、代码检查、发布Chart以及自定义类型的CI任务;
  • CD阶段:添加阶段时,选择为CD阶段后,用户就只能在此阶段中添加CD类型的任务,其中包含:部署、主机部署以及人工卡点类型的CD任务;

添加CI任务
img

添加CD任务
img

img

4.云效流水线原型

云效通过内置非常丰富的流水线模板,加上可视化设计的自定义模板来实现流水线,整体功能比较完善。
内置的流水模板支持多语言

img

自定义流水线,采了可视化设计的工作流引擎。
可以快速设置:

img

也可以根据开发过程中的编译、构建、测试、发布各个环节组合流水线
img

5.基于Argo CD的方案

img
Argo CD 被实现为 kubernetes 控制器,该控制器连续监视正在运行的应用程序,并将当前的活动状态与所需的目标状态(在 Git 存储库中指定)进行比较。处于活动状态偏离目标状态的已部署应用程序被视为 OutOfSync。Argo CD 报告并可视化差异,同时提供了自动或手动将实时状态同步回所需目标状态的功能。在 Git 存储库中对所需目标状态所做的任何修改都可以自动应用并反映在指定的目标环境中。

六、方案构想

img

七、 参考资料