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

明明存在local-storage存储类,Kubernetes为何无法找到?

关于Kubernetes local-storage存储类的矛盾问题

问题现象

我有一批与local-storage存储类绑定的PV,从PV列表可看到STORAGECLASS字段均标记为local-storage:

$ kubectl get pv -n example-com
NAME               CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                            STORAGECLASS    REASON   AGE
db-worker-1        10Gi       RWO            Retain           Bound    example-com/cluster-pg-3          local-storage            2d20h
db-worker-1-loki   10Gi       RWO            Retain           Bound    example-com/data-loki-backend-0   local-storage            14m
db-worker-2        10Gi       RWO            Retain           Bound    example-com/cluster-pg-1          local-storage            2d20h
db-worker-2-loki   10Gi       RWO            Retain           Bound    example-com/data-loki-backend-2   local-storage            14m
db-worker-3        10Gi       RWO            Retain           Bound    example-com/cluster-pg-2          local-storage            2d20h
db-worker-3-loki   10Gi       RWO            Retain           Bound    example-com/data-loki-backend-1   local-storage            14m

同时,我有一批使用local-storage存储类的PVC,其中部分处于Bound状态,其余处于Pending状态:

$ kubectl get pvc -n example-com
NAMESPACE    NAME                            STATUS    VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS    AGE
example-com   cluster-pg-1                    Bound     db-worker-2        10Gi       RWO            local-storage   2d20h
example-com   cluster-pg-2                    Bound     db-worker-3        10Gi       RWO            local-storage   2d20h
example-com   cluster-pg-3                    Bound     db-worker-1        10Gi       RWO            local-storage   2d20h
example-com   data-loki-backend-0             Bound     db-worker-1-loki   10Gi       RWO            local-storage   9m42s
example-com   data-loki-backend-1             Bound     db-worker-3-loki   10Gi       RWO            local-storage   9m41s
example-com   data-loki-backend-2             Bound     db-worker-2-loki   10Gi       RWO            local-storage   9m41s
example-com   data-loki-write-0               Pending                                                local-storage   8m30s
example-com   data-loki-write-1               Pending                                                local-storage   8m26s
example-com   data-loki-write-2               Pending                                                local-storage   8m17s
example-com   export-0-grafana-loki-minio-0   Pending                                                                8m26s
example-com   export-1-grafana-loki-minio-0   Pending                                                                8m17s

处于Pending状态的PVC报错信息为:

storageclass.storage.k8s.io "local-storage" not found

但尝试列出所有存储类时,却显示无资源:

$ kubectl get sc --all-namespaces
No resources found

原因解析

这一矛盾现象的核心逻辑如下:

  1. PV的STORAGECLASS字段仅为标记,不依赖存储类存在:PV创建时若关联了存储类,该字段会被记录为字符串,但即使后续存储类被删除,这个标记依然保留,且不影响已绑定的PV/PVC关系。
  2. 已Bound的PVC不受存储类删除影响:那些处于Bound状态的PVC,是在local-storage存储类存在时创建并完成与PV绑定的,绑定完成后,Kubernetes不再依赖存储类维持该关系。
  3. 新PVC创建必须验证存储类存在:Pending状态的PVC是在存储类被删除后创建的,Kubernetes处理这类PVC时,会先验证指定的存储类是否存在,若不存在则无法完成PV匹配或动态分配,导致PVC一直处于Pending状态。

简言之:之前的local-storage存储类已被删除,但此前创建的PV/PVC绑定关系已固化,不受影响;新创建的PVC因找不到存储类,无法完成绑定。

解决方案

  1. 重建local-storage存储类:根据之前的配置重新创建该存储类,需保持关键参数一致(比如本地存储类常用的volumeBindingMode: WaitForFirstConsumer)。示例YAML如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain

执行命令创建:

kubectl apply -f storageclass-local.yaml
  1. 调整PVC的存储类配置(可选):若无需依赖存储类,可将Pending PVC的storageClassName字段修改为空字符串,这样PVC会尝试匹配未指定存储类的静态PV(但本场景下的PV均标记了local-storage,因此优先推荐重建存储类)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:28:10