terraform手动退还资源后destroy报错处理

背景

我使用terraform在腾讯云上部署了一份k8s集群,但是回收集群时,我单独删除了k8s集群

这样当我执行

terraform destory
│ Error: [TencentCloudSDKError] Code=ResourceUnavailable.ClusterState, Message=CLUSTER_STATE_ERROR(cluster is in unhealthy state), RequestId=3a363509-6152-402e-a8b9-149e9332ae43

│ with module.tencentcloud_tke.tencentcloud_kubernetes_native_node_pool.native["1"],
│ on ../../modules/tke/tke.tf line 48, in resource "tencentcloud_kubernetes_native_node_pool" "native":
48: resource "tencentcloud_kubernetes_native_node_pool" "native" {



│ Error: [TencentCloudSDKError] Code=ResourceUnavailable.ClusterState, Message=CLUSTER_STATE_ERROR(cluster is in unhealthy state), RequestId=542cdfb5-9883-4b0a-8778-032687365dd6

│ with module.tencentcloud_tke.tencentcloud_kubernetes_native_node_pool.native["0"],
│ on ../../modules/tke/tke.tf line 48, in resource "tencentcloud_kubernetes_native_node_pool" "native":
48: resource "tencentcloud_kubernetes_native_node_pool" "native" {

会提示我这个集群已经找不到了,所以执行失败

解决过程

尝试直接修改状态文件

先是通过搜索引擎和大模型一通乱搜,发现给到的解决方案是要使用terraform refresh 或者直接修改状态文件

我尝试refresh不生效,猜测对删除这种场景不能用

然后只能直接修改状态文件

我的状态文件是存在腾讯云对象存储中的,当我删除掉对应的片段后,发现报了新的错误

# terraform destory
Acquiring state lock. This may take a few moments...
Releasing state lock. This may take a few moments...

│ Error: error loading state: failed to open file at terraform/prod/state/terraform.tfstate: checksum invalid

结合源码排查md5问题

上边的错误是md5错误,我尝试在本地的状态文件,远程的状态文件寻找,均没有这个md5相关的字段

只要根据报错信息,上源码搜索teraform github仓库

提示:可以直接从github上找到仓库,然后键盘按 . 打开vscode在线编辑器,这种方式去搜索更有效率

checksum = rsp.Header.Get("X-Cos-Meta-Md5")
log.Printf("[DEBUG] getObject %s: checksum: %s", cosFile, checksum)
if len(checksum) != 32 {
err = fmt.Errorf("failed to open file at %v: checksum %s invalid", cosFile, checksum)
return
}

可明显得出md5是从 X-Cos-Meta-Md5 字段获取的

然后我把文件下载下来,用

md5sum terraform.tfstate

X-Cos-Meta-Md5 设置为上边的md5值

重新执行

terraform destroy

执行成功,问题解决

总结

  • 此类问题优先寻找大模型帮助,然后去搜搜索引擎或者github的issue,期间可以夹杂一些乱试
  • 如果仍不能解决,可以直接根据报错信息去追溯源码了,这应该算是终极的解决方案了
作者

deepwzh

发布于

2025-01-21

更新于

2025-02-15

许可协议

评论