1

我在 github 上的这个存储库之后使用 terraform 在裸机上部署了 k8s 集群

现在我有三个节点:

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

接下来,我想运行 terraform apply 并增加工作节点(*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 管理。我不想在开始时创建所有节点,因为我添加的工作节点将具有不同的规格(实例类型)。

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

谢谢!

4

2 回答 2

2

节点调整大小最好使用自动缩放器来解决。使用 Terraform 扩展节点池可能不是最佳方法,因为该工具旨在声明系统状态,而不是动态更改它。最好的方法是使用云自动缩放器。在裸机中,您可以实现一个CloudProvider interface(如 AWS、GCP、Azure 等云提供的),如此处所述

实现之后,你需要确定你的 K8s 实现是否可以作为 Terraform 的提供者来操作,如果是这样,请找到autoscaler允许autoscaling.

总结一下,Terraform 并不意味着被用作autoscaler描述基础设施的声明性语言。

K8s 中的自动缩放功能旨在解决此类需求。

于 2019-11-18T13:58:28.987 回答
1

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

  • 省略(删除状态)我想保持原样的部分。

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

  • 递增计数器以添加新资源,请参阅terraform interpolation

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

于 2019-11-18T18:09:24.687 回答