You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Kubernetes集群时保留PD-SSD持久磁盘的可行方案咨询

解决GKE集群删除后保留PD-SSD磁盘的问题

我明白你遇到的困扰:明明设置了StorageClass的Retain回收策略,删除Kubernetes集群时磁盘还是跟着没了。这其实是因为磁盘的管理归属和集群删除的触发方式共同导致的,下面给你两种可行的解决方案:

方案一:保留动态创建的磁盘(针对现有配置)

你当前是通过Kubernetes的kubernetes.io/gce-pd provisioner动态创建的PD磁盘,这类磁盘本质是GCP项目中的独立资源,不属于GKE集群的附属组件。之所以被删除,大概率是因为Terraform在销毁集群时,同时清理了它管理的Kubernetes资源(包括PVC/PV),甚至可能误触了磁盘的生命周期。按以下步骤操作可以避免:

  1. 提前备份磁盘信息
    在删除集群前,先找出磁盘的关键信息:

    • 用kubectl get pv找到PVC绑定的PV名称,然后执行kubectl describe pv <你的PV名称>,在输出里找到gcePersistentDisk字段下的pdName(这就是GCP上的磁盘名),同时记录磁盘所在的区域。
    • 或者直接用GCP命令行查询:gcloud compute disks list --filter="name~pvc-",筛选出动态生成的PVC关联磁盘。
  2. 解绑PV与PVC
    执行这条命令解除PV和PVC的绑定,避免后续删除PVC时触发不必要的资源清理:

    kubectl patch pv <你的PV名称> -p '{"spec":{"claimRef": null}}'
    
  3. 让Terraform放弃管理Kubernetes存储资源
    打开你的Terraform配置文件,把关于PersistentVolumeClaim、StorageClass、Deployment这些Kubernetes资源的代码注释掉,然后执行terraform apply。这一步会让Terraform不再跟踪这些资源,后续销毁集群时不会碰它们。

  4. 删除集群
    现在执行terraform destroy删除GKE集群,此时动态创建的PD磁盘会留在你的GCP项目中,不会被删除。

  5. 后续复用磁盘
    新建集群后,你可以通过静态PV来挂载这个已有磁盘:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: existing-elasticsearch-pv
    spec:
      capacity:
        storage: 30G
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      gcePersistentDisk:
        pdName: <你记录的磁盘名称>
        fsType: ext4 # 保持和之前一致的文件系统类型
    

    然后创建PVC时,指定这个PV的名称即可完成绑定。

方案二:用Terraform独立管理磁盘(更可控的长期方案)

如果希望从根源上避免磁盘被误删,建议用Terraform单独创建PD磁盘,让它完全独立于GKE集群的生命周期:

  1. 用Terraform创建独立的PD-SSD磁盘
    在你的Terraform配置中添加磁盘资源:

    resource "google_compute_disk" "elasticsearch_disk" {
      name  = "elasticsearch-ssd-disk"
      type  = "pd-ssd"
      zone  = "us-central1-a" # 务必和你的GKE集群在同一区域
      size  = 30
    }
    
  2. 创建静态PV绑定该磁盘
    无论是用YAML还是Terraform的Kubernetes provider,创建静态PV时直接引用这个磁盘:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: elasticsearch-pv
    spec:
      capacity:
        storage: 30G
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      gcePersistentDisk:
        pdName: elasticsearch-ssd-disk
        fsType: ext4
    
  3. 调整PVC使用静态PV
    修改你的PVC配置,去掉storageClassName(或者指定一个用于静态PV的StorageClass),确保它能绑定到上面的静态PV。

这样一来,GKE集群的创建/销毁完全不会影响这个独立磁盘,只要你不手动删除Terraform中的google_compute_disk资源,磁盘就会一直保留在GCP项目中。

内容的提问来源于stack exchange,提问作者klee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:24:40