使用 Terraform 进行垂直扩展
Vertical Scaling with Terraform
我正在使用 terraform 设置 VPS 集群。
这已经很好用了。我定义了一个名为 instance_size
的 variable
,默认设置为 1gb
。我正在使用我的 resource
定义中的 count
参数设置几个具有完全相同配置的 VPS:
variable "swarm_instance_size" {
default = "1gb"
}
resource "digitalocean_droplet" "server" {
image = "123456"
size = "${var.instance_size}"
count = "3"
name = "${format("server-%02d", (count.index + 1))}"
region = "sfc1"
}
(为简洁起见,排除了 SSH 密钥和配置程序)
我现在的问题是如何最好地垂直扩展这些资源中的一个。
通过将 instance_size
增加到例如 2gb
并执行 terraform apply --parallelism 1
,我可以在不停机的情况下扩展所有资源,这样一次只更新一个资源。
我也可以使用 terraform apply -target digitalocean_droplet.server[0] -var instance_size=2gb
仅定位其中一个资源。问题是这会导致意外的配置漂移,因为我没有在执行命令时在其他任何地方声明更改。
将这些服务器中的每一个声明为省略计数参数的单个资源的唯一且最好的方法是什么?如果我想添加一个新服务器而不是增加计数参数,我只是将另一个资源定义添加到我的 terraform 配置中?
通过使用 map
例如(这在您的 variables.tf 文件中):
variable "machines" {
description = "description here"
type = "map"
default = {
"server-01" = 1gb
"server-02" = 1gb
"server-03" = 2gb
}
}
然后在你的实际代码中:
size = ${lookup(var.machines, format("server-%02d", (count.index + 1)))}
然后您就可以应用该计划了。
我正在使用 terraform 设置 VPS 集群。
这已经很好用了。我定义了一个名为 instance_size
的 variable
,默认设置为 1gb
。我正在使用我的 resource
定义中的 count
参数设置几个具有完全相同配置的 VPS:
variable "swarm_instance_size" {
default = "1gb"
}
resource "digitalocean_droplet" "server" {
image = "123456"
size = "${var.instance_size}"
count = "3"
name = "${format("server-%02d", (count.index + 1))}"
region = "sfc1"
}
(为简洁起见,排除了 SSH 密钥和配置程序)
我现在的问题是如何最好地垂直扩展这些资源中的一个。
通过将 instance_size
增加到例如 2gb
并执行 terraform apply --parallelism 1
,我可以在不停机的情况下扩展所有资源,这样一次只更新一个资源。
我也可以使用 terraform apply -target digitalocean_droplet.server[0] -var instance_size=2gb
仅定位其中一个资源。问题是这会导致意外的配置漂移,因为我没有在执行命令时在其他任何地方声明更改。
将这些服务器中的每一个声明为省略计数参数的单个资源的唯一且最好的方法是什么?如果我想添加一个新服务器而不是增加计数参数,我只是将另一个资源定义添加到我的 terraform 配置中?
通过使用 map
例如(这在您的 variables.tf 文件中):
variable "machines" {
description = "description here"
type = "map"
default = {
"server-01" = 1gb
"server-02" = 1gb
"server-03" = 2gb
}
}
然后在你的实际代码中:
size = ${lookup(var.machines, format("server-%02d", (count.index + 1)))}
然后您就可以应用该计划了。