发布于 2026-01-06 3 阅读
0

面向开发者的 GitOps 入门指南!

面向开发者的 GitOps 入门指南!

GitOps 是一种使用 Git 部署和管理软件应用程序的方法论。它也被称为“运维即代码”或“代码驱动运维”,并运用 DevOps 的原则来简化整个组织的软件更新流程。它主要采用涉及 Git 和 Kubernetes 的协作式软件开发模型。

你也可以将 GitOps 定义为 Git 和 Ops 的结合,它是一种运用运维原则来管理版本控制系统的实践。当我们谈论版本控制时,通常指的是代码仓库中的代码。GitOps 更进一步,将运维原则应用于版本控制系统之上。

什么是 GitOps?

GitOps图片来源:灵感来自 VMware

“GitOps”一词最初由 Weaveworks 的工程师发明并推广,并作为一套最佳云原生实践与 Weaveworks 的工具相结合,向 DevOps 世界展示,以帮助开发人员通过 Git 操作复杂的 Kubernetes 工作流。

GitOps 是一种云原生软件部署实践,它使用 Git 作为系统中所有部署资源的单一数据源。每当推出新的部署时,开发人员都需要通过 Git 定义所有内容。这种方法简化了部署自动化流程,并有助于提高可观测性。这增强了 DevOps 团队的部署信心,并提高了开发人员的整体生产力。

GitOps 要求通过 Git 以声明式的方式定义资源,以便轻松维护资源状态。它鼓励自动化部署,最大限度地减少或无需人工干预,并在发生意外情况时能够快速回滚到之前的状态。

GitOps 使开发人员能够将基础设施代码推送到环境代码库并感知变更。GitOps 会对软件和基础设施的环境进行必要的更改,然后将其进一步推进到 CI/CD 流水线中。

GitOps 的运作遵循四个基本原则:

  1. 以 YAML 格式,以声明式形式定义整个系统。
  2. 使用 Git 作为唯一真理来源,并在 Git 中对规范的所需系统/环境状态进行版本控制。
  3. 自动批准对所需状态的更改。
  4. 采用基础设施即代码(IaC)并确保正确性。

简单的 GitOps 工作流程

GitOps 的基本原则是让 Git 成为数据源,包括将所有内容都转化为代码,并将所有数据存储和维护在 Git 中。在部署方面,使用操作符以声明式的方式部署 Git 和 YAML 中配置的内容。由于所有开发人员都熟悉 Git,GitOps 可以简化他们复杂的工作流程。

因此,对于 Kubernetes 而言,应用程序代码、容器镜像和所有相关的清单文件都将存储在 Git 中,任何更改都将通过 Git 作为唯一的数据源进行。
GitOps 工作流程

实践 GitOps 的方法

GitOps 可以采用两种部署策略:推送流水线和拉取流水线。它们的区别在于如何确保部署环境与所需的基础设施相匹配。

  • 推送流水线策略中
    ,CI/CD 工具扮演着至关重要的角色。许多工具都采用这种策略,将源代码和部署清单文件存储在同一个代码仓库中。每当有新的更新时,构建流水线就会被触发。流水线会创建容器镜像,并将最新的更改推送到环境中。

  • 拉取流水线策略:
    容器镜像和声明式配置(以 YAML 格式编写)的更改在集群内部的 CD 引擎运行期间从集群内部拉取到集群中。

GitOps的优势

  • 通过采用 GitOps 方法,DevOps 团队可以轻松处理灾难恢复,并在发生任何灾难性事件时顺利进行管理。

  • 通过 Git 的强大加密性和正确性,可以更好地跟踪集群中的任何更改,从而提高可观测性。

  • 对于任何了解 Git 的人来说,它都是透明且直接的,因为它使用声明式配置来描述每个过程。

  • GitOps 能够以尽可能简单的方式实现持续频繁的部署,而无需管理大量工具,因为所有操作都在 Git 中进行,Git 是唯一的数据源。

  • 通过 GitOps 可以更高效地管理复杂的 Kubernetes 升级、部署和功能。

  • 由于 GitOps 中的每一个操作都会通过 Git 进行追踪,因此可观测性将变得很容易。

  • GitOps 通过在整个工程团队中标准化 GitOps 工作流程,从而提高生产力。

DevOps 与 GitOps

DevOps 工作流程包括:

  • 基于规范模型
  • 与帮助云原生原则相关
  • 依赖 CI/CD 流水线作为驱动创新和自动化的主要工具
  • 灵活。DevOps 的实施方式有很多种,而且方法多种多样,没有固定的模式。

相比之下,GitOps 工作流程是:

  • 声明式
  • 专注于云原生和微服务应用原则
  • Git 是创新和自动化的主要工具。
  • 严格;遵循特定的流程并具有一定程度的正确性,或者说,什么是 GitOps,什么不是 GitOps。

DevOps 流水线和 GitOps 流水线
DevOps 流水线图片来源:TechTarget

使用 ArgoCD 进行 GitOps

GitOps 是一种云原生方法,它以 Git 为核心,贯穿整个软件交付流程。在本教程中,我们将了解如何轻松地将 Argo 与 Kubernetes 集群集成,并以自动化方式交付变更。

先决条件:

  • 来自任何云提供商的 Kubernetes 集群(您也可以使用 Minikube 或 Kind 创建集群)
  • Argo CD CLI - 查看官方文档

教程:

我们将使用谷歌云创建一个集群。

首先,我们需要创建一个 Kubernetes 集群来托管我们的 ArgoCD。
簇

接下来,我们需要创建 ArgoCD 命名空间,并将所有清单文件安装到我们创建的集群上。

kubectl create namespace argocd

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

下载 Argo CD CLI
brew install argocd

现在需要访问 Argo CD API 服务器。我们可以使用以下命令将其作为服务类型的负载均衡器获取。

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

返回集群,然后转到“服务和入口”选项卡,查看外部负载均衡器。
负载均衡服务器

打开链接,您应该可以访问 ArgoCD 用户界面。
GitOps 用户界面

现在,您需要用户名和密码。默认用户名是“admin”,密码可以使用以下命令生成。

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

提供登录凭据后,您应该可以看到您的 ArgoCD 设置。
GitOps 控制面板

使用 ArgoCD GitOps:fork 一个 Git 仓库

我们来 Fork 一个示例仓库,例如这个:https: //github.com/argoproj/argocd-example-apps

fork 示例仓库后,进入 Argo 的设置界面,创建一个新应用,并添加相关信息。
创建 GitOps 应用

应用程序创建完成后,在 ArgoCD UI 中会显示为不同步状态;要使其同步,我们需要点击“同步”按钮,然后应用程序就会显示为正常状态。
已添加 GitOps 应用程序

现在,回到你 fork 的示例仓库,修改一些内容。假设你将 guestbook-ui-deployment.yaml 文件中的副本数从 1 改为 2。接下来会发生什么?应用程序会失去同步,你需要再次点击“同步”按钮,然后你应该会看到所有内容通过拉取策略自动更新。
同步应用程序

您可以通过访问集群并查看新更改来验证这些更改。 现在您可以看到两个副本正在运行。
运行中的副本

使用 Harness 的 GitOps

工具和 GitOps

首先,您需要注册一个免费的 Harness 帐户,然后导航到 GitOps 选项卡。

从侧边菜单导航至“部署”>“GitOps”。
运用 GitOps

Harness 会代表您安装 Argo CD,并将该 Argo CD 实例连接到 Harness。您只需要一个 Kubernetes 集群。现在,我们需要配置在 Harness 中执行 GitOps 所需的一切。

导航至 GitOps > 设置 > GitOps 代理。
然后,逐一连接下面所示的所有必需的 GitOps 设置。
GitOps 设置

所有组件连接并验证完毕后,即可开始通过 Harness GitOps 部署应用程序。以著名的留言簿示例为例,部署完成后,您应该会看到如下所示的 Harness GitOps 控制面板。
Harness 上的 GitOps 应用程序

您可以按照这个简单的Harness GitOps 教程来了解通过Harness GitOps部署应用程序是多么直观和简单

GitOps 和复杂应用程序部署

我们刚刚了解了如何使用 GitOps 方法部署应用程序变更。GitOps 在云原生领域正迅速发展,开发者们喜爱这种方法,因为它易于设置。此外,由于 Git 是主要工具,学习曲线也显著降低。自动化是实现快速可靠软件交付的关键,而 GitOps 方法在这方面恰好能派上用场。

虽然 GitOps 可能并非解决所有云原生问题的万能方案,但我相信这种方法很快就会在软件交付领域占据重要地位。GitOps 强调单一数据源,它利用了每个开发者都熟悉的简单工具——Git。结合 Kubernetes 等云原生工具,GitOps 可以成为实现真正数字化转型的绝佳途径。GitOps 必将长期存在,并且拥有光明的前景。实施完善的 DevOps 流程需要付出大量努力。幸运的是,GitOps 可以提供帮助。

文章来源:https://dev.to/pavanbelagatti/getting-started-with-gitops-for-developers-4aej