Terraform 申请,如何增加计数并将 kubernetes 工作节点添加到现有工作人员?

Terraform apply, how to increment count and add kubernetes worker nodes to the existing workers?

我按照 this repository on github

使用 terraform 在裸机上部署了 k8s 集群

现在我有三个节点:

ewr1-控制器,ewr1-worker-0,ewr1-worker-1

接下来,我想 运行 terraform 应用并增加工作节点(*ewr1-worker-3、ewr1-worker-4 ... * ) 同时保留现有的控制器和工作节点。 我尝试增加 count.index 从 3 开始,但它仍然覆盖现有的工人。

resource "packet_device" "k8s_workers" {
  project_id       = "${packet_project.kubenet.id}"
  facilities       = "${var.facilities}"
  count            = "${var.worker_count}"
  plan             = "${var.worker_plan}"
  operating_system = "ubuntu_16_04"
  hostname         = "${format("%s-%s-%d", "${var.facilities[0]}", "worker", count.index+3)}"
  billing_cycle    = "hourly"
  tags             = ["kubernetes", "k8s", "worker"]
} 

我没试过,但如果我试过

terraform state rm 'packet_device.k8s_workers'

我假设这些工作节点不会由 kubernetes master 管理。我不想一开始就创建所有节点,因为我添加的工作节点将具有不同的规格(实例类型)。

我使用的整个脚本都可以在 this github repository 上找到。 如果有人能说出我在这里缺少什么以及如何实现这一点,我将不胜感激。

谢谢!

最好使用自动缩放器解决节点大小调整问题。使用 Terraform 扩展节点池可能不是最佳方法,因为该工具旨在声明系统状态而不是动态更改它。最好的方法是使用云自动缩放器。 在裸机中,您可以按照 here

中的描述实现 CloudProvider interface(如 AWS、GCP、Azure 等云提供的那种)

实现之后,你需要确定你的K8s实现是否可以operated as a provider by Terraform,如果是的话,找到允许autoscaling的节点池autoscaler资源。

总结一下,鉴于 Terraform 作为描述基础设施的声明性语言的性质,Terraform 不打算用作 autoscaler

K8s中的autoscaling features就是为了解决这种需求。

我通过修改和删除 terraform.state 中的模块和资源解决了这个问题:手动修改它并使用 terraform state rm <--->

  • 省略了 (remove state) 我想保留的部分 是。

  • 修改 terraform.state 中我希望在添加新服务器时更改的部分。

  • 增加计数器以添加新资源,请参阅terraform 插值.

我正在使用裸机云提供商部署 k8s,它不支持 k8s HA 或 VA 自动调用。这可能不是其他人指出的最佳解决方案,但如果这不是您需要经常做的事情,Terraform 可以完成这项工作,尽管很困难。