【问题标题】:Difference Between GitOps And Traditional CI/CDGitOps 与传统 CI/CD 的区别
【发布时间】:2020-11-30 01:22:21
【问题描述】:

在正常的kubernetes CI/CD过程中,会发生以下过​​程:

  • 从 git 克隆代码
  • 构建并推送 docker 镜像
  • 使用更新的代码更新 Kubernetes 部署

根据 gitops 定义

GitOps 是一种新的持续部署方法,它利用 Git 作为声明性基础设施和应用程序的单一事实来源,提供修订和变更控制。使用 GitOps,系统通过提交拉取请求(和后续合并)来运行,以实现 Git 存储库中表示的系统的所需状态

我对 gitops 的理解是,当您在 git 中更新任何内容时(因为这是事实的来源),所需的 kubernetes 状态将更改为最新状态并部署最新代码。

没有 gitops 的传统 CI/CD 的结束结果:新代码部署为 kubernetes 部署

gitops的结束结果:新代码部署为kubernetes部署

我无法弄清楚其中的区别。抱歉,如果您觉得这听起来很奇怪。但我有点新,正在探索 gitops 。

提前感谢您的回复

【问题讨论】:

  • k8s 上下文中的 GitOps 通常假定您使用专门的 GitOps 工具,例如 ArgoCD 或 Flux,请参阅我关于玩具项目的工作实施的文章:itnext.io/…
  • @taleodor 所以你是说仅仅使用 gitops 工具就可以使 CI CD 成为 gitops?
  • 接近那个。更具体地说,GitOps 假设对存储库中的更改具有近乎实时的反应性。这样您就可以消除存储库状态与环境状态之间的差距。如果没有专门的工具,这很难实现。

标签: git kubernetes continuous-integration continuous-deployment


【解决方案1】:

简短回答 - GitOps 是一个框架,CI/CD 是一个过程!

GitOps 旨在利用 Git 作为事实来源,并授权开发人员执行 IT 操作。它通过持续集成和持续交付 (CI/CD) 自动化 Git 工作流程。让我在这里举个例子——我有一个 kubernetes 集群,我为它设置了 CI/CD 管道以实现自动化,但我们曾经看到有人直接在集群上手动更改应用程序版本的事件(到处都发生!)。我们利用 GitOps 声明了我的集群,这样每次有人进行手动更改时,它都会覆盖并恢复到在 Git 中声明的原始状态(使用 Flux 等 GitOps 代理完成)。

【讨论】:

    【解决方案2】:

    CICD专注于全链条:

    • 你签入你的代码
    • 代码得到测试
    • 容器已创建并上传
    • 容器被部署
    • 容器得到测试

    加上中间的许多其他步骤。这就是为什么它是一个持续集成和部署。你也可以说,端到端的过程。

    GitOps 不关心您的代码、docker 构建等等。它完全专注于保持您的应用程序更新(部署部分),以极端形式,通过流量转移和健康检查、自动回退等完全自动化的渐进式交付。

    除此之外,您还有其他一些有时很重要的小细节,例如推送与拉取、集群自治、关注点分离。

    【讨论】:

    • 但是应用程序将如何更新?一旦代码更新......对吗?所以最终你需要构建 docker 来更新应用程序
    • 您可以有两个更新触发器,一个是部署信息或配置更改,或者您有一个容器的更新。 Flux 或 ArgoCD 可以对两者做出反应,主要是结合起来进行滚动或渐进式更新。
    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多