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 |
会提示我这个集群已经找不到了,所以执行失败
解决过程
尝试直接修改状态文件
先是通过搜索引擎和大模型一通乱搜,发现给到的解决方案是要使用terraform refresh
或者直接修改状态文件
我尝试refresh不生效,猜测对删除这种场景不能用
然后只能直接修改状态文件
我的状态文件是存在腾讯云对象存储中的,当我删除掉对应的片段后,发现报了新的错误
# terraform destory |
结合源码排查md5问题
上边的错误是md5错误,我尝试在本地的状态文件,远程的状态文件寻找,均没有这个md5相关的字段
只要根据报错信息,上源码搜索teraform github仓库
提示:可以直接从github上找到仓库,然后键盘按
.
打开vscode在线编辑器,这种方式去搜索更有效率
checksum = rsp.Header.Get("X-Cos-Meta-Md5") |
可明显得出md5是从 X-Cos-Meta-Md5
字段获取的
然后我把文件下载下来,用
md5sum terraform.tfstate |
将X-Cos-Meta-Md5
设置为上边的md5值
重新执行
terraform destroy |
执行成功,问题解决
总结
- 此类问题优先寻找大模型帮助,然后去搜搜索引擎或者github的issue,期间可以夹杂一些乱试
- 如果仍不能解决,可以直接根据报错信息去追溯源码了,这应该算是终极的解决方案了
terraform手动退还资源后destroy报错处理
https://blogs.92ac.cn/2025/01/21/devops/terraform手动退还资源后destroy报错处理/