运用GitOps来发动环境,可为开发团队带来共同性、版别操控、速度等多方面的优点。

译自How We Evolved from IaC to Environments as Code,作者 Edan Evantal 是 Quali 的CTO Edan Evantal担任Quali根底设施主动化和环境交给渠道的一切产品工程。在参加Quali之前,Edan曾在Matrix IT和Sibam Ltd担任工程办理职务。他在高科技行业拥有18年以上的经验……

这些年来,在构建咱们的渠道的过程中,并与咱们的产品所支撑的其他DevOps渠道工程师一同作业,我亲眼见证了运用根底架构的演变正在打破它本来意在供给的主动化。

根底设施即代码(IaC)东西关于界说和主动交给云服务非常名贵。当一个开发团队的需求扩展到此规模之外时,主动化一般就会中断。

原因有两个:

  • IaC东西的规划意图在于速度和主动化,而不是作为环境的实在来历。大型团队在大规模使用根底设施和了解代码更改或许如何扰乱运用功能方面或许会遇到困难。
  • IaC东西之间不兼容。运用日益依靠于用各种技术界说的复杂根底设施,需求手动编排来协调东西的纤细差异。

开发人员在根底设施主动化功能与运用需求实际情况之间存在鸿沟。其结果是速度下降,根底设施存在未办理或配置过错的危险添加。

咱们询问自己,咱们能做些什么来弥合这一鸿沟,这让咱们想到了一个简略的问题:

如果您能够以代码的形式发动一切环境,而不管根底设施的规模或用于界说它的 IaC 东西是什么,会怎么样?

在Git中将环境界说为代码

为了将环境界说为代码,咱们首要需求以开发人员发动环境所需的一切来界说,这种格局关于DevOps来说既易于了解,又方便主动化机器读取。

运用咱们的Torque渠道,咱们连接到一个Git库房,发现其间界说的IaC模块,并将资源配置打包成一个新的由渠道主动生成的YAML。

从那里,咱们能够修正任何YAML代码,以包含环境发动时将生成的根底架构组件、参数、依靠项、元数据、身份验证和输出。

下面是YAML代码片段示例:

kind: environment
environment_name: "Workstation Staging A"
description: "EC2 workstation for staging workloads"
state: inactive
owner_email: "myemail@email.com"
blueprint:
 name: "test-workstation"
 repository_name: "cloud-native-application"
 branch: "main"
 commit: "536955389cd4ecbd1b8895c4a1093fe14a809b65"
inputs:
 service-account: "sa"
 agent: "review3"
grains:
 create-ec2:
   source:
     commit: "697d1"
   specs:
     instance_type: "t2.large"
     ami: "ami-0c55b159ertafe1f0"
     security_groups: ["sg-0246e9ddc2b2f23f4"]
 post-deployment:
   scripts: ["./configure-environment.sh", "./deploy-application.sh"]

这包含了环境一切必要元数据的单一界说,以结构化格局出现。

简略来说,咱们使用现有的根底设施代码来界说环境为代码。

运用GitOps发动运用环境

为了满意客户的需求,咱们需求使这一界说具有操作性。

咱们的初始答案是依靠咱们的自助门户。当咱们渠道中的办理员创建这些YAML文件(咱们称之为环境的“蓝图”)时,他们能够选择“发布”它。这会将环境添加到渠道中的一个自助服务目录中,拥有最终用户权限的用户能够按需发动该环境。关于那些将环境集成到开发者东西、CI/CD或内部开发者门户的人来说,发布新蓝图也能够经过这些东西拜访。

为了支撑采用GitOps的团队,咱们需求将已发布的蓝图集成到日常作业流程中。

经过在咱们发现IaC模块的原始库房中存储这个新的YAML文件,咱们使环境界说在GitOps中可拜访。实际上,咱们为能够拜访该库房的用户“发布”了环境界说。

现在,开发人员能够运用单个指令发动完好的环境。

这种方法还供给了几个额外的优势:

  • 版别操控: 就像运用代码相同,环境能够进行版别操控,以保证跟踪每一次更改,并在必要时进行回滚。
  • 共同性: 使用这一界说每次都以共同的方式预配环境,消除了“它在我的机器上能作业”的问题。
  • 速度: 开发人员能够经过简略地提交代码来预配环境——这是他们了解的动作,所以他们能够快速呼应开发、测验或生产需求,而无需其他团队的帮助。
  • 协作和治理: 创建环境的共享界说为仅靠IaC自身所不能轻松做到的协作奠定了根底。
  • 运营功率: 主动化预配流程意味着削减冗余的手动作业(和疲乏),以及DevOps工程师能够承担更有价值的使命。

在渠道工程中,每一秒都是名贵的,每一个资源都很重要。跟着根底设施变得越来越复杂,以代码的形式办理环境是现代DevOps安排老练的下一步。

本文在云云众生yylives.cc/)首发,欢迎大家拜访。