4

我们计划在为我们的云服务提供动力的 DC 中自动创建和删除虚拟机。该服务使得每个新客户都能获得专用的虚拟机(至少 3 个)——因此虚拟机的数量不断增长。我们已经在 ESXi 上运行了大约 2000 个虚拟机。所以我们现在在采用 terraform 之前有两个问题需要解决——

  1. 我们如何迁移现有的 VM 以由 Terraform 管理(或者我们应该如何)? 可以编写脚本生成资源规范,但验证计划以确保不受影响将是一项挑战——考虑到 VM 的数量以及它们都是 LIVE 的事实,这给工程师带来了额外的压力。

  2. 随着 VM 数量的增加,磁盘上 .tf 文件的数量将不断增加。我们可以将多个虚拟机组合到一个文件中,但这会使以编程方式删除单个虚拟机有点棘手。将文件拆分到多个目录是我能想到的简单解决方法,但是...... 有没有更好的方法来处理 terraform 的规模?

我找不到任何讨论这些问题的博客,因此在这里从实践经验中寻求一些建议。

4

1 回答 1

4

很高兴看到社区开始越来越多地在 Stack Overflow 上提出与 Terraform 相关的问题。

关于你的问题:

  1. 迁移现有 VM 以由 Terraform 管理意味着更新 tfstate 文件。到目前为止,还没有办法为已经创建的资源创建资源定义并将其自动放入状态文件中(尽管有诸如Terraforming之类的工具,它部分地并且仅针对 AWS 资源)。因此,您将不得不在*.tf文件中描述资源,手动更新 tfstate 文件,然后tfstate == tf通过运行terraform plan来验证应该说没有更改,应该应用。关于确切放入 tfstate 文件的内容 - 我建议首先创建资源定义,tf然后terraform apply基于此创建虚拟 VM(tfstatetfstate文件(您还需要更新serial以防止本地/远程状态不一致错误)。

  2. 除了按目录对它们进行分组之外,我不知道处理大量相关资源的其他更聪明的方法。这样,您可以仅对特定的逻辑分离目录执行计划/应用,但您必须拥有分离的状态文件。它可能很容易被矫枉过正(有点警告,所以不要在家尝试)。

在使用 Terraform 时,我主要记住以下建议(尤其是在您拥有大量资源的情况下):

  1. 组织您的代码,以便您在一个地方拥有模块,并在另一个地方将参数传递给它们。代码的可重用性,或者现在如何调用它:)
  2. 在terraform planterraform apply-target等命令上使用标志来限制您想要访问的资源。

希望能帮助到你!更多的人会喜欢Terraform

于 2015-12-06T12:49:12.000 回答