基础设施作为代码(IaC)使用户能够编码基础设施。它允许它们定义系统的期望状态,并且在没有任何配置漂移的情况下轻松地维护该状态。与此同时,GitOps 允许用户以版本控制的方式将这个 IaC 配置存储在 Git 存储库中,并没有自动化基础设施管理过程。因此,它可以被认为是 IaC 的扩展。
工作流程 Git 中的 pull 请求开始。一旦开发人员创建了配置更改,他们就会被提交到存储库中,并创建一个拉取请求。当这些修改被审查和批准后,一个 GitOps 操作员,作为存储库和基础设施之间的中间人,接受新的配置。操作员将其与系统的当前状态进行比较,然后执行所请求的配置更改,以将系统状态更新为新的所需状态。
K8S环境中的 GitOps
Kubernetes 环境中 GitOps 的目标是通过 CI/CD 管道简化整个集群管理和应用程序开发及部署过程。
您可能已经有一个人 CI 进程来构建应用程序容器并将它们推送到容器注册中心,还有一个简单的 CD 进程来部署集群中的容器。GitOps 扩展了这些程序,以提供全自动化的体验,具有更强的控制和观察能力。
GitOps 允许用户将其声明性基础设施配置集成到 CI 进程中。用户将为部署、资源创建、策略等创建 Kubernetes YAML 清单。他们将被推送到 git 仓库,并通过拉请求进行审核和批准。一旦它们与相关的回购协议合并,CD 进程将自动执行配置更改和相关的应用程序部署到 Kubernetes 集群。
最好的部分是,用户可以通过这个工作流管理 k8集群之外的资源。假设您需要提供一个外部防火墙和存储资源来满足您的容器化应用程序的需求。用户可以使用 Terraform 用这样的工具将它们定义为声明性的 IaC 配置,并将它们集成到基于 gitops 的工作流中。它可以直接通过 CI/CD 管道提供必要的资源,而无需任何人工干预。
在 CI/CD 管道内实施 GitOps 的好处
GitOps 带来的主要好处是能更好地控制和观察整个环境。由于应用程序开发和基础设施管理都组合成一个单一的工作流,用户可以更好地理解他们的环境以及基础设施配置和应用程序更改之间的关系。
由于所有这些更改都是版本控制的,用户将有一个清晰的审计跟踪,以了解基础结构更改并轻松排除任何问题。此外,它们可以确保应用程序所需的所有资源在整个应用程序生命周期中保持不变,因为需要的配置状态是持续维护的。
GitOps 还简化了基础设施和配置过程,并使整个过程自动化。唯一的手工任务是开发基础设施配置,并在最终合并到所需存储库之前检查这些配置。这种方法可以实现更快、更一致的部署。此外,配置的编码允许更严格的标准化和审查,从而减少错误和配置错误。它还有助于创建受到良好控制的安全环境。
总结
GitOps 平衡应用程序开发过程,将应用程序和基础设施结合成一个通过 CI/CD 管道促进的统一工作流程。GitOps 的好处是可以加强控制和可观察性,同时仍然提供一种以开发者为中心的更简单的自动化方式来管理任何基础设施。