面向开发者的 GitOps 入门指南!
GitOps 是一种使用 Git 部署和管理软件应用程序的方法论。它也被称为“运维即代码”或“代码驱动运维”,并运用 DevOps 的原则来简化整个组织的软件更新流程。它主要采用涉及 Git 和 Kubernetes 的协作式软件开发模型。
你也可以将 GitOps 定义为 Git 和 Ops 的结合,它是一种运用运维原则来管理版本控制系统的实践。当我们谈论版本控制时,通常指的是代码仓库中的代码。GitOps 更进一步,将运维原则应用于版本控制系统之上。
什么是 GitOps?
“GitOps”一词最初由 Weaveworks 的工程师发明并推广,并作为一套最佳云原生实践与 Weaveworks 的工具相结合,向 DevOps 世界展示,以帮助开发人员通过 Git 操作复杂的 Kubernetes 工作流。
GitOps 是一种云原生软件部署实践,它使用 Git 作为系统中所有部署资源的单一数据源。每当推出新的部署时,开发人员都需要通过 Git 定义所有内容。这种方法简化了部署自动化流程,并有助于提高可观测性。这增强了 DevOps 团队的部署信心,并提高了开发人员的整体生产力。
GitOps 要求通过 Git 以声明式的方式定义资源,以便轻松维护资源状态。它鼓励自动化部署,最大限度地减少或无需人工干预,并在发生意外情况时能够快速回滚到之前的状态。
GitOps 使开发人员能够将基础设施代码推送到环境代码库并感知变更。GitOps 会对软件和基础设施的环境进行必要的更改,然后将其进一步推进到 CI/CD 流水线中。
GitOps 的运作遵循四个基本原则:
- 以 YAML 格式,以声明式形式定义整个系统。
- 使用 Git 作为唯一真理来源,并在 Git 中对规范的所需系统/环境状态进行版本控制。
- 自动批准对所需状态的更改。
- 采用基础设施即代码(IaC)并确保正确性。
简单的 GitOps 工作流程
GitOps 的基本原则是让 Git 成为数据源,包括将所有内容都转化为代码,并将所有数据存储和维护在 Git 中。在部署方面,使用操作符以声明式的方式部署 Git 和 YAML 中配置的内容。由于所有开发人员都熟悉 Git,GitOps 可以简化他们复杂的工作流程。
因此,对于 Kubernetes 而言,应用程序代码、容器镜像和所有相关的清单文件都将存储在 Git 中,任何更改都将通过 Git 作为唯一的数据源进行。
实践 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 流水线
图片来源: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 CLIbrew install argocd
现在需要访问 Argo CD API 服务器。我们可以使用以下命令将其作为服务类型的负载均衡器获取。
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
返回集群,然后转到“服务和入口”选项卡,查看外部负载均衡器。
现在,您需要用户名和密码。默认用户名是“admin”,密码可以使用以下命令生成。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
使用 ArgoCD GitOps:fork 一个 Git 仓库
我们来 Fork 一个示例仓库,例如这个:https: //github.com/argoproj/argocd-example-apps
fork 示例仓库后,进入 Argo 的设置界面,创建一个新应用,并添加相关信息。
应用程序创建完成后,在 ArgoCD UI 中会显示为不同步状态;要使其同步,我们需要点击“同步”按钮,然后应用程序就会显示为正常状态。
现在,回到你 fork 的示例仓库,修改一些内容。假设你将 guestbook-ui-deployment.yaml 文件中的副本数从 1 改为 2。接下来会发生什么?应用程序会失去同步,你需要再次点击“同步”按钮,然后你应该会看到所有内容通过拉取策略自动更新。
您可以通过访问集群并查看新更改来验证这些更改。 现在您可以看到两个副本正在运行。
使用 Harness 的 GitOps
首先,您需要注册一个免费的 Harness 帐户,然后导航到 GitOps 选项卡。
Harness 会代表您安装 Argo CD,并将该 Argo CD 实例连接到 Harness。您只需要一个 Kubernetes 集群。现在,我们需要配置在 Harness 中执行 GitOps 所需的一切。
导航至 GitOps > 设置 > GitOps 代理。
然后,逐一连接下面所示的所有必需的 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




