什么是 GitOps?
什么是 GitOps?
GitOps 是一种用于持续部署数字基础设施、配置和合规策略的运维框架。GitOps 利用 Git 版本控制系统和声明式基础设施即代码(IaC)来描述系统的预期状态,包括机器、操作系统和集群的配置。使用 GitOps 时,向 Git 存储库提交代码即可触发针对特定环境的部署。GitOps 控制器会监控生产环境,检测是否偏离了预期状态,并能从 Git 拉取配置以修正运行中系统的状态。对于需要在云端和容器化环境中部署及管理基础设施的组织而言,GitOps 是一项关键的效率提升机制。
GitOps 有哪些优势?
GitOps 具有多项优势,可以对组织的运营产生重大影响。
加快部署速度
使用 GitOps,任何基础设施和应用程序配置或环境变更都能通过自动化部署即时反映在生产系统中。这种自动化部署流程支持每天进行多达数千次的增量变更并即时生效,从而加速基础设施开发与运维团队的工作流。借助代码变更的版本化历史记录,任何包含错误的部署都可以回滚到之前的稳定版本。
降低跨项目的管理复杂性
GitOps 为开发人员和基础设施工程师建立了可重复的工作流和管道。得益于可重复的流程,运维任务变得更加简单且标准化,从而减少了配置过程中的人工操作。
增强安全性与合规性
将声明性策略即代码纳入项目,有助于确保每次部署都符合 Git 存储库中定义的合规标准。将安全与合规控制措施代码化并进行版本管理,不仅能助您满足法律法规及行业规范的要求,还能通过变更的版本化日志提供审计跟踪记录。
实现系统稳定性自动化
控制器软件可将运行系统的当前状态与版本化的代码历史进行比对,以检测是否存在配置漂移。一旦发现漂移,控制器软件便能从代码库拉取更新,并在可能的情况下将其应用到运行系统中,从而使系统状态恢复正常。
GitOps 如何运作?
GitOps 的具体运作方式取决于您的 Git 配置或所选的 GitOps 工具。不过,所有环境都具备一些共同的功能。
Git 存储库
您将用于描述软件、基础设施、策略及其他配置的源代码存储在 Git 源码存储库中,并统一使用同一个版本控制系统。这些代码遵循与软件开发相同的 Git 最佳实践,例如针对实验性功能和错误修复使用分支,以及保持主源码存储库的整洁。基础设施工程师通过发起拉取请求来合并分支上的更改,而将更改推送到分支则用于共享对基础设施代码的更新。这里的拉取请求与控制器软件执行的拉取操作有所不同。
源存储库的组织方式取决于您的需求。例如,有些存储库仅通过不同的文件夹来区分应用代码、基础设施代码和配置代码,而另一些则为每种代码设立独立的存储库。使用单独的存储库是管理跨项目权限的最简单方法,而使用单个存储库则能更轻松地跟踪依赖关系。
这些源存储库是系统配置和环境的理想状态。存储库包含 Kubernetes 清单、YAML、JSON 和 ENV 配置文件等文件。
GitOps 工具
组织可以使用专门的 GitOps、基础设施即代码和策略引擎工具来协助构建、管理和扩展项目及环境。这些工具可以与云环境、云服务及 DevOps 环境对接,从而支持在多供应商场景下的集成。
GitOps 控制器与持续漂移检查
GitOps 控制器是负责监控系统当前状态并将其与 Git 中记录的系统状态进行比对的软件模块。GitOps 控制器(也称为 GitOps Operator)还可以从 Git 执行拉取操作,使当前系统与 Git 中存储的预期状态保持同步。
系统会将生产环境中应用程序的运行状态,与作为单一事实来源的 Git 版本历史中声明的系统状态进行比对,以检查是否存在差异或漂移。如果漂移超出设置范围,GitOps 控制器便会管理应用程序与 Git 存储库的同步,使其恢复一致。
自动化策略执行与策略引擎
通过将策略即代码作为声明式配置的一部分纳入源代码,Git 能够在项目进入生产环境之前自动执行策略。策略即代码越来越被视为 GitOps 的核心原则,对于任何重视合规性的组织而言都至关重要。使用策略即代码,其他代码变更必须通过策略检查关卡,才能进入下一阶段。GitOps 控制器还能检查已部署的资源是否偏离了 Git 中定义的策略,并向人工操作员发出警报或采取自动修复措施。
GitOps 与传统 CI/CD 有何区别?
传统的持续集成与持续交付(CI/CD)是 DevOps 的核心功能,而 DevOps 本质上是对软件开发与交付生命周期的自动化。
GitOps 虽然能涵盖软件开发与交付的 CI/CD 流程,但其主要用途在于基础设施、配置及策略变更的管理与控制。例如,采用 GitOps 的组织可能并不自行开发软件应用程序,而是部署虚拟化基础设施站点,供客户运行其各自的应用程序。
GitOps 工作流有哪些最佳实践?
GitOps 遵循 Git 和 CI/CD 工作流的最佳实践。
遵循可重复的 Git 模式
为了确保项目间的可复用性,应在所有项目中采用统一的目录结构、标签规范和分支命名策略。您可以将这些 Git 指南记录在全组织通用的操作手册中。在 Git 系统中设定全局层级、标签和默认配置,并通过 CI/CD 检查强制执行。
使用多环境并设置准入条件
基础设施在部署到生产环境之前,务必经过测试。在实践中,这意味着针对不同活动(包括配置和基础设施变更)使用多个环境。例如,可以考虑使用测试环境和扩展的部署环境。对生产环境设置准入控制,要求代码必须先通过 CI/CD 测试检查,以及测试环境和部署管道中的运行时测试。
实现部署漂移警报自动化
为了确保生产环境中的基础设施符合既定性能目标,应针对配置漂移设置自动警报。您还可以将生产环境基础设施的性能指标与之前的版本进行对比。此外,还可以配置 GitOps 工作流,以便在出现严重偏差时回滚基础设施。
使用有意义的提交信息
每次提交都必须包含明确的注释,说明变更的原因及预期结果。向开发人员和工程师提供关于如何编写明确提交信息的指导规范。
将版本化构件与版本历史一并管理
对于每个已部署的应用程序版本,应将可部署构件及任何相关的生成文件一并存储。
隔离机密
API 密钥、凭证和证书等敏感信息不应存储在 Git 存储库中。应改用与系统集成的敏感信息管理工具,以实现敏感信息的自动获取与使用。
GitOps 与基础设施即代码有什么区别?
基础设施即代码是指存储在 Git 存储库中、用于描述可部署环境的源代码。利用这些代码,诸如 Git push 之类的操作可以转化为基础设施自动化流程,从而部署所描述的系统。GitOps 有助于实现基础设施即代码的运维与管理。
GitOps 如何改善基础设施管理中的资源使用情况?
基础设施资源的使用量会随用户需求和系统要求而波动。如果 GitOps 控制器正在监控部署的资源使用水平,您就可以根据资源使用量的升降来部署新的配置。在这种情况下,控制器能够识别资源使用量的变化并部署不同的基础设施配置,以实现资源效率最大化。
AWS 如何满足您的 GitOps 需求?
AWS 服务专为与现代 GitOps 环境及工具集成而设计,使组织能够利用 Git 部署、管理和配置 AWS 云资源。以下是一些有助于您在 AWS 上实施 GitOps 以进行基础设施和应用程序管理的服务:
- AWS CloudFormation 可帮助您利用基础设施即代码加速云资源的预置。AWS CloudFormation 的 Git 同步功能允许您从远程 Git 存储库同步现代云基础设施堆栈,从而实现 GitOps 部署。
- Amazon Managed Service for Prometheus 为您的容器化系统提供高可用、安全且托管式的监控服务,使您能够监控生产环境中的配置漂移以及 GitOps 控制器。
- Amazon Elastic Kubernetes Service(EKS)让您能够轻松地在任何环境中构建、运行和扩展生产就绪型 Kubernetes 应用程序。Amazon EKS 允许您集成 GitOps 工具并在 Kubernetes 集群上运行控制器。
立即创建免费账户,开始使用 AWS 上的 GitOps。
Browse all cloud computing concepts
Browse all cloud computing concepts content here:
Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages