随着DevOps的发展以及采用DevOps思维方式的组织不断增多,DevOps的许多不同方面都日趋成熟。随着DevOps的成熟,在概念和思维方式(DevSecOps,AIOps,SecOps等)领域也在不断发展。GitOps是DevOps中的另一个萌芽概念,其根源在于使开发人员能够使用git创建CI/CD来自动化多云和多容器编排集群的开发和运营。
DevOps大家都很熟悉,不做介绍,GitOps是一种集成在DevOps周期中的技术,是一种用于存储,管理和检索K8s,Swarm等容器协调器的部署描述符的方法。现在,它已扩展到可以是IaC文档(Terraform, Cloudformation等),软件配置(Ansible,Puppet等)。
GitOps 的两种模式
GitOps 的部署策略有两种实现方式:基于 Push 的方式和基于 Pull 的方式。两者的主要区别如下:
基于 Push 的方式
基于 Pull 的方式
Push 方式是作为上帝视角来做环境的更新,而 Pull 方式则可以利用权限鉴权等信息做安全性及合规性保障。
Push 方式是在代码变更后触发更新,如果有人手动修改了集群中的配置,集群中的配置就会和代码库中的配置有差异;而 Pull 方式实现方式,则是检测集群和代码库中的配置,当发现不一致时,自动/手动触发更新,让环境中使用的配置始终和代码库中的保持一致。
GitOps 是实现 DevOps 的方法之一。
GitOps 以 Git 作为唯一可信源,并结合一些工具例如 FluxCD 或 ArgoCD 来实现持续部署。
此外,GitOps 和 DevOps 实际上还涉及到不同的领域,例如:
- 持续构建
- 代码扫描
- 单元测试
- 持续部署
- 日志、监控和告警
GitOps 相比较 DevOps 概念诞生相对晚一些,工具链也比较新。比如:
- 容器和镜像:Docker
- 持续集成:GitHub Action、Jenkins、Tekton
- 镜像仓库:Harbor
- 应用定义:Helm、Kustomize
- 持续部署:FluxCD、ArgoCD
- 秘钥管理:Vault
- 容器编排:K8s
- 网关:Ingress-Nginx
- 日志:Grafana Loki、Fluentd
- 监控:Grafana
- 告警:Prometheus
- 应用开发:Nocalhost