【问题标题】:how to replace an instance created by Terraform如何替换 Terraform 创建的实例
【发布时间】:2021-08-05 06:55:54
【问题描述】:

我使用 terraform 创建了多个节点,然后使用 ansible 将这些节点部署为一个集群。

resource "google_compute_instance" "cluster"
  count = 6
  machine_type = "e2.micro"
  ...
}

现在假设其中一个节点有一些问题,例如硬件问题,所以我必须销毁它并启动另一个节点,然后使用 Ansible 部署它。

如何销毁它,然后使用相同的 Terraform 代码启动一个新的?使用上面的 Terraform,我只知道如何通过将计数更改为 7 来添加新节点。

此外,有什么方法可以更改上述节点之一的实例类型?用例有时是其中一个节点内存不足所以我想增加这个节点的实例类型(可能是临时的)

【问题讨论】:

  • 为什么不使用期望计数为 6 的自动缩放组?
  • 嗨,Marcin:它实际上不是 aws ec2 而是 gcp 实例。我已经换了帖子。我知道 gcp 也有自动缩放功能。我的问题是如何删除一个特定的实例,比如 6 个节点的第三个实例,然后创建一个新的第三个实例?
  • gcp 还 has 自动缩放。但是通过自动缩放,您不能只更改单个实例。您可以通过基于负载添加/删除实例来横向扩展。
  • 在我的例子中,6 个节点意味着 3 组节点。每组是一个主节点,它的副本(从节点)和每组节点存储一部分数据(分区)。如果主节点由于硬件问题而失败,它的从节点将升级为主节点,因此它的数据不会丢失,但我确实需要销毁这个有问题的节点并启动一个新节点。我认为自动缩放不会起作用,因为我猜自动缩放不会存储数据。

标签: terraform


【解决方案1】:

您还可以使用 Packer(另一个 Hashicorp 工具)创建 AMI。将该 AMI 放入启动配置中。然后将该启动配置放入 Auto Scaling 组(当然,所有这些都在 Terraform 中完成)。这样,当您想要更新 AMI 时,您可以在 Launch Config 中简单地更新 AMI 值。

【讨论】:

  • 我不能。假设我使用 Auto Scaling 重新启动一个新实例,我仍然需要运行一些命令来将新节点加入集群(redis 集群)并重新分片
【解决方案2】:

您正在寻找 AWS Auto Scaling 组 (ASG):https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group

将所需容量设置为 6 并使用 t3.micro 实例类型定义启动模板。

【讨论】:

  • 另外,实例类型更改的最佳用例是更新启动模板中的实例类型,然后杀死一个实例。 ASG 将检测到一个实例已关闭,并将弹出一个具有更新实例类型的新实例。
  • 嗨,Richard:它实际上不是 aws ec2 而是 gcp 实例。我已经更改了帖子。在我的情况下,6 个节点意味着 3 组节点。每组是一个主节点,它的副本(从节点)和每组节点存储一部分数据(分区)。如果主节点由于某些问题而失败,其从节点将提升为主节点,因此其数据不会丢失,但我需要销毁这个有问题的节点并用新节点替换。但我不认为自动缩放会起作用,因为我故意破坏了这个节点。
  • 你应该在你的帖子中添加一个 gcp 标签,然后 ^^.
  • 谢谢理查德。我无法使用自动缩放。假设我使用 Auto Scaling 重新启动了一个新实例,我仍然需要运行其他命令将新节点加入集群(redis 集群)并重新分片
猜你喜欢
  • 2012-04-17
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多