如何将Terraform、Crossplane和Atlantis奇妙地组合运用,发挥每项技能的优势,一起保存施行严厉日常办理的灵活性。

作者John Dietz是Kubefirst的联合创始人。他在IT领域担任领导职务超越20年,涵盖测验、功用、开发、数据、DevOps、渠道架构和云工程等多个方面。他在将《今日美国》转移到云端方面发挥了关键作用,并自2017年以来一直在协助公司选用Kubernetes技能。译自Bridging the Gap Between Infrastructure as Code and GitOps。

基础设施即代码是过去十年核算领域最巨大的前进之一。它建立了一种新的标准,将软件团队中已经深入人心的改变流程扩展到了运转软件的基础设施上。提出改变恳求,进行代码检查,批准,然后运用改变。

咱们的团队一直在尽力为咱们的即时Kubernetes渠道供给基础设施办理的主动化支撑,包括初期设置(榜首天)和日常办理(第二天)。应战在于,榜首天和第二天的基础设施即代码需求或许因您对第二天作业流程所需的基础设施办理管控的要求不同而大不相同。您是否能够让基础设施即代码东西决议您的Kubernetes集群需求被毁掉,或许您需求人工参与这个决议过程?

几个月前,咱们在一个研讨作业中发现了一种十分奇妙的技能组合,能够一起发挥Terraform、Crossplane和Atlantis的优势,而且保存了根据您的安排要求施行严厉日常办理的灵活性。

咱们的任务:向群众供给免费的IaC主动化解决方案

由于咱们正在尽力为群众供给一个主动化的基础设施即代码解决方案,所以咱们需求十分谨慎地考虑为您的内部开发者渠道挑选哪些基础设施即代码技能。咱们会根据流行度、免费层价值、开源答应状况、稳定性、可扩展性、易用性、文档完备度、易保护性以及与渠道其他组件的配合程度来衡量各个组件。

Terraform、Atlantis和Crossplane这三个技能多年来引起了咱们极大的兴趣,由于它们各自解决了基础设施即代码主动化的不同方面。让咱们简要评论每项技能,并杰出它们的优势和局限性。

Hashicorp Terraform – 命令行IaC

Terraform已经成为企业基础设施即代码的事实标准。咱们多年来一直十分喜欢Terraform。它有一个稳定的产品,运用简略的语言,具有繁荣的供货商中立的provider商场,能够让您装备任何东西:云服务,用户,秘要,git库房等等。

Terraform是一个命令行东西,它在一组用HCL语言编写的文件中运转,这些文件表示您期望的基础设施状况。当您运转terraform plan时,它会将期望状况与实践状况进行比照,并告诉您假如运用这些更改会产生什么。当您运转terraform apply时,它会履行实践更改,或许告诉您为什么无法更改。

由于Terraform是一个命令行东西,许多安排将它当作一个命令行东西在运用,这一点不足为奇。云工程师能够直接从他们的本地机器向云基础设施运用更改。而站点牢靠性工程师和渠道团队则对这种不透明的设置方法感到忧虑,由于当您知道是谁在什么时间对运用了什么更改,他们的流程会变得简略得多,所以黑箱的命令行东西并不理想。这在清晨被报警吵醒时尤其如此。

长处:

  • 无与伦比的供货商支撑 – 简直万物都有Terraform供给商
  • 稳定且牢靠
  • 命令行东西意味着您不需求预先存在的基础设施就能够运转它,这对从零开始十分有协助

缺陷:

  • 将Terraform作为GitOps流程的一部分运转需求在流程中停止,或许从自界说的pod中履行Terraform
  • 没有内置的操控平面来主动履行方案/运用(除非您付出SaaS产品费用)

Atlantis – Terraform作业流主动化

多年来,Atlantis一直是咱们首选的将Terraform改变过程与软件团队的自然作业流程集成的技能。大多数人会将他们的Terraform代码保存在git库房中,所以当您想要更改基础设施即代码时,您会翻开一个拉取恳求,恳求批阅,然后运用更改。

Atlantis会挂钩到这个流程中,这样当拉取恳求被翻开时,Terraform方案就会主动运转并直接在拉取恳求中作为评论反应方案结果。

假如您在检查后确定了方案,能够直接在拉取恳求中评论atlantis apply,Atlantis将测验运用Terraform更改并陈述结果,假如成功则主动关闭和兼并拉取恳求。

咱们在Kubernetes中以具有所办理资源权限的service account身份运转Atlantis。经过这种设置,您能够答应开发者为基础设施即代码做出奉献,而不需求实践颁发他们自行运用更改的权限。

长处:

  • 供给Terraform方案和运用的可见性
  • 供给一切基础设施更改的集中审计日志
  • 开发者能够在他们熟悉的git中作业
  • 开发者无需云端访问权限即可为基础设施做出奉献

缺陷:

  • 仅适用于Terraform的IaC

Crossplane – 完美合适GitOps的IaC

咱们是一家彻头彻尾的GitOps公司。Kubernetes空间中或许没有比将Kubernetes集群绑定到git库房中的期望状况更大的力量了。您能够界说所需的基础设施状况,然后您的GitOps引擎将会使其变为实践,或许告诉您为何无法完成。

Crossplane的目的与Terraform十分类似——它们都有一个敞开的供货商中立的provider商场,都供给十分有价值的自办理免费层,而且在您界说好所需状况后,Crossplane会测验运用这些状况。

可是,Crossplane的履行机制与Terraform十分不同。它不是一个命令行东西,而是一个在Kubernetes内运转的操控平面。您一般也不会在Crossplane中编写代码;它要求您在自界说资源界说中声明所需状况。当您运用GitOps同步流程编列杂乱的云资源置备操作时,这种方法十分有优势,由于您能够将基础设施即代码过程归入GitOps编列中,而不会中止GitOps流程。

在Kubefirst中创立新集群时,GitOps就是咱们在集群中装置一切运用程序的方法,一切的这些编列都界说在咱们的gitops库房中。下面是一个示例,展现了咱们上游模板库房中的样子。在每个YAML文件中,您会看到这样一个注解:

  annotations:
    argocd.argoproj.io/sync-wave: '20'

这个注解界说了将会在哪个同步流程中运用这个GitOps装备,并答应咱们操控装置顺序,例如先装置Vault,然后再装置external-secrets-operator

长处:

  • 合适GitOps的技能能够更无缝、主动地创立/毁掉基础设施即代码资源
  • 假如Terraform的新的商业源答应证对您的安排有问题,则能够挑选代替的供给商

缺陷:

  • Provider 支撑还不如Terraform全面(由于它比较新),可是您能够从Terraform Provider创立Crossplane Provider,这为咱们供给了一条值得信赖的开展路途
  • 需求Kubernetes集群来运转,这在创立初始Kubernetes基础设施时有问题

IaC主动化办理

当GitOps契合您的办理理念时,它十分超卓;当不契合时,它或许会有些风险。

弥合基础设施即代码和GitOps的距离

关于运用程序,GitOps显然是一个强壮的前进。想要新版别的运用程序?只需在GitOps库房中的文件设置为新版别,当它进入主分支时,那就是您的运用程序版别。想要旧版别回来?只需在GitOps库房中的文件从头设置为旧版别,它就会变成您的运用程序版别。

这关于运用程序是一个巨大的作业流程,它极大地简化了在Kubernetes中的资产办理,并明显改善了您的灾祸恢复准备。可是正如咱们前面评论的,Kubernetes不只能够办理运用程序,现在咱们也在评论基础设施。

IaC能够以经典的三步方案-检查-运用的命令行东西方法运转,也能够以两步检查-运用的操控平面东西方法运转,它们在不同的场景下都很有用。例如,关于出产集群,您或许不希望您的GitOps引擎在没有人工批阅的情况下决议删去您的出产集群。

关于以供给渠道为业的渠道工程团队来说,在渠道装备操作中结合运用GitOps和Crossplane是十分棒的。基本上,您能够根据需求在GitOps流程编列中随时运转基础设施即代码,而无需进行笨拙的检查过程。可是,假如这是一个刚刚装备的出产集群,是否应该将其办理为GitOps或许选用更严厉的办理,比如Atlantis供给的?

思考试验:本文的其他部分将描述一个将Atlantis与拉取恳求集成的美好场景。相反,您也能够考虑根据类似Kyverno这样的战略引擎和一些自界说资源在GitOps库房中办理Crossplane基础设施即代码资源及其删去战略,声明出产集群不可被删去。

咱们最近发现能够运用Crossplane的Terraform供给程序在Crossplane中运转Terraform。这使您能够利用GitOps在装备新集群基础设施时的正确方位运转Terraform。可是,在此之后,您或许不再希望集群由GitOps办理,而是将办理转移到Atlantis,以便从那时起人工检查方案。

当您在Crossplane资源上设置deletionPolicy:Orphan时,它会建议Crossplane在从GitOps中删去目标时不要删去实践基础设施。因而,假如您将资源孤立,等待它在ArgoCD中同步,然后能够从GitOps流程中删去Terraform,基础设施将保持不变。

接下来,您能够经过拉取恳求将与Crossplane相同的Terraform复制到Atlantis办理的目录中,方案将显现没有更改(假定您保存相同的状况存储)。当您运用这个无操作改变时,拉取恳求将被兼并,之后Terraform将由Atlantis办理。

这种技能为您的渠道团队在榜首天供给了他们渴望的GitOps速度和功用,一起为您的安排在第二天及以后供给所需的办理和操控。

在Kubefirst上探索Crossplane包装的Terraform

Kubefirst最近宣布了即时GitOps开源渠道的集群生命周期办理功用。运用一个简略的kubefirst launch up命令,您能够获得一个装备运用程序,它能够创立一个多集群生态系统,这些GitOps集群无缝绑定到一切热门的云原生开源东西,而且都是免费的。

默认情况下,装置kubefirst时,您将获得四个新集群:managementdevelopmentstagingproduction。 management集群将托管您的Atlantis实例、Crossplane操控平面和一个kubefirst UI,后者能够在您的GitOps库房中生成集群界说。 其他三个集群则会根据这些提交构建,您能够创立任意多的集群。templates目录界说了集群的创立方法,您能够根据需求调整其组件。

您的GitOps库房中还将有一个Terraform目录,其中界说了由Atlantis办理的Terraform入口点。假如您运用拉取恳求更改任何目录,您将在拉取恳求中看到Terraform方案被触发,您能够在拉取恳求中评论atlantis apply来运用方案。

看看您是否能够装备一组kubefirst集群,并将开发集群的Crossplane作业区孤立出来。 然后按照前面描述的细节,将其转移到Atlantis的办理下。 这是运用GitOps装备杂乱基础设施的十分强壮的方法。 在出产集群上,您能够将操控权交还给人工进行第二天的严厉日常运维办理。

假如您遇到任何问题,咱们有一个具有数百名工程师的社区,他们都渴望运用最流行的云原生开源东西进行协作。 咱们的免费渠道是全面的、可移植的、可扩展的和开源的。 您能够自由修正咱们的任何意见。 咱们欢迎奉献者,并希望经过咱们的用户界面赢得您的喜爱。 在咱们为一切支撑的云和根据模板的GitOps方法搜集反应的一起,咱们的专业版是完全免费的。 咱们期待您加入咱们的任务。