使用Terraform和捕鱼大亨网络版

作者: 菲利普·斯特鲁伯,Kubestack

维护开源的Kubestack 地貌 GitOps框架 对于捕鱼大亨网络版,毫无疑问,我花了大量时间与Terraform和捕鱼大亨网络版一起工作。 Kubestack条款使用Terraform来管理诸如AKS,EKS和GKE之类的捕鱼大亨网络版服务,而且还将Kustomize基地的集群服务集成到GitOps工作流程中。在部署应用程序工作负载之前,请将群集服务视为捕鱼大亨网络版群集所需的一切。

Hashicorp最近宣布 地貌和捕鱼大亨网络版之间的更好集成。我借此机会概述了当今如何将Terraform与捕鱼大亨网络版一起使用以及应注意的事项。

但是,在本文中,我将仅专注于使用Terraform来提供捕鱼大亨网络版 API资源,而不是捕鱼大亨网络版集群。

地貌 作为一种流行的基础架构,它是代码解决方案,因此在这里我将仅作简要介绍。简而言之,Terraform允许将资源的期望状态声明为代码,并且将确定并执行一项计划,以将基础结构从当前状态转变为期望状态。

为了能够支持不同的资源,Terraform要求集成了相应API的提供程序。因此,要创建捕鱼大亨网络版资源,我们需要一个捕鱼大亨网络版提供程序。这是我们的选择:

地貌 kubernetes 提供者 (official)

首先, 捕鱼大亨网络版官方提供者。该提供商无疑是三者中最成熟的。但是,它带来了一个很大的警告,这可能是为什么使用Terraform维护捕鱼大亨网络版资源不是一个受欢迎的选择的主要原因。

地貌为每个资源都需要一个架构,这意味着维护人员必须将每个捕鱼大亨网络版资源的架构转换为Terraform架构。这是一项很大的努力,并且是长期以来受支持的资源非常有限的原因。尽管这种情况随着时间的推移有所改善,但仍不支持所有功能。特别是 定制资源 无法以这种方式支持。

This schema translation also results in some edge cases to be aware of. For 例, metadata in the 地貌 schema is a list of maps. Which means you have to refer to the metadata.name of a 捕鱼大亨网络版 resource like this in 地貌: kubernetes_secret.example.metadata.0.name.

从好的方面来说,拥有Terraform架构意味着捕鱼大亨网络版和其他Terraform资源之间的完全集成。像 , using 地貌 to create a 捕鱼大亨网络版 service of type LoadBalancer and then use the returned ELB hostname in a Route53 record to configure DNS.

The biggest benefit when using 地貌 to maintain 捕鱼大亨网络版 resources is integration into the 地貌 plan/apply life-cycle. So you can review planned changes before applying them. Also, using kubectl, purging of resources from the cluster is not trivial without manual intervention. 地貌 does this reliably.

地貌 kubernetes-alpha 提供者

二,新 alpha 捕鱼大亨网络版提供者。作为对当前捕鱼大亨网络版提供商的限制的回应,Hashicorp团队最近发布了新提供商的alpha版本。

该提供程序使用动态资源类型和服务器端应用程序来支持所有捕鱼大亨网络版资源。我个人认为该提供商有潜力成为游戏规则改变者-即使 在HCL中管理捕鱼大亨网络版资源 可能仍然不适合所有人。也许下面的Kustomize提供程序将对此有所帮助。

唯一的缺点是,不鼓励将其用于测试以外的任何用途。但是测试的人越多,就应该为黄金时间准备得越早。因此,我鼓励大家尝试一下。

地貌 kustomize 提供者

最后,我们有 kustomize 提供者. Kustomize provides a way to do customizations of 捕鱼大亨网络版 resources using inheritance instead of templating. It is designed to output the result to stdout, from where you can apply the changes using kubectl. This approach means that kubectl edge cases like no purging or changes to immutable attributes still make full automation difficult.

Kustomize是一种处理定制的流行方法。但是我一直在寻找一种更可靠的方式来自动应用更改。由于这正是Terraform在Kustomize提供程序方面的卓越之处。

在这里并没有讨论太多细节,但是从Terraform的角度来看,此提供程序将每个捕鱼大亨网络版资源都视为JSON字符串。这样,它就可以处理Kustomize构建产生的任何捕鱼大亨网络版资源。但是它具有一个很大的缺点,即捕鱼大亨网络版资源不容易与其他Terraform资源集成在一起。记住上面的负载均衡器示例。

在幕后,类似于新的捕鱼大亨网络版 alpha提供程序,Kustomize提供程序还使用动态捕鱼大亨网络版客户端和服务器端应用程序。展望未来,我计划弃用Kustomize提供程序的这一部分,该部分与新的捕鱼大亨网络版提供程序重叠,并且仅保留Kustomize集成。

结论

For teams that are already invested into 地貌, or teams that are looking for ways to replace kubectl in automation, 地貌's plan/apply life-cycle has always been a promising option to automate changes to 捕鱼大亨网络版 resources. However, the limitations of the 捕鱼大亨网络版官方提供者 resulted in this not seeing significant adoption.

新的alpha提供程序消除了限制,并有可能使Terraform成为自动更改捕鱼大亨网络版资源的主要选择。

Teams that have already adopted Kustomize, may find integrating Kustomize and 地貌 using the Kustomize 提供者 beneficial over kubectl because it avoids common edge cases. Even if in this set up, 地貌 can only easily be used to plan and apply the changes, not to adapt the 捕鱼大亨网络版 resources. In the future, this issue may be resolved by combining the Kustomize 提供者 with the new 捕鱼大亨网络版 提供者.

如果您对这三个选项有任何疑问,请随时通过以下任一链接与我联系捕鱼大亨网络版 Slack: #kubestack 或者 #kustomize 渠道。如果您碰巧尝试给任何提供者尝试并遇到问题,请提交GitHub问题,以帮助维护者修复它。