Translator|崔英峰审稿人|服务。什么是GitOps,为什么它对组织很重要?GitOps是一种用于自动化和管理基础设施和应用程序的模型,它通过许多团队已经使用的相同DevOps最佳实践来实现,例如版本控制、代码审查和CI/CD管道等。在实施DevOps的过程中,虽然我们在软件开发生命周期中找到了自动化的方法,但是在基础设施的安装部署方面,仍然需要人工处理。使用GitOps,团队可以自动化基础架构配置过程。这要归功于我们能够编写基础架构即代码(IaC)、Git存储库中的版本控制代码,并使用基于云交付的持续部署。许多公司一直在采用GitOps,因为它具有提高生产力和软件质量的巨大潜力,并且最适合开发基于容器化和微服务的云原生解决方案的组织。GitOps如何改进开发人员和运维人员的日常工作?GitOps支持的基础设施自动化的增长创造了一个机会,可以为应用程序开发人员开发一种更加“自助服务”的方法。熟练的开发人员可以使用基础设施即代码来声明他们的云资源需求,而不是协商云资源。这成为基础设施的理想状态,集中存储,并可用作代码中规定的要求与操作环境的实际状态之间的不可变参考点。自助服务方法解放了开发人员。它提高了开发人员的工作效率,使他们能够专注于创新并更快地将应用程序推向市场。此外,它避免了当开发人员和运营人员需要协商资源时可能引入的泥潭。另一方面,通常存在一种误解,认为运营自动化程度的提高意味着运营团队需要的人员更少,并且运营在管道中的作用正在被边缘化。我们的观点恰恰相反;我们相信GitOps和内部开发平台等现代方法为Ops(平台团队)提供了令人兴奋的机会,以提高他们的技能并为组织创造更多价值。在采用了GitOps的高级云原生软件开发组织中,您可能会发现正是不断壮大的平台团队的存在让一切正常运转。平台团队使用的实际技术可能会有所不同。在某些情况下,这可能只是一个封闭的PaaS解决方案。在其他情况下,它可以是工具的组合,以创建适合组织需求的自定义平台。这使他们能够对基础架构资源和架构施加更大的影响和控制,并创建“护栏”以实施简单、高效和标准化的云原生应用程序部署方法。GitOps有助于改善开发人员和运营团队之间的协作,提高他们的生产力并增加部署频率。它允许开发人员贡献功能而无需了解底层基础设施,从而增强了开发人员的体验。同时,它通过代码审查和批准来控制操作。通过这些改进,团队可以更快、更安全地发布以保持其在市场中的地位。实施GitOps的三个必做步骤是什么?如果您希望贵公司实施GitOps模型以最大限度地发挥其优势,例如整体工作流程的标准化和一致性,则需要考虑以下几点。这就是将您的IaC声明为代码。使用Git存储库进行IaC开发。作为应用程序代码生命周期一部分的实践也被复制到基础设施代码中。使用Docker和Kubernetes等技术,将您的环境、版本、配置和依赖项定义为代码,并确保它们在运行时得到执行。逐渐将GitOps模型扩展到任何可以定义为代码的事物,例如安全性、策略、合规性以及基础架构之外的所有操作。图1:一切皆代码声明式代码提高了可读性和可维护性。CloudFormation、Terraform、Pulumi和Crossplane是一些可能的声明性语言,您可以使用它们来定义您的基础设施配置。当一切都定义为代码时,您可以使用Git存储库来开发和探索版本控制、协作和审计等内容。回顾流程一个合适的Git流程包括:master分支,它通常代表一个环境,例如dev、test、stage、prod,以及在该环境上运行的状态。当开发人员需要对代码进行更改时,他们会从master分支创建一个新分支。当更改准备就绪时,开发人员创建拉取请求,运营团队应审查该请求以进行验证和批准。安全和合规专家也可以参与此阶段以正确验证环境状态。一旦获得批准,代码就可以合并到master分支并交付到测试或生产环境。使用此工作流程,您可以跟踪谁进行了哪些更改并确保环境具有正确的代码版本。图2:GitOps工作流程如果您已经通过功能分支使用Git流程系统的拉取请求功能,则无需在新的GitOps流程上投入太多。此外,由于您的基础架构(和其他操作)也被定义为代码,您将能够执行相同的代码审查实践。独立的构建和部署过程(CI和CD)CI过程负责构建应用程序代码并将其打包到容器镜像中。CD过程执行自动化操作,使最终状态与仓库代码中描述的系统所需状态一致。最终,GitOps将CI和CD视为两个独立的过程——CI是一个开发过程,CD是一个操作过程。分离这些进程的常见GitOps方法是引入另一个Git存储库作为中介。该存储库包含有关环境的信息,每次提交都会触发部署过程。另一个组件称为运算符,位于管道和编排器之间。运维人员不断将环境存储库中的目标状态与部署的基础设施中的实际状态进行比较,如果运维人员检测到任何变化,它会更改基础设施以匹配环境存储库。此外,它还监视注册表以识别要部署的新版本映像。这样,CI过程永远不会触及底层基础设施(例如,Kubernetes集群)。图3:基于拉的GitOps部署将构建管道与部署管道分离是防止错误配置的有力保护措施,这样做可以提高安全性和合规性。结论GitOps作为一种操作模型使用许多团队都知道的DevOps实践。借助GitOps,您可以自动化基础架构配置过程,并将Git用作基础架构配置更改的单一真实来源。因此,要创建成功的GitOps模型,您需要对环境进行声明性定义。如果您的团队中也有拉取请求工作流,那就太好了。为了能够在基础架构代码上进行协作并创建操作更改,您应该提交拉取请求。高级DevOps工程师和安全专家随后审查拉取请求以验证更改并在一切正常时将它们合并到master分支中。对于完整的GitOps实施,您需要CI/CD自动化来设置参数和配置底层环境以及部署定义的代码。最后,公司内部应该有一种支持性的组织文化。根据我们的经验,GitOps方法自然会导致一种结构,在这种结构中,开发人员将受益于自助服务基础设施资源自动化程度的提高,而平台工程师可以在组织特征中扮演更有影响力的角色。这将是一种双赢的方法,让团队中的每个人都感到更加一致和充实。译者介绍崔英峰,社区编辑,70后程序员,拥有10多年工作经验。长期从事Java开发、架构设计、容器化等相关工作。容器化解决方案的规划、设计和实施。原标题:开发成功的GitOps模型的3个步骤,作者:MarijaNaumovska
