GitOps 简化并自动化了SDLC中最繁重的手动操作——基础设施配置和管理。GitOps 使DevOps 基础架构更具弹性、一致和可靠,如果您依赖手动部署,这些特性需要大量财富才能实现。
本文解释了 GitOps 是什么,并列出了该策略为软件开发团队和项目带来的好处。继续阅读以清楚地了解采用 GitOps 是否对您的公司来说是一项值得的投资。
什么是 GitOps?
GitOps 是将应用程序开发的DevOps 原则应用于基础设施管理的实践。借助 GitOps,开发人员将基础架构视为代码,就像对待应用程序代码一样,以自动更新并使更改可追溯。
采用 GitOps 的团队将基础架构配置文件编写为代码,并将它们保存在专用的Git存储库中。Git 充当所有基础架构的单一事实来源,它支持:
- 可靠的配置版本控制。
- 高度一致性,因为文件在您每次部署时都会生成相同的环境(与应用程序源代码生成相同的应用程序二进制文件的方式相同)。
一旦团队向 Git 存储库提交更改,DevOps 管道会自动部署基础架构更新,无需人工干预。GitOps 是一个相对年轻的策略。总部位于英国的公司 Weaveworks 开发了该框架的基础并于 2017 年创造了该术语。从那时起,GitOps 成为需要可靠且可扩展的基础架构的用例的首选实践,例如:
- 云原生架构。
- 任何涉及Kubernetes 的基础设施。
- 微服务架构。
- 具有持续交付功能的管道,可自动将更改部署到生产中。
- 混合和多云部署。
GitOps 提供高度以开发人员为中心的体验。基础设施管理发生在与应用程序开发相同的版本控制系统中,使团队能够在中央位置进行协作,同时受益于 Git 的内置功能。
GitOps 和 DevOps 有什么区别
虽然 GitOps 和 DevOps 之间有很多重叠,但这是两个不同的概念:
- DevOps 是一种整合开发 (Dev) 和 IT 运营 (Ops) 团队工作的文化。DevOps 工具和实践打破了 Dev 和 Ops 之间的孤岛,同时提高了代码质量并缩短了 SDLC。
- GitOps 是 DevOps 的一个子集,专门专注于通过 Git 自动化基础设施管理。GitOps 是 IaC 发展的下一步,IaC 本身起源于DevOps 最佳实践。
以下是 GitOps 和 DevOps 之间的其他一些显着差异:
- GitOps 是一个专门的框架,而 DevOps 更像是一种哲学,需要对公司创建软件的方式进行根本性的改变。
- DevOps 不需要使用任何特定工具。GitOps 要求团队使用 Git(尽管您有多种其他工具可以与 Git 一起使用)。
- 一些 DevOps 管道具有用于部署的手动触发器。使用 GitOps,触发器始终是自动的,并且基于对 Git 存储库的更改。
- 您可以在没有 GitOps 的情况下拥有 DevOps,但反之则不然。
DevOps 和 GitOps 都适用于任何类型的基础架构,但它们的优势在云计算和裸机云环境中才能真正感受到。这两种策略都要求团队熟悉 IaC,而且都严重依赖自动化来加快流程并在问题影响最终用户之前解决问题。
GitOps 是如何工作的?
GitOps 团队使用Terraform 或 Ansible等工具以声明方式配置系统。这种方法侧重于结果(期望的状态)而不是达到结果的确切步骤。这是一个简化的命令式语句(与声明式方法相反)的样子:
- 在 XZY 机器上安装以下依赖项。
- 从 XYZ 网站下载代码。
- 将代码移至此目录。
- 对以下机器再重复此过程四次。
这个过程的声明版本会简单地写成:以下五台机器有来自这个 URL 的软件,安装在这个目录中。您描述目标环境的所需状态,系统会自动根据请求进行调整。
GitOps 团队将所有具有声明状态的文件存储在一个 Git 存储库中。在 Git 中存储文件可以实现版本控制,帮助团队跟踪基础架构随时间的变化。版本控制也有助于:
- 故障排除。
- 审计。
- 回滚到以前的状态。
一旦团队对存储库进行了更改,CI 管道就会验证配置文件并运行自动化测试,之后任何员工都可以审查和批准提交。然后更新通过 CD 管道合并到主分支。
GitOps 提供了两种将更改应用到生产环境的主要方法:
- Pull 方法:系统持续监控 Git 存储库的更新。如果有变化,系统会提取新配置并将其应用于基础架构。
- 推送方式(无代理):开发人员对 Git 存储库进行更改,系统立即触发拉取更改并将其应用到基础设施。
最后,收敛机制将存储库中的更新应用到生产集群。编排器将集群的当前状态与 Git 中的更新进行比较并进行更改,直到实际状态和所需状态相同。
如何开始使用 GitOps
如果您的团队已经使用 Git 作为其 SCM 工具,并且已正确设置 DevOps 管道,那么实施 GitOps 很简单。你应该做的就是:
- 将所有基础架构代码移动到专用的 Git 存储库中。
- 配置CI/CD 管道,使存储库成为交付管道的一部分。
如果您的组织在 DevOps 成熟度等级上较低并且不使用版本控制,请从设置Git 存储库开始。Git 与平台无关,因此请选择您熟悉的任何本地或基于云的存储库。以下是一些受欢迎的选项:
- GitHub。
- 位桶。
- Azure 存储库。
- GitLab。
在声明式编程、Git 的内置功能和 IaC 方面培训您的团队。尝试引进一些具有 GitOps 实践经验的新专家,同时为现有员工组织培训课程。接下来,您必须设置一个 CI/CD 管道平台来自动执行交付过程。管道必须跟踪对 Git 存储库的更改并自动将它们部署到环境中。使用您的团队熟悉的工具。一般来说,Jenkins和 CircleCI 是任何 Git 存储库的绝佳选择。BitBucket Pipeline 和 GitLab Pipelines 需要它们自己的存储库。
一旦 CI/CD 管道启动并运行,您就需要一个 GitOps 操作员。该机制充当管道和实际系统之间的“中间人”。三个最受欢迎的选项是:
- Kubernetes 运营商。
- Azure 服务运营商。
- Terraform 云运营商。
操作员确保实际和期望的环境状态相匹配。该机制还提供持续监控,以维护您的基础架构的理想状态。
GitOps 的好处
以下是在贵公司采用 GitOps 的主要好处:
- 简化的基础架构管理: GitOps 使团队能够将基础架构作为整个 DevOps 流程的一部分进行管理。借助CI/CD 工具和自动化部署,您可以快速测试和部署更改。
- 提高可靠性:所有基础架构更改都经过全面审查和测试。经过良好测试的更新显着降低了出错和停机的可能性。
- 更快的部署:一旦更新合并到主分支,就会自动部署基础设施。这样的设置减少了部署更改所需的时间,使团队能够更快、更频繁地发布新功能。
- 快速回滚: Git 的版本控制使团队能够根据需要恢复和回滚。如果新更改破坏了集群中的某些内容,您可以轻松解决问题。
- 授权开发人员:开发团队可以执行传统上留给 ITOps 的任务。如果开发人员希望部署新应用程序或更改现有应用程序,他们所做的只是更新存储库,自动化流程会处理其余部分。
- 更多的团队间协作:就像 DevOps 一样,GitOps 需要开发人员、运营团队和其他 IT 利益相关者之间的协作。
- 减少配置漂移的可能性: Git 为配置文件的更改提供完整的审计跟踪。环境高度一致,您可以降低配置漂移的风险。
- 完整的 可听性: Git 允许开发人员随着时间的推移跟踪基础架构。每当出现故障或出现意外行为时,这种关于谁对集群做了什么以及何时做了什么的审计跟踪就很有价值。
- 合规性:使用声明性基础架构即代码可以更轻松地实现整个交付管道的合规性。
- 安全提升: GitOps 使团队能够实施基于 Git 的安全策略并集中管理。更新在合并到主分支之前得到彻底审查并需要批准,这降低了错误或恶意代码的危险。
GitOps 缺点
虽然 GitOps 提供了一系列好处,但您必须牢记一些潜在的缺点。以下是采用 GitOps 的主要问题:
- 难以设置: GitOps 的最大挑战是流程的初始设置。这种做法需要紧密集成和大量自动化,而这通常很难正确设置。
- 额外的复杂性: GitOps 要求团队采用新的工作流程,如果您不熟悉 Git 和 DevOps 实践,这将是一项挑战。许多采用者必须在招聘和员工培训方面投入大量资金,以应对陡峭的学习曲线。
- 兼容性问题:一些应用程序不适合 GitOps。许多需要人工干预或专门部署流程的遗留系统很难(甚至不可能)与 GitOps 集成。
- 抵制变革:采用 GitOps 需要向协作、自动化和持续改进进行重大的文化转变。许多团队对这一变化并不热心,这可能会在采用 GitOps 期间和之后引起问题。
- 确保 Git 安全:由于 Git 是唯一的真实来源,该平台的存储库成为网络攻击的主要目标。您必须控制对配置文件的访问以防止数据泄露。
GitOps 正在取代 DevOps 吗?
不,GitOps 不会取代 DevOps,也不会尝试这样做。GitOps 旨在取代严重依赖手动任务和测试的老式基础设施管理。公司将 GitOps 与其他 DevOps 实践和工具结合使用,以实现更高水平的自动化并加快上市时间。GitOps 通过以下方式支持 DevOps 计划:
- 灵活且可扩展的基础架构,使团队更加敏捷。
- 跟踪、回滚和审核更改的能力,这大大简化了团队解决问题的方式。
- 进一步激励开发人员、ITOps 专家和其他员工在配置管理方面进行协作。
- 能够自动部署和管理基础设施,同时确保所有环境的一致性。
您的团队和工作流程是否适合 GitOps?
GitOps 并不是每个团队和项目的正确选择。一些公司认为依赖单一工具和自动构建基础设施并不理想。但是,如果您的团队拥有必要的专业知识并且您已经投资于 DevOps,那么采用 GitOps 是不二之选。该实践将所有耗时的手动基础设施管理任务转化为自动化管道,从而提高基础设施的可见性、可靠性和稳定性。