kubernetes - 应用Terraform时,如何增加计数并将kubernetes worker 节点添加到现有 worker ?

标签 kubernetes terraform kubeadm bare-metal-server metallb

我在this repository on github之后使用terraform在裸机上部署了k8s集群

现在,我有三个节点:

ewr1-controller,ewr1-worker-0,ewr1-worker-1

接下来,我想运行terraform apply并增加工作程序节点( * ewr1-worker-3,ewr1-worker-4 ... * ),同时保留现有的 Controller 和工作程序节点。
我尝试将count.index从3开始递增,但是它仍然会覆盖现有的worker。

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'

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

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

谢谢!

最佳答案

最好使用自动缩放器解决节点大小调整问题。使用Terraform扩展节点池可能不是最佳方法,因为该工具旨在声明系统状态而不是动态更改系统状态。最好的方法是使用云自动缩放器。
在裸机中,您可以按照here的方式实现CloudProvider interface(例如由AWS,GCP,Azure等云提供的代码)

在实现该功能之后,您需要确定您的K8s实现是否可以是operated as a provider by Terraform,如果是这种情况,请找到允许autoscaler的nodepool autoscaling资源。

综上所述,鉴于Terraform具有描述基础结构的声明性语言的性质,因此它并不打算用作autoscaler

K8s中的autoscaling features旨在解决此类要求。

关于kubernetes - 应用Terraform时,如何增加计数并将kubernetes worker 节点添加到现有 worker ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840666/

相关文章:

kubernetes - 使用 Redis 处理程序在 Istio 中进行速率限制

azure - 无法在 terraform cosmosdb 中指定备份

kubernetes - 如何完全卸载kubernetes

docker - 在 Kubernetes 中运行私有(private) docker 注册表时拉取图像时出现问题

docker - Kubernetes:kubectl 顶级节点/Pod 不工作

kubernetes - 两个PersistentVolumeClaims的状态之一是 “Pending”

amazon-web-services - 无法使用 terraform 在目标组中添加多个 target_id

amazon-web-services - 如何在 Terraform 子文件夹中声明托管资源

amazon-web-services - 如何在AWS上的Kubernetes安装上解决此错误?

kubernetes - 为什么需要 kubeadm config 的 controlPlaneEndpoint?