terraform - 是否可以使用通过 terraform 管理的新机器类型删除和重新创建 GKE 节点池?
问题描述
我想更改我的 gke 节点池上的机器类型以更好地匹配我的 cpu 与内存使用情况,但是我在让 terraform 删除这个节点池并重新创建它时遇到了很多麻烦。由于过去用于创建集群的模块,我被锁定为默认节点池。该集群与节点池位于一个共享模块中,因此我无法通过 terraform 永久删除节点池而不删除集群,这会影响希望集群保持可用的每个人。
所以我的解决方案是创建一个额外的临时节点池,将所有 pod 迁移到它,封锁并排空默认节点池,然后通过 terraform,更改节点池的机器类型,以便在不影响任何正在运行的部署、pod 等的情况下重新创建它。但是, terraform 没有尝试删除节点池,只是重新创建它。因此它以 409 失败,节点池已经存在。
我的问题是,我可以通过 gcloud 命令或其他此类方法手动删除节点池,然后重新运行 terraform 并希望不会遇到 409(节点池已存在)错误吗?这会对 terraform 状态文件产生任何后果吗?如果我删除了它期望存在的资源(节点池),terraform 会完全失败吗?
注意 - 我已尽力包含所有信息,但如果需要更多信息,请告诉我,我将尝试编辑并添加更多信息。谢谢。
解决方案
如果您的问题是在创建新资源之前破坏资源的默认 terraform 行为,您可以尝试在 terraform 配置中使用“生命周期”元参数。
resource "google_container_node_pool" "example" {
# ...
lifecycle {
create_before_destroy = true
}
}
这将确保您要替换的节点池一直保持到创建具有新机器类型的替换池为止。
推荐阅读
- python-3.x - python pdfkit错误wkhtmltopdf以非零代码退出-6
- git - git submodule foreach 不能作为别名工作
- kubernetes-helm - 掌舵安装“未知标志:--输出”
- sql - How to combine these two queries from different tables into one to calculate percentage?
- asp.net-core - 路由到多个家庭控制器
- c# - 获取 JSON 对象的绝对路径
- c# - 在 c# 中使用委托上的扩展方法进行函数链接。是否有任何性能影响。我正在发布使用情况的代码片段
- visual-studio-code - VSCode:跳转到行尾
- reactjs - 生成发布ApK后反应原生平面列表不显示数据屏幕
- c - 与 doxygen 混淆