是否可以删除并重新创建通过terraform管理的新机器类型的GKE节点池?



我想改变我的gke nodepool上的机器类型,以更好地匹配我的cpu和内存使用情况,但是我在获得terraform删除这个nodepool并重新创建它时遇到了很多麻烦。由于过去使用了该模块来创建集群,所以我只能使用默认的节点池。集群与nodepool在一个共享模块中,所以我不能通过terraform永久删除nodepool,而不同时删除集群,这会影响到所有希望集群保持可用的人。

所以我的解决方案是创建一个额外的临时节点池,将所有的pod迁移到它,封闭并消耗默认的节点池,然后通过terraform,更改节点池的机器类型,以便它可以在不影响任何正在运行的部署、pod等的情况下重新创建。但是,terraform并没有尝试删除节点池,而是重新创建它。因此,它以409失败,nodepool已经存在。

我的问题是,我可以手动删除一个nodepool -通过gcloud命令或其他类似的方法-然后重新运行terraform,希望不会遇到409 (nodepool已经存在)错误吗?这会对地形状态文件产生什么影响吗?如果我删除了预期存在的资源(节点池),terraform会完全失败吗?

注意-我尽我最大的努力包括所有的信息,但如果有更多的信息需要,请让我知道,我会尝试编辑这个和添加更多的信息。谢谢。

我找到了一个关于如何将工作负载迁移到不同机器类型的示例基本上你做了正确的动作。

  • 并行创建大型机器类型的节点池
  • 迁移工作负载
  • 从要删除的节点池中抽取节点。
  • 从新的节点池中抽取节点
  • 然后删除旧的nodepool

基本上是你已经做过的:

我的解决方案是创建一个额外的临时nodepool,将所有pod迁移到它,封锁并排出默认的nodepool

但是如果你想在手动操作后重新应用TF,那么你可能会有很多错误,因为TF保存了一个状态。

我认为你需要做的是上面的所有步骤,但是使用TF,这样它就不会失去与其状态的一致性。

特别是因为镜像更改对GKE来说不是一个透明的操作,这就是为什么文档建议创建一个新的nodepool。

考虑到Terraform不会让你管理你的集群(警警线,排水等)那一定是手工的。

如果您的问题是在创建新资源之前破坏资源的默认地形行为,您可以尝试在地形配置中使用'lifecycle'元参数。

resource "google_container_node_pool" "example" {
# ...
lifecycle {
create_before_destroy = true
}
}

这将确保您想要替换的节点池在新机器类型的替换池创建之前一直有效。

最新更新