我在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/